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'
リクエストの正常終了は、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
を他のクエリと混在させることはできません。
あります。
サーバーからのレスポンスで返されるデータをフォーマットします。
引数 | 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'
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 からのリクエストを含むすべてのリクエストに適用されます。
defaultWriteSizeLimit
を large
に設定して新しいデータベースが作成されます。
Firebase CLI を使用して defaultWriteSizeLimit
を tiny
に設定することはできません。
firebase database:settings:set defaultWriteSizeLimit large
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(不正なリクエスト) |
次のいずれかのエラー条件:
|
401 Unauthorized(未承認) |
次のいずれかのエラー条件:
|
404 Not Found(未検出) | 指定された Realtime Database が見つかりませんでした。 |
500 Internal Server Error(内部サーバーエラー) | サーバーがエラーを返した。詳しくはエラー メッセージを参照 表示されます。 |
503 Service Unavailable(サービス利用不可) | 指定した Firebase Realtime Database が一時的に利用できなくなっています。 これはリクエストが試行されなかったことを意味します |
412 前提条件で失敗 | リクエストで指定された if-match ヘッダーの ETag 値がサーバーの値と一致しませんでした。 |