Help us understand the problem. What is going on with this article?

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

はじめに

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がどのようにエスケープされるか未確認)
Kanahiro
GISを中心に勉強中、いろいろ作っています。
https://kiguchi999.hatenablog.com/
MIERUNE
位置情報に関する様々な技術情報やTipsをMIERUNEのメンバーがお届けします。位置や可視化に関するご相談がございましたらぜひご連絡ください!
https://mierune.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away