505 文字
3 分

路線・駅情報のREST API開発と公開

概要#

  • ekidata.jpの路線・駅データを使ったREST APIを作った
  • 路線の停車駅一覧、駅の詳細情報、座標ベースの最寄り駅検索ができる
  • Rails + MySQL 8.4で、自宅サーバ + Cloudflareで公開中

技術スタック#

レイヤー技術
バックエンドRuby on Rails
データベースMySQL 8.4
ホスティング自宅サーバ + Cloudflare

APIの使い方#

山手線の全停車駅を取得#

Terminal window
curl -s 'https://train.teraren.com/lines/11302/stations.json' | jq '.[].station_name'
"大崎"
"五反田"
"目黒"
"恵比寿"
"渋谷"
"原宿"
"代々木"
"新宿"
"新大久保"
"高田馬場"
"目白"
"池袋"
"大塚"
"巣鴨"
"駒込"
"田端"
"西日暮里"
"日暮里"
"鶯谷"
"上野"
"御徒町"
"秋葉原"
"神田"
"東京"
"有楽町"
"新橋"
"浜松町"
"田町"
"高輪ゲートウェイ"
"品川"

座標から最寄り駅を検索#

東京タワー付近の最寄り駅5件を取得する例。

Terminal window
curl -s 'https://train.teraren.com/stations/near_by_stations.json?lon=139.7454329&lat=35.6585805&limit=5' | jq
[
{
"station_cd": 9930122,
"station_name": "赤羽橋",
"station_g_cd": 9930122,
"distance": 0.42903606641634495
},
{
"station_cd": 2800317,
"station_name": "神谷町",
"station_g_cd": 2800317,
"distance": 0.49008364939314947
},
{
"station_cd": 9930306,
"station_name": "御成門",
"station_g_cd": 9930306,
"distance": 0.6242921448435772
},
{
"station_cd": 9930305,
"station_name": "芝公園",
"station_g_cd": 9930305,
"distance": 0.6391377203522578
},
{
"station_cd": 9930121,
"station_name": "大門",
"station_g_cd": 9930121,
"distance": 0.8572190503449685
}
]

レスポンス速度#

GETリクエストはCDNに載るのでリモートからの正確なベンチマークは取りにくい。CDNキャッシュが効いていない初回リクエストで100ms程度。Wi-Fiのロスが10msぐらいあるので、実質90ms前後だと思う。

Terminal window
time curl -s 'https://train.teraren.com/stations/near_by_stations.json?lon=138.754&lat=35.68&limit=5' | jq
[
{
"station_cd": 1131124,
"station_name": "勝沼ぶどう郷",
"station_g_cd": 1131124,
"distance": 1.260601057731234
},
{
"station_cd": 1131125,
"station_name": "塩山",
"station_g_cd": 1131125,
"distance": 3.307396894029273
},
{
"station_cd": 1131126,
"station_name": "東山梨",
"station_g_cd": 1131126,
"distance": 4.871013008643865
},
{
"station_cd": 1131123,
"station_name": "甲斐大和",
"station_g_cd": 1131123,
"distance": 5.162276817888356
},
{
"station_cd": 1131127,
"station_name": "山梨市",
"station_g_cd": 1131127,
"distance": 6.436090680301475
}
]
________________________________________________________
Executed in 94.13 millis fish external
usr time 10.79 millis 0.12 millis 10.68 millis
sys time 7.64 millis 1.38 millis 6.26 millis

CDNキャッシュに入っていれば60ms程度で返ってくる。

まとめ#

ekidata.jpのデータをRailsで薄くラップしただけのシンプルなAPIだけど、最寄り駅検索は地味に便利。自分の他のサービスからも内部的に使っている。

路線・駅情報のREST API開発と公開
https://blog.teraren.com/posts/stations-rest-api/
作者
Yuki Matsukura
公開日
2024-06-30
ライセンス
CC BY-NC-SA 4.0
この記事が役に立ったら
GitHub Sponsorsで応援できます

コメント