2

JSON 形式でデータを返したり受け取ったりする RESTful API の設計について、「概念的な」質問があります。

次のリクエストとレスポンスを検討してください。

GET http://host/records/12345

{ "id":"12345", "address":{"street":"main street","number":5,"city":"springfield"}}

GET http://host/records/12345/address

{"street":"main street","number":5,"city":"springfield"}

GET http://host/records/12345/address/city

{"city":"springfield"}

OR

springfield (=not valid json)

2 番目の回答は有効な JSON 応答ではないことに気付いたので、後者が私の質問に対する正しい回答であると推測します。ただし、リクエスト中にリクエスタがすでに「キー」を知っているため、キー/値の形式で応答するのは冗長に見えます。

更新の同じカウント:

12345 レコードの市区町村を別の値で更新したい場合、送信するのがより正しいものは次のとおりです。

PUT http://host/records/12345/address/city

{"city":"paris"}  <- content of body when submitting

OR

paris <- content of body when submitting (=not valid json)

私が尋ねている理由は、それをすることですでに十分にあるからです

PUT http://host/records/12345/address

{"city":"paris"}   <- content of body when submitting

これに対する最も適切なアプローチと考えられるものは何ですか?

ありがとう、

ジェイ

4

2 に答える 2

2

REST API は通常、データベース内のオブジェクトまたはテーブルに大まかに変換されるリソースに対して機能します。GET の最初の例は、「アドレス」タイプのリソースを取得しようとしていることを示していません。「会社」などの追加のリソースを API に追加したい場合、これは明確ではありません。そして、すべてのアドレスのリストを取得する方法が必要です。したがって、すべてのアドレスを取得するには、API 呼び出しは次のようになります

GET http://host/records/address

[{"id":"12345", "street":"main street","number":5,"city":"springfield"},
{"id":"12346", "street":"foo street","number":1,"city":"alexandria"}]

特定のアドレスを取得するには、次のようになります

GET http://host/records/address/12345

{"id":"12345", "street":"main street","number":5,"city":"springfield"}

その id はアドレス オブジェクトの一部であり、例のように親オブジェクトに分割する必要はありません。次に、その ID を使用して、何を更新する必要があるかを Web サービスに知らせます。したがって、更新は次のようになります。

PUT http://host/records/address

{"id":"12345", "street":"main street","number":5,"city":"paris"}

通常、クライアントは、更新するフィールドだけでなく、オブジェクト全体を送信します。

于 2012-09-18T19:10:14.923 に答える
1

この「micro-PUT」スタイルの更新を本当に実行したい場合は、text/plainメディア タイプを使用して本文を送信することを検討してください。HTTP を使用する利点の 1 つは、メディア タイプを自由に組み合わせて、最も適切なものを使用できることです。

PUT http://host/records/12345/address/city
Content-Type: text/plain
Content-Length: 5

paris

=> 
200 OK

ただし、HTTP は大きな粒度のリソースを操作するために最適化されていることに注意してください。ユーザーがこの種の小さな更新を頻繁に行いたいと考えている場合は、アプローチを再検討する必要があるかもしれません。

于 2012-09-18T19:52:26.277 に答える