Firebase Database REST API

API 使用量

任意の Firebase Realtime Database の URL を REST エンドポイントとして使用できます。必要なすべての機能 URL の末尾に .json を追加してリクエストを送信します。 HTTPS クライアントから通信できます。

HTTPS が必須です。Firebase は暗号化されたトラフィックにのみ応答するため、お客様のデータは安全に保護されます。

GET - データの読み取り

Realtime Database のデータは、HTTP を発行して読み取ることができます エンドポイントへの GET リクエスト。次の例をご覧ください。 は、ユーザーの認証情報を取得する方法を示しています。 以前に Realtime Database に保存していた名前。

curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
<ph type="x-smartling-placeholder">

リクエストの正常終了は、200 OK の HTTP ステータス コードで示されます。レスポンスには、リクエストに関連付けられたデータ GET リクエストのパスを指定します。

{ "first": "Jack", "last": "Sparrow" }

PUT - データの書き込み

PUT リクエストを使用してデータを書き込むことができます。

curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'

リクエストの正常終了は、200 OK の HTTP ステータス コードで示されます。レスポンスには、 PUT リクエスト。

{ "first": "Jack", "last": "Sparrow" }

POST - データのプッシュ

JavaScript push() と同等の処理を実現するには メソッド(データのリストを参照)、 POSTリクエストを発行できます

curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \
  'https://[PROJECT_ID].firebaseio.com/message_list.json'

成功したリクエストは、200 OK HTTP ステータスで示されます。 できます。レスポンスには、新しいデータの子の名前が含まれます。 POST リクエスト内で指定されます。

{ "name": "-INOQPH-aV_psbk3ZXEX" }

PATCH - データの更新

特定の場所の子供を上書きせずに更新できます PATCH リクエストを使用して既存のデータを取得します。次の名前付きの子: PATCH を使用して書き込まれるデータは上書きされますが、省略されます 削除されません。これは、JavaScript の update() 関数を使用します。

curl -X PATCH -d '{"last":"Jones"}' \
 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'

成功したリクエストは、200 OK HTTP ステータスで示されます。 できます。レスポンスには、 PATCH リクエスト。

{ "last": "Jones" }

DELETE - データの削除

DELETE リクエストを使用してデータを削除できます。

curl -X DELETE \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'

DELETE リクエストが成功した場合は、 JSON を含むレスポンスを持つ 200 OK HTTP ステータス コード null

メソッドのオーバーライド

ブラウザから REST 呼び出しを行う場合、 リクエスト メソッドをオーバーライドするには、 POST リクエストを実行し、 X-HTTP-Method-Override リクエスト ヘッダー。

curl -X POST -H "X-HTTP-Method-Override: DELETE" \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'

x-http-method-override クエリ パラメータを使用することもできます。

curl -X POST \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'

条件付きリクエスト

条件付きリクエストは、SDK のトランザクション オペレーションに相当する REST であり、 適用できます。ワークフローの概要と、条件付きリクエストの詳細を確認できます (データの保存)をご覧ください。

Firebase ETag

Firebase ETag は、指定された場所にある現在のデータの一意の識別子です。もし その場所でデータが変更されると、ETag も変更されます。Firebase ETag は ヘッダー(通常は GET。ただし、PATCH 以外の値を指定できます)。

curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'

if-match

if-match 条件では、更新するデータの ETag 値を指定します。 条件を使用した場合、Realtime Database は、 書き込みリクエストがデータベース内の既存データの ETag と一致するまず、 Firebase ETag リクエストを使用して場所の ETag。上書きされたロケーションを上書きするには null の場合は、null_etag を使用します。

curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'

想定されるレスポンス

次の表に、各リクエスト タイプで想定されるレスポンスの概要を示します。 照合が行われます

リクエストの種類 「X-Firebase-ETag: true」 ETag は
if_match: <matching etag> と一致します
ETag が
if_match: <no matching etag> と一致しません
入手 レスポンス ステータス/コンテンツ 200: "<データパス>" 400: 「...サポート対象外です」 400: 「...サポート対象外です」
追加されたヘッダー ETag: <ETag_of_data> なし なし
PUT レスポンス ステータス/コンテンツ 200: "<put_data>" 200: "<put_data>" 412: 「...ETag の不一致」
追加されたヘッダー ETag: <ETag_of_put_data> なし ETag: <database_ETag>
投稿 レスポンス ステータス/コンテンツ 200: "<post_data>" 400: 「...サポート対象外です」 400: 「...サポート対象外です」
追加されたヘッダー ETag: <ETag_of_post_data> なし なし
パッチ レスポンス ステータス/コンテンツ 400: 「...サポート対象外です」 400: 「...サポート対象外です」 400: 「...サポート対象外です」
追加されたヘッダー なし なし なし
削除 レスポンス ステータス/コンテンツ 200: null 200: "<data_after_put>" 412: 「...ETag の不一致」
追加されたヘッダー ETag: <ETag_of_null> なし ETag: <database_ETag>

クエリ パラメータ

Firebase Database REST API は、次のクエリ パラメータを受け入れ、 values:

access_token

すべてのリクエスト タイプでサポートされています。このリクエストを認証して、 Firebase Realtime Database Security Rules で保護されたデータへのアクセス。 詳しくは、 REST 認証のドキュメントをご覧ください。

curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'

shallow

これは高度な機能であり、大規模な すべてをダウンロードする必要はありません次に設定 true: 返されるデータの深さを制限します。 作成します。ロケーションのデータが JSON プリミティブの場合 (文字列、数値、ブール値)のみが返されます。もし その場所のデータ スナップショットは JSON オブジェクトで、 各キーの値は true に切り捨てられます。

引数 REST メソッド 説明
浅い GET レスポンスの深さを制限する。
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'

shallow を他のクエリと混在させることはできません。 あります。

print

サーバーからのレスポンスで返されるデータをフォーマットします。

引数 REST メソッド 説明
かわいい GET、PUT、POST、PATCH、DELETE 人が読める形式でデータを表示します。
サイレント GET、PUT、POST、PATCH データを書き込むときにサーバーからの出力を抑制するために使用されます。 結果のレスポンスは空になり、 204 No Content HTTP ステータス コード。
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=pretty'
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=silent'

callback

GET でのみサポートされています。ウェブブラウザから REST 呼び出しを行うには JSONP を使用してレスポンスを JavaScript コードで 使用します。callback= を追加して REST API をラップする 指定したコールバック関数で返されるデータを返します。

<script>
  function gotData(data) {
    console.log(data);
  }
</script>
<script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>

形式

export に設定すると、サーバーは優先度をエンコードします。 レスポンスが返されます。

引数 REST メソッド 説明
書き出し GET レスポンスに優先度情報を含めます。
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'

ダウンロード

GET でのみサポートされています。特定のトリガーに対して ウェブブラウザからデータをダウンロードする場合は、download= を追加します。 これにより、REST サービスは適切なヘッダーを追加して、 データがファイルに保存されることはブラウザで認識されます。

curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
<ph type="x-smartling-placeholder">

timeout

この値を使用して、サーバー側の読み取り時間を制限します。読み取りが リクエストが割り当てられた時間内に完了しなかった場合、 400 エラー。これは、少量のデータ転送が予想される場合に特に便利です。 大きなサブツリーを取得するのに 長時間待たされることも避けなければなりません実際 データサイズとキャッシュによって読み取り時間が異なる場合があります。

3ms の形式で timeouts を指定します。 3s または 3min は、数値と単位に置き換えます。回答が「いいえ」の場合 指定すると、15min の最大 timeout が 適用されました。timeout が正でないか、最大値を超えている場合、 リクエストは HTTP 400 エラーで拒否されます。

writeSizeLimit

書き込みのサイズを制限するには、 writeSizeLimit クエリ パラメータを tiny(target=1s)、small(target=10s)、 medium(ターゲット=30 秒)、large(ターゲット=60 秒)。 Realtime Database が各書き込みリクエストのサイズを推定し、中止する ターゲット時間よりも長くかかるリクエストを除外します。

unlimited を指定した場合、非常に大きな書き込み(最大 256 MB のペイロード) 許可されるため、データベースがリクエストを処理している間、後続のリクエストがブロックされる可能性があります。 確認できます。サーバーに到達すると、書き込みをキャンセルすることはできません。

curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'

書き込みが大きすぎる場合は、次のエラー メッセージが表示されます。

Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.

また、データベース全体に defaultWriteSizeLimit を設定することもできます。 Cloud SQL インスタンスを使用しますこの上限は、SDK からのリクエストを含むすべてのリクエストに適用されます。 defaultWriteSizeLimitlarge に設定して新しいデータベースが作成されます。 Firebase CLI を使用して defaultWriteSizeLimittiny に設定することはできません。

firebase database:settings:set defaultWriteSizeLimit large
<ph type="x-smartling-placeholder">

orderBy

詳しくは、 順序付きデータ をご覧ください。

limitToFirst、limitToLast、startAt、endAt、equalTo

詳しくは、 データのフィルタリング ご確認ください。

REST API からのストリーミング

Firebase REST エンドポイントは、 EventSource / サーバー送信イベント 構成されます。変更を Realtime Database 内の 1 つの場所にストリーミングするには: 次のことを行う必要があります。

  • クライアントの Accept ヘッダーを "text/event-stream" に設定する
  • HTTP リダイレクト(特に HTTP ステータス コード 307)を尊重する
  • 場所の読み取り権限が必要な場合は、 auth パラメータ

その見返りとして、サーバーは名前付きイベントを 変更します。これらのメッセージの構造は、 EventSource プロトコル。

event: event name
data: JSON encoded data payload

サーバーが送信するイベントは次のとおりです。

put

JSON でエンコードされたデータは、path という 2 つのキーを持つオブジェクトです。 およびデータです。path キーは リクエスト URL からの相対位置です。クライアントは、 data を使用したキャッシュ内のその場所のデータ。

patch

JSON でエンコードされたデータは、path という 2 つのキーを持つオブジェクトです。 およびデータです。path キーは リクエスト URL からの相対位置です。各キーについて data の場合、クライアントは メッセージ内のそのキーのデータでキャッシュ内の対応するキーを返します。

keep-alive

このイベントのデータは null です。必要なご対応は特にありません。

キャンセル

予期しないエラーが発生すると、「cancel」イベントが送信され、接続が終了することがあります。 原因は、このイベントで提供されるデータに記載されています。考えられる原因は次のとおりです。 次のようになります。 1.Firebase Realtime Database Security Rules は、リクエストされた場所での読み取りを許可しなくなりました。「 この原因の `data` の説明は「Permission denied」です。 2. 書き込みによってイベント ストリーマーがトリガーし、上限を超える大きな JSON ツリーを送信した場合、 512 MB。この原因の `data` は「指定されたペイロードが大きすぎます。 おすすめします

auth_revoked

このイベントのデータは、認証情報がリソースに の有効期限が切れています。このイベントは、指定された auth が パラメータが無効になりました。

サーバーから送信される可能性のあるイベントのセットの例を次に示します。

// Set your entire cache to {"a": 1, "b": 2}
event: put
data: {"path": "/", "data": {"a": 1, "b": 2}}

// Put the new data in your cache under the key 'c', so that the complete cache now looks like:
// {"a": 1, "b": 2, "c": {"foo": true, "bar": false}}
event: put
data: {"path": "/c", "data": {"foo": true, "bar": false}}

// For each key in the data, update (or add) the corresponding key in your cache at path /c,
// for a final cache of: {"a": 1, "b": 2, "c": {"foo": 3, "bar": false, "baz": 4}}
event: patch
data: {"path": "/c", "data": {"foo": 3, "baz": 4}}

優先事項

ビジネスの優先度情報は、 "仮想子供".priority という名前で作成されます。優先度は、 GET リクエストを作成し、PUT リクエストでそれらを書き込みます。 たとえば、次のリクエストでは、指定された IP アドレスの users/tom 個のノード:

curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'

優先度とデータを同時に書き込むには、 JSON ペイロードの .priority 子要素:

curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \
  'https://[PROJECT_ID].firebaseio/users/tom.json'

優先度とプリミティブ値(文字列など)を同時に書き込むには、 .priority の子を追加して、プリミティブ値 子 .value 内:

curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \
  'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'

これにより、優先度 1.0"Tom" が書き込まれます。 優先度は、JSON ペイロードの任意の深さに含めることができます。

サーバーの値

プレースホルダ値を使用して、特定の場所にサーバーの値を書き込むことができます。 .sv キーを 1 つ持つオブジェクトです。このキーの値は、 設定するサーバー値のタイプ。たとえば、次のようになります。 ノードの値を Firebase サーバーの現在の Pod に タイムスタンプ:

curl -X PUT -d '{".sv": "timestamp"}' \
  'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'

次のように、サーバーの値を使用して優先度を記述することもできます。 "仮想子供"必要があります。

サポートされているサーバーの値は次のとおりです。

サーバーの値
timestamp UNIX エポック時刻からの経過時間(ミリ秒)。
インクリメント 次の形式で、整数または浮動小数点のデルタ値を指定してください { ".sv": {"increment": <delta_value> }}: これを使用してアトミックに 現在のデータベース値をインクリメントします。データがまだ存在しない場合は、 適用します。デルタ値または既存のデータのいずれかが浮動小数点数である場合 どちらの値も浮動小数点数として解釈され、 double 値として出力できます。倍精度演算と double 値の表現は IEEE 754 セマンティクス。正または負の整数オーバーフローがある場合、合計が計算されます。 double 型として定義されます。

Firebase Realtime Database Security Rules の取得と更新

REST API は、Cloud Storage バケットの取得と更新に Firebase Realtime Database Security Rules: 追加します。この場合、Firebase プロジェクトのシークレットが必要です。 Chronicle の <ph type="x-smartling-placeholder"></ph> Firebase プロジェクトの [サービス アカウント] パネル 設定されます。

curl 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'
curl -X PUT -d '{ "rules": { ".read": true } }' 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'

リクエストの認証

デフォルトでは、REST リクエストは認証なしで実行され、 Realtime Database ルール: 一般公開の読み取り / 書き込みアクセスを許可する対象 できます。リクエストを認証するには、次のコマンドを使用します。 access_token= または auth= クエリ パラメータ。

REST API を使用した認証の詳細については、以下をご覧ください。 REST リクエストを認証する

エラー条件

Firebase Database REST API は、次のエラーコードを返すことがあります。

HTTP ステータス コード
400 Bad Request(不正なリクエスト)

次のいずれかのエラー条件:

  • PUT または POST データを解析できない。
  • PUT または POST データが見つからない。
  • リクエストは、データの PUT または POST を試行します。 サイズが大きすぎます。
  • REST API 呼び出しのパスの一部に、無効な子名が含まれています。
  • REST API 呼び出しのパスが長すぎる。
  • リクエストに、認識できないサーバー値が含まれている。
  • クエリのインデックスが Firebase Realtime Database Security Rules
  • リクエストでサポートされていないクエリ パラメータが指定されていない。
  • リクエストに、クエリ パラメータと shallow GET リクエストが混在している。
401 Unauthorized(未承認)

次のいずれかのエラー条件:

  • 認証トークンが期限切れ。
  • リクエストで使用された認証トークンが無効。
  • access_token での認証に失敗した。
  • リクエストは Firebase Realtime Database Security Rules
404 Not Found(未検出) 指定された Realtime Database が見つかりませんでした。
500 Internal Server Error(内部サーバーエラー) サーバーがエラーを返した。詳しくはエラー メッセージを参照 表示されます。
503 Service Unavailable(サービス利用不可) 指定した Firebase Realtime Database が一時的に利用できなくなっています。 これはリクエストが試行されなかったことを意味します
412 前提条件で失敗 リクエストで指定された if-match ヘッダーの ETag 値がサーバーの値と一致しませんでした。