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

技術スタック
| レイヤー | 技術 |
|---|---|
| バックエンド | Ruby on Rails |
| データベース | MySQL 8.4 |
| ホスティング | 自宅サーバ + Cloudflare |
APIの使い方
山手線の全停車駅を取得
❯ curl -s 'https://train.teraren.com/lines/11302/stations.json' | jq '.[].station_name'"大崎""五反田""目黒""恵比寿""渋谷""原宿""代々木""新宿""新大久保""高田馬場""目白""池袋""大塚""巣鴨""駒込""田端""西日暮里""日暮里""鶯谷""上野""御徒町""秋葉原""神田""東京""有楽町""新橋""浜松町""田町""高輪ゲートウェイ""品川"座標から最寄り駅を検索
東京タワー付近の最寄り駅5件を取得する例。
❯ 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前後だと思う。
❯ 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 millisCDNキャッシュに入っていれば60ms程度で返ってくる。
まとめ
ekidata.jpのデータをRailsで薄くラップしただけのシンプルなAPIだけど、最寄り駅検索は地味に便利。自分の他のサービスからも内部的に使っている。
路線・駅情報のREST API開発と公開
https://blog.teraren.com/posts/stations-rest-api/ 関連記事
この記事が役に立ったら
GitHub Sponsorsで応援できます