Cargo-Planner Docs
双方向通信
頻繁に使用されるパターンとして、入力データをAPIに送信し、計算処理を行った後、結果が提示され、それをアプリケーションに埋め込むことができます。
時には、コンテナからいくつかの貨物を削除し、他のものを追加するなど、手動で再配置を行いたいことがあります。そのような変更を行った場合、アプリケーションにもその変更が反映されると便利です - Cargo-Plannerがシステムと相互作用することを望むでしょう。そのためには、いくつかのWebhookを追加したいと思うでしょう。
Webhook
Webhookは、特定のイベントを購読するために設定するエンドポイントです。
例えば、ロードプランが保存/更新されるとすぐに、その結果をサーバーに送信したいとします。これを達成する方法は次のとおりです:

- Webアプリケーションの開発者ポータルに移動します
- Webhookセクションを展開します
- Webhookを作成するを押します
- データを投稿したいURLを入力し、購読したいイベントを選択します
- 保存を押します
イベントのリスニング
サーバー上で、エンドポイントを追加します。これは、上記のURLセクションでエンドポイントを作成する際に指定したものと同じです
from flask import Flask, request, abort
import hmac
import hashlib
app = Flask(__name__)
@app.route('/events-from-cargoplanner/', methods=['POST'])
def receive_webhook():
payload = request.get_data(as_text=True)
received_signature = request.headers.get('X-Hub-Signature')
secret = "_nf7TmrgTJt6Gk43d9aSAK_yOEE58KXlTgvotei3Xe4" # エンドポイント用に生成されたシークレットを追加
expected_signature = hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()
if hmac.compare_digest(f'sha256={expected_signature}', received_signature):
# ペイロードを処理
return "Payload processed", 200
else:
abort(403, 'Signature verification failed')
if __name__ == '__main__':
app.run()
Webhookを作成すると、Cargo-Plannerから実際にデータが送信されていることを確認するために、サーバー上で使用できるシークレットを受け取ります。