Karakuri.com

Fintechではたらくアプリケーションエンジニアの技術録

coincheckのページネーションAPIを使って取得した一覧から任意のIDのデータを取得する方法

coincheckの一覧取得APIではページネーションという仕様を使っています。しかしこのページネーションについてcoincheckの説明が不足している上に不具合があって大変カオスなことになっています。2017年12月にAPIの仕様変更があったので、この変更で不具合は直っていることを祈ります。今回はこの一覧取得APIから任意のIDのデータを取得する方法について書きます。

ページネーションとは

coincheckの一部APIではページネーションにてデータを分割して取得することが可能です。
・PARAMETERS
limit 1ページあたりの取得件数を指定できます。
order "desc", "asc" を指定できます。
starting_after IDを指定すると絞り込みの開始位置を設定できます。
ending_before IDを指定すると絞り込みの終了位置を設定できます。

だそうです。
取引所APIドキュメント | Coincheck(コインチェック)

何が問題なのか

一見これだけで理解したつもりになれるのですが、実際に実装しようとするとすぐに手が止まります。

starting_after IDを指定すると絞り込みの開始位置を設定できます。
ending_before IDを指定すると絞り込みの終了位置を設定できます。

ここです。これのせいでAPI仕様書に出てくるIDは1つしかないと思っていました。しかし実際には注文IDやポジションIDなど1つではないのです。読み進めて他のAPI仕様でorder_idとか出てくるまで気づきませんでした。それでも別のAPI仕様にはorder_idをidと書いていたりして読むの大変なんですが。。しかもポジションIDはポジション一覧APIからしか取得できません。なんか鶏か卵かという話になってて笑ってしまいますね。
しかしこれはまだ良いです。もっと分からないのは開始位置と終了位置のIDが以上以下なのか大小なのかが書かれていません。この仕様書は誰が書いたんですかね。エンジニアが書いたのであれば大変お粗末です。

任意のIDのポジションを取得するには

結論からいうとページネーションのIDは大小のようです。例えばポジションIDが1234のポジションを取得したい場合は下記のようなリクエストとなります。

{
  "limit": 1,
  "order": "desc",
  "starting_after": 1235,
  "ending_before": null
}

開始位置を1235で指定します。昇順だと1233になるんですかね。上記サンプルではlimitを1にしていますが、不安な場合は増やせば良いと思います。これ確かめるために実決済しないといけないわけですからね。。とりあえず分かって良かったです。