hi, hikaru

『駅すぱあと』でお馴染みヴァル研究所で、テクニカルエバンジェリストとして働いている丸山が綴るブログです。

経路探索APIの「最大回答数」と「最大探索数」って? #駅すぱあとWebサービス

こんにちは。 今回は駅すぱあとWebサービスでちょっと分かりづらい仕様、経路探索APIの最大回答数(=answerCountパラメータ)と最大探索数(=searchCountパラメータ)の違いについて解説しようと思います。

f:id:hiiiiiiihikaru:20171213134324p:plain

最大回答数とは?

レスポンスの/ResultSet/Courseの数です。例えば以下のように、answerCount=2と指定すると、/ResultSet/Courseは2個返ります。

curl "https://api.ekispert.jp/v1/xml/search/course/extreme?key=xxx&viaList=新宿:渋谷&searchType=plain&answerCount=2"
<ResultSet apiVersion="1.27.0.0" engineVersion="201804_01a">
<Course searchType="plain" dataType="plain">
:
</Course>
<Course searchType="plain" dataType="plain">
:
</Course>
</ResultSet>

最大探索数とは?

ドキュメントでは最大探索数と一言添えられているだけですが、噛み砕いて説明すると、

APIの中で、駅すぱあと順」で取得する経路の数です。

例えばsearchCount=7answerCount=5sort=priceという条件で経路探索APIを叩いたとしましょう。そうすると、API内部では以下のような動きをします。

  1. 指定された最大探索数(searchCount)の数だけ経路探索結果を取得(この時並び順は駅すぱあと順となる)
    ABCDEFG
  2. 指定されたソート(sort)に並べ替え
    CDAEGFA
  3. 指定された最大回答数(answerCount)で切る
    CDAEG

これを見てもらうとわかる通り、駅すぱあとは、基本的に「駅すぱあと順」と呼ばれる順序でしか経路を持ってこれません。料金、乗換回数順などの順序入れ替えは、エンジンから経路を受け取ってから行われます。

つまり、最大探索数の値を大きくすればするほど、多くの選択肢からソートができると言うことになります。

ただし、最大探索数や最大回答数を多くすると、少なからずレスポンス速度に影響が出ますので、そこだけはご注意くださいね。