REST挿入に対する適切な応答-完全な新規レコード、またはレコードID値のみ?


15

データベースをアプリケーションに追加/更新するための挿入(i等ではなく、POST)および更新(PUT、べき等)の要求を許可するREST APIを構築しています。

POST(挿入)操作の応答でクライアントに返送するデータに関して、標準やベストプラクティスがあるかどうか疑問に思っています。少なくともレコードID値を返送する必要があります(たとえば、新しいレコードはレコード#1234です)。

オブジェクト全体で応答する必要がありますか?(たとえば、「GET / object_type / 1234」リクエストから返される本質的に同じ応答)

新しいID値のみで応答する必要がありますか?(たとえば、「{id:1234}」。つまり、レコード全体を取得する場合は、追加のHTTP GETリクエストを実行してレコード全体を取得する必要があります)

完全なオブジェクトのURLを指すリダイレクトヘッダー?

完全に何か他のもの?


私は、ベストプラクティスについてOOT確信しているが、それ以外は成功し-1などが他の人の言うことを見て興味があるなら、私のために個人的に私はおそらく、新しく作成されたIDを返す検討するけれども
dreza

回答:


13

さて、可能な限りHTTPに従ってRESTインターフェイスで、201とURIをLocationヘッダーフィールドに新しく作成されたリソースに返します。ここでは何であるステータスコードの定義が書かれています:

10.2.2 201作成

要求が満たされ、新しいリソースが作成されました。新しく作成されたリソースは、応答のエンティティで返されるURIで参照できます。リソースの最も具体的なURIは、Locationヘッダーフィールドで指定されます。レスポンスには、ユーザーまたはユーザーエージェントが最も適切なものを選択できるリソースの特性と場所のリストを含むエンティティを含める必要があります。エンティティ形式は、Content-Typeヘッダーフィールドで指定されたメディアタイプによって指定されます。オリジンサーバは、201ステータスコードを返す前にリソースを作成する必要があります。アクションをすぐに実行できない場合、サーバーは代わりに202(Accepted)応答で応答する必要があります(SHOULD)。

何か問題が発生した場合-1は、他の人が言ったように返すべきではなく、単にクライアントまたはサーバーのエラーコード(4xxまたは5xx)を返すべきだと主張します。たとえば、ユーザーが新しいリソースの作成を許可されていない場合、「401 Unauthorized」を返すだけで、それ以上でもそれ以下でもありません。


体はどうですか?空または新しく作成されたオブジェクト全体が応答しますか?
開発者

私が知っている2つの一般的なオプションは、1)新しいエンティティが見つかる場所にロケーションヘッダーを設定するか、2)本文に新しいエンティティを含めることです。私は個人的には実際的な理由で後者を使います。落ち着いた感じのために組み合わされることもあります;)
ブルーノシェーパー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.