SyncGatewayの_changes APIを利用して、変更されたドキュメントを継続的に取得するcURLサンプル。Sync Gatewayのソースコードを読みながら、指定できるオプションなどを紹介します。
用途としては、Couchbase Liteなどから登録されたドキュメントをストリームで受信し、リアルタイムな分析を行うストリーム処理系に渡すなどがあります。
- REST APIを利用したJSONドキュメントの登録
- _changes API
- _changes APIのクエリパラメータ
- SyncGatewayのGo実装を見てみよう
- cURLで実行してみよう
ドキュメントの登録
まずは、ドキュメントの登録方法から見てみましょう。
データベース名のURLに保存するJSONをPOSTするだけです、簡単ですね。
_changes API
GET \/{db}\/_changes
このエンドポイントで変更通知を受信することができます。
何もパラメータを指定しないと、データベース開始時点からの変更が全て返却されます。
ただし、同じドキュメントを複数回更新している場合は、最新のリビジョンのみを返します。
クエリパラメータ
_changesにはいくつかのパラメータを指定できます:
- include_docs: デフォルトではドキュメントidとrevのみが返される
- limit: 件数を絞る
- descending: 順序を逆にする、最新のn件を取得したい場合に <– 使いたかったのだけど…
- … etc
基本的にはCouchbaseLiteのドキュメントに記載されているのと同じですが、SyncGatewayでは一部実装されていないものもあるようですね。
SyncGatewayのGo実装を見てみよう
SyncGatewayで指定可能なパラメータはこちらを参照すると良いでしょう。
sync_gateway/db/changes.go
Descendingは見当たらないですね。
しかし、SinceとConitnuousを組み合わせると、ある時点から継続的に変更を受信することができます。
ログを見ると、Continuousがtrueになっているリクエストがありました。Couchbase LiteからはWebSocketを利用して継続的に変更を取得しているようです。
HTTPリクエストで設定したパラメータを解析して、前述のChangesOptionsを生成しています。
パラメータに何を指定すれば良いのかは、restパッケージのhandleChanges()を見ると分かりそうですね。
sync_gateway/rest/changes_api.go
feedの指定は以下の通り:
cURLで実行してみよう
コンソールを二つ立ち上げます。
一つ目のコンソールで変更をリスンしつつ、
もう一つのコンソールから、複数のドキュメントを登録してみましょう。
一つ目のコンソールで、変更されたドキュメントが表示されました!