RestAPI の利用(Firebase)

Firebase Realtime Database の紹介

Firebase というのは、モバイル・Webアプリケーション開発プラットフォームの一つで、現在は Google 傘下にあります。 料金 は、Spark プランだと、無料で利用可能です。容量や読み書き回数に制限がつきますが。

Firebase には、database が2種類あります。

この種のサービスは (M)BaaS ((mobile) backend as a service) などとも呼ばれ、Web application やモバイルデバイス用が簡単にクラウド上のデータにアクセスできるように、SDK (software development kit) などを提供しています。 開発者は、通常のライブラリ呼び出しのような形で、クラウドサービスにアクセスできます。 Web application 利用時のログイン操作や、android などの個人認証と連動したデザインになっています。 (REST API を直接たたくより使いやすいし、安全です。)

ただ、残念ながら今回皆さんが利用しているのは一般の Java や python なので、個人認証環境を利用するのは少しハードル高めです。

今回は、REST API へのアクセスの練習として、テストモードで実行した realtime DB を利用させてもらいます。 テストモードで実行中は、アクセス制御がおこなわれていません。URL が知られると、だれでも読み書き可能です。取扱いに注意しましょう。

データベース準備

基本的にはREST APIの利用ガイドに従って、以下のステップを進めます。 (アカウントを作成したくないという人向けに鎌田が作成したデータベースの URL も流します。ただ、コンソールが見えないと面白くないんじゃないかと。)

  1. Firebase コンソールでアカウントの作成
  2. Firebase プロジェクトの作成
  • google analytics はなくても大丈夫。
  1. Realtime database の作成
  • 左側のメニューの「構築」から Realtime Database ってのを探してください。
  • 「データベースを作成」とすると、「ロケーション」を選択してから、「テストモード」で動作させてください。作成時点から30日ですが、アクセス制御なしで動作します。あとで、「ルール」タブからアクセス制御ルールを変更可能です。
  1. Firebase コンソールの「データ」タブから、データの追加・閲覧操作をしてみましょう。
  • 「データ」タブのところにある URL が、このデータベースの URL になります。
  • 図では伏せてあります。

realtimedb.png

REST API について

REST APIの利用ガイドに戻ると、引き続いてデータの保存方法取得方法でも用いられている事例を用いながら、先に REST API について振り返っておきましょう。

授業で説明したように HTTP には GET, PUT, POST, DELETE などのメソッドがあり、URI で識別されるリソースに対する操作に対応づけることができます。REST の考え方は、URI などで識別&リンク可能な情報リソースに対し、ステートレスでかつ GET, POST, PUT, DELETE などの意味も含めて統一された操作系が提供された API を提供しようというものです。

今回利用する Realtime databse では、コンソール画面でみる JSON データ構造の各部分をリソースとしてあつかうことができます。 例えば、dababase の URL が https://docs-examples.firebaseio.com/ (実際には各自で異なる URL)で、その下に

{
  "fireblog": {
     "users": {
       "A": { "name": ..., ... },
       "B": { "name": ..., ... },
     }
  }
}

があったとすると、

  • fireblog 全体のデータは https://docs-examples.firebaseio.com/fireblog.json でアクセス可能
  • fireblog/users のデータは https://docs-examples.firebaseio.com/fireblog/users.json でアクセス可能
  • fireblog/users/A のデータは https://docs-examples.firebaseio.com/fireblog/users/A.json でアクセス可能

という形になります。

また、GET, PUT, POST, PATCH, DELETE のメソッドが提供されており、

  • GET: 指定リソースの状態を取得
    • 例: https://docs-examples.firebaseio.com/fireblog/users.json なら users 全体を取得できる
  • PUT: 指定リソースへの代入操作
    • 例: users/A を書き換えたいなら https://docs-examples.firebaseio.com/fireblog/users/A.json に PUT すべき JSON データ { "name": ... } を渡す
  • POST: 指定リソースへのリソース追加
    • 例: users にある { "name": ..., ... } というユーザを付け加えるなら https://docs-examples.firebaseio.com/fireblog/users.json に POST する。重複しない id が割り当てられ、“A”, “B” と並んで配置される
    • POST の返り値に割り当てられた id が返ってくる
  • DELETE: 指定リソースの削除
    • 例: users/A を削除するなら、https://docs-examples.firebaseio.com/fireblog/users/A.json に DELETE 操作
  • PATCH: 指定リソースへの部分追加
    • 例:users/A に属性追加する場合、例えば { "nickname": ..., "data_of_age": ... }https://docs-examples.firebaseio.com/fireblog/users/A.json に PATCH で加えることができる。
    • 詳しい用例は、こちらの PATCH の項を見てください。

コマンドラインからのデータ保存・取得

さて、先ほどの利用ガイドでは、 curl というコマンドをつかって指定 URL にアクセスしていました。Linux 環境や Mac などでは、curl コマンドが使えます。

利用ガイドから抜粋するとこんな感じ。https://docs-examples.firebaseio.com のところは、自分の準備した URL に変わります。

// データ保存
curl -X PUT -d '{
  "alanisawesome": {
    "name": "Alan Turing",
    "birthday": "June 23, 1912"
  }
}' 'https://docs-examples.firebaseio.com/fireblog/users.json'
// データ取得
curl 'https://docs-examples.firebaseio.com/fireblog/users.json'

ちなみに Windows の Power shell の場合は、Invoke-WebRequest コマンドで代替え可能です。

// データ保存
Invoke-WebRequest -Method PUT  -Body  '{ "alanisawesome": {  "name": "Alan Turing", "birthday": "June 23, 1912"}}' 'https://docs-examples.firebaseio.com/fireblog/users.json'
// データ取得
Invoke-WebRequest 'https://docs-examples.firebaseio.com/fireblog/users.json'

API 開発用ツールの利用

ただ、JSON データを少しずつ編集して試したいとき、curl コマンドは使いづらいですよね。

ってことで、Postman という Web API 開発ツールも簡単な使い方を教えておきます。 Web アプリ版と、インストール版がありますが、Web アプリ版でよいでしょう。 Postmanは google account で login できるので、firebase 用に準備したアカウントをつかうといいでしょう。(他のツールを使い慣れている方は、そちらを使ってもらえばOKです。)

立ち上げたら、真ん中に Send Query ってボタンがあると思うので、そこから HTTP request を作成できます。

  • HTTP メソッドを選択するための pull down menu
  • URL 記入欄
  • POST, PUT, PATCH などの場合は、Body 部に raw データ (JSON) に、与えるデータを書き込みます。

新しい Query を作るときは、+ ボタンでつくった新しいタブで作業すれば、前の Query をおいておけます。あと、作成した query は保存しておくこともできます。

postman.png