25
13

More than 3 years have passed since last update.

GitHub Pagesを活用して擬似REST APIサーバーを作る

Last updated at Posted at 2020-03-15

はじめに

Qiita - GitHub Actionsを活用して擬似APIサーバーを用意する
こちらの記事で、Actionsを用いてjsonファイルを自動更新でき、それをPagesで読み込めるという事は、それはすなわち擬似的なAPIサーバーとして運用できるという事では、という提案をしました。
ただこれでは、膨大なデータのうち欲しいデータはごく一部なのに、毎回全部取得して、keyから辿っていく必要があります。

じゃあjsonファイルを分割すれば良かろう、どうやって?

REST API

Qiita - 0からREST APIについて調べてみた
巷でよく聞くREST API、これは要するにデータに準拠したURLルーティングの事だと理解出来ました、これを基準にして分割してみます。

sample.json(データの出典:北海道オープンデータポータルから取得したデータを加工したもの)

{
    "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サーバーとなります。

再利用

  1. 上記のリポジトリをフォークする
  2. ホスティングしたいjsonをjsonフォルダに入れる
  3. masterにプッシュする(→自動的にgh-pagesにデータが出力される)

※手動でActionsとPagesをActivationする必要があります

注意事項

  • まだ作ったばかりなのでフロント側でちゃんと読み込めるか試していません
  • まだ作ったばかりなのでどんな不具合があるかわかりません
  • jsonのkeyは、英字のみを推奨(日本語でURLがどのようにエスケープされるか未確認)
25
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
13