3

firebase docs https://www.firebase.com/docs/rest-api.htmlによると、次のように記載されています。

PATCH - Updating Data
You can update specific children at a location without overwriting existing data 
with a PATCH request. Named children in the data being written with PATCH will be 
written, but omitted children will not be deleted. This is equivalent to the 
update( ) function.

curl -X PATCH -d '{"last":"Jones"}' \
 https://SampleChat.firebaseIO-demo.com/users/jack/name/.json
A successful request will be indicated by a 200 OK HTTP status code. 
The response will contain the data written:

{"last":"Jones"}

これについての私の理解では、リソースの一部のみを更新したい場合は、PATCH リクエストを使用できます。

私の簡略化されたfirebaseデータベースは次のとおりです。

  "exchange-rates" : {
    "eur" : {
      "fx" : 1.2,
      "currency_symbol" : "€",
      "updated_at" : "2014-06-13T22:49:23+0100",
    },
    "usd" : {
      "fx" : 1.6,
      "currency_symbol" : "$",
      "updated_at" : "2014-06-13T22:49:23+0100",
    },
    "gbp" : {
      "fx" : 1,
      "currency_symbol" : "£",
      "updated_at" : "2014-06-16T15:43:15+0100",
    }
  }

ただし、パッチ リクエストのペイロードから and を省略するcurrency_symbolupdated_at、Firebase はこれらの属性をデータベースから削除します。

    $auth = 'SUPER_SECRET_CODE';
    $guzzleClient = new GuzzleHttp\Client();
    $url = https://DATABASE.firebaseio.com/.json;


    $data['exchange-rates']['gbp']['fx'] = (float) 1;
    $data['exchange-rates']['usd']['fx'] = (float) 1.66;
    $data['exchange-rates']['eur']['fx'] = (float) 1.22;

    $payload =
        [
            'query' => [ 'auth' => $auth ],
            'json' => $data
        ];

    $response = $guzzleClient->patch($url, $payload);

そのため、PATCH リクエストが正常に機能していないか、Firebase がこの PATCH リクエストで何をすべきかを誤解しているか、何か不足しています。何かご意見は?

また、為替レート オブジェクトにオブジェクトを追加したい場合は、そうできるはずです。

$data['exchange-rates']['chf']['fx'] = 2.13;

    $payload =
        [
            'query' => [ 'auth' => $auth ],
            'json' => $data
        ];

    $response = $guzzleClient->patch($url, $payload);

ただし、これは既存のすべての為替レートを上書きするだけであり、現在、データベースには1つの為替レートしかありません。

4

1 に答える 1