はじめに
Qiita - GitHub Actionsを活用して擬似APIサーバーを用意する
こちらの記事で、Actionsを用いてjsonファイルを自動更新でき、それをPagesで読み込めるという事は、それはすなわち擬似的なAPIサーバーとして運用できるという事では、という提案をしました。
ただこれでは、膨大なデータのうち欲しいデータはごく一部なのに、毎回全部取得して、keyから辿っていく必要があります。
じゃあjsonファイルを分割すれば良かろう、どうやって?
REST API
Qiita - 0からREST APIについて調べてみた
巷でよく聞くREST API、これは要するにデータに準拠したURLルーティングの事だと理解出来ました、これを基準にして分割してみます。
{
"data": [
{
"no": "1",
"date": "2020-01-28T00:00",
"place": "中国武漢市",
"age": "40代",
"sex": "女性"
},
{
"no": "2",
"date": "2020-02-14T00:00",
"place": "札幌市",
"age": "50代",
"sex": "男性"
}
],
"last_update": "2020-03-14T23:14:01.849130+09:00"
}
ホスティングURLをhttp://{HOSTING}/とします。
取得するデータ | REST APIのURL |
---|---|
sample.jsonの全データ | http://{HOSTING}/sample |
sample.jsonのlast_update | http://{HOSTING}/sample/last_update |
sample.jsonのdataの1つ目の要素 | http://{HOSTING}/sample/data/0 |
sample.jsonのdataの2つ目の要素 | http://{HOSTING}/sample/data/1 |
sample.jsonのdataの2つ目の要素のno | http://{HOSTING}/sample/data/1/no |
となっていればRESTな訳です。
GitHub Pagesで擬似REST APIをつくる
GitHub Pagesでは、ディレクトリへのアクセスはindex.htmlへ差し向けられます。
つまり、http://{HOSTING}/sampleにアクセスした場合は、gh-pagesブランチのルート/sample/index.htmlにsample.jsonの全データを書き込んでおけば、欲しいデータのJSON文字列を返す訳です。
http://{HOSTING}/sample/last_updateの場合はルート/sample/last_update/index.htmlに「2020-03-14T23:14:01.849130+09:00」という文字列を書き込んでおく。
以上の手順でホスティングすれば、擬似的にREST APIサーバーが出来ていると言えるのではないでしょうか。
実装
Kanahiro/gh-pages-rest-api
こちらのスクリプトは、masterへのプッシュ時にActionsによりmain.pyが実行されます。
main.pyは、jsonフォルダ内のjsonファイルを読み出して、gh-pagesに前述のとおり細分化されたディレクトリにindex.htmlを配置します。
上記リポジトリのjsonフォルダ内には前述のsample.jsonが格納されています。
gh-pagesのホスティングURLはhttps://kanahiro.github.io/gh-pages-rest-api/なので
取得するデータ | REST APIのURL |
---|---|
sample.jsonの全データ | https://kanahiro.github.io/gh-pages-rest-api/sample |
sample.jsonのlast_update | https://kanahiro.github.io/gh-pages-rest-api/sample/last_update |
sample.jsonのdataの1つ目の要素 | https://kanahiro.github.io/gh-pages-rest-api/sample/data/0 |
sample.jsonのdataの2つ目の要素 | https://kanahiro.github.io/gh-pages-rest-api/sample/data/1 |
sample.jsonのdataの2つ目の要素のno | https://kanahiro.github.io/gh-pages-rest-api/sample/data/1/no |
以下のとおり、masterへのプッシュ後に自動的にホスティングされます。
出来るリクエストはGETのみですが、まさしくREST APIがGitHub Pagesに実装されていると言えるのではないでしょうか。
そしてQiita - GitHub Actionsを活用して擬似APIサーバーを用意するで紹介したように、Actionsによるスケジューリングでjsonファイルを自動的に更新できれば、データが自動的に更新されるREST APIサーバーとなります。
再利用
- 上記のリポジトリをフォークする
- ホスティングしたいjsonをjsonフォルダに入れる
- masterにプッシュする(→自動的にgh-pagesにデータが出力される)
※手動でActionsとPagesをActivationする必要があります
注意事項
- まだ作ったばかりなのでフロント側でちゃんと読み込めるか試していません
- まだ作ったばかりなのでどんな不具合があるかわかりません
- jsonのkeyは、英字のみを推奨(日本語でURLがどのようにエスケープされるか未確認)