前回に引き続きBox APIを叩いていきます。

今回はBox Content APIのイベント通知機能について説明していきます。

Box Content APIではファイルのアップロードや削除等の各イベントの発生に対して

任意の処理を実行することが出来ます。

イベント発生の都度、任意のエンドポイントに通知するWebhookの方法と

イベントのストリームをロングポーリングして取得する方法の2つを利用することが出来ます。

Webhookによるイベント検知

イベントが発生したら、Boxが任意のエンドポイントに対して直接データを送信する

Push型のアーキテクチャになります。

参考URL:https://box-content.readme.io/docs/webhooks

 

まず、Boxのアプリケーションの設定画面を開き、「新規Webhookの作成」ボタンをクリックします。

box-api-app-webhook

Webhookの設定画面が開きます。名前と説明は適当に設定。

box-api-app-webhook-basic

イベントのトリガーで、どのイベントの種類をWebhookの対象とするのかを設定します。

box-api-app-webhook-eventtype

Webhook先のエンドポイントを設定します。

box-api-app-webhook-endpoint

ペイロードはREST、XML、SOAPのいずれかを設定できます。

ただし、XMLやSOAPはContent-Typeがapplication/x-www-form-urlencodedになる上に

ペイロード自体もXMLだと

SOAPだと

といったように、XMLペイロードの前に=が付く仕様?なので注意が必要です。

ということで、現状は違和感のないREST方式がオススメです。

REST方式の場合は以下のようにコールバックパラメータを指定します。

box-api-app-webhook-params

GETはURLパラメータに付与されるパラメータで

POSTはリクエストBodyにapplication/x-www-form-urlencoded形式で付与されるパラメータです。

パラメータ値にはファイルの属性以外に固定値も入れることができます。

今のところWebhookには機能として認証の設定が無さそうなんですが

コールバックパラメータにAPIキー的なモノを入れることで認証処理は実現できそうです。

 

設定が終わったら「Webhookの保存」をクリックします。

 

Webhookのアプリケーション設定はユーザ毎に設定することができ

ユーザ毎のアプリケーション設定をしない限りはWebhookが飛ぶことはありません。

ということで、ユーザ毎のアプリケーションの設定をしていきます。

まず、右上のメニューからアプリケーションをクリックします。

box-api-app-personal1

マイアプリケーションをクリック

box-api-app-personal2

そうすると、作成したアプリケーションが表示されるので

アプリケーションの詳細画面に遷移して、「追加」をクリックします。

box-api-app-personal3

これで、当ユーザに対してWebhookが有効になります。

ロングポーリングによるイベント検知

WebhookはPush型のイベント通知だったのに対し、ロングポーリングはPull型になります。

こちらはアプリケーションの設定は前回のOAuth2.0だけで対応可能になります。

参考URL:https://box-content.readme.io/docs/webhooks

 

まず、現時点でのストリームの位置を取得します。

レスポンスはこんな感じで返って来ます。

このnext_stream_positionの値をメモっておきます。

 

次に、ロングポーリング用のURLを以下のリクエストで取得します。

レスポンスはこんな感じ。

レスポンス内のentries[0].urlのURLパラメータに

stream_position={最初に取得した現時点のストリーム位置} を追加したURLが

ロングポーリング用のURLになります。

 

このURLに対してGETリクエストをして、待機します。

イベントが発生するとレスポンスが返却されます。

 

イベントストリームにアクセスしてデータを取得します。

レスポンスこんな感じ

next_stream_positionは次に使用すべきstream_positionになり、

再度ロングポーリングを行う→イベント検出→イベント抽出

というフローを繰り返してイベントを取得し続けることになります。