API call (P)

あとは、REST API に実際にプログラムからアクセスしてみましょう。 というっても、基本Web API の利用 と基本同じです。

鎌田の方で準備したのは、以前紹介した Retrofit を用いて、Firebase に User オブジェクトデータを保存・取得するだけのプログラムです。 先ほどに引き続き fireblog/users 以下にデータを置くようにしています。

fbRealtimeDB/request_sample.py を実行すれば、サンプルデータの firebase への登録・取得がおこなわれます。 このプログラムでは、データの登録・取得は dict と JSON 間の変換をつかって処理しています。 また、同期呼出しと呼ばれる、関数呼び出しをしたら相手から結果が返ってくるまで待つスタイルで呼び出しをおこなっています。

PUT, POST の違い

データの登録については、以下の説明をしました。

  • PUT: 指定リソースへの代入操作
    • users/A{ "name": ... } を追加したい。あるいは、上書き更新したい。
  • POST: 指定リソースへのリソース追加
    • users/ 以下に { "name": ... } を追加したいが、その id は、システムに付けて欲しい
    • system が付与した id を返り値として返すのが普通

ブログへの投稿などもそうですが、ユーザの id とか、記事の id は、複数利用者の間で「同じ id で重複する」と嫌ですよね。システム側で割り振ってもらって、利用者は、もらった id の領域を使うというのは、素直な考え方です。

そういう際は、要素の作成時は POST でおこない、その後は、PUT で作成済み要素に修正を書けていくというのは、分かりやすい考え方になります。

練習問題

  • まずは、自分で firebase 上にデータベースを準備しましょう。

  • コンソール画面を用いたデータ登録、Web API を用いたデータ登録&参照を試してみましょう。

  • 上記プログラムを動作させて、動作確認を取りましょう。

  • 上記プログラムでは PUT, GET, POST メソッドを準備しましたけど、利用サンプル側に POST は入っていません。POST メソッドでデータを追加& ID を取得し、その ID を用いて GET でデータ取得するプログラムを追加しましょう。

なお、POST の結果は

pust_result: { "name": "ID_ABCD..." }

という形式でかえり、value: “ID_ABCD…” が登録された時のキーになります。

なので、Python dict 版では、dict に格納されているデータは post_result["name"] で取りだせます。