6

私はREST APIを開発していますが、次のことを考えています:

HTTP PUT を使用して、Web サービス内のいくつかのエンティティを更新したいと考えています。フォーマットは urlencoded ボディになります。エンティティ全体ではなく、実際に指定されたフィールドのみを更新することは許容されますか?

PUT はいくつかの更新を行うのに非常に便利な方法ですが、たまたまいくつかのスペルを間違えた場合にフィールドを削除してほしくないので、私は尋ねています。さらに、実装者が常に最初に GET を実行し、実際には使用しない可能性のあるすべてのフィールドをコピーする必要があることを強制したくありません..

4

4 に答える 4

4

更新されたプロパティをリソースにPOSTするだけです。POSTは、他の動詞が機能しない場合に必要なことをすべて実行するために使用できるキャッチオール動詞であることを忘れないでください。

Royの記事をチェックしてくださいPOSTを使用しても大丈夫です

于 2009-06-23T16:14:11.150 に答える
2

置くのは完全な交換のためだけです。あなたが抱えている問題に対処するための動詞PATCHの提案があります(http://www.ietf.org/internet-drafts/draft-dusseault-http-patch-14.txt

ただし、パッチはまだ希望どおりではない場合があります。送信されるのは、増分カウンターなどを実行できる更新リソースであるため、putとは異なり、べき等ではありません。

各フィールドをリソースとして公開し、各フィールドに複数のプットを行うことができます。プットをパイプライン処理して、余分なレイテンシーを軽減できます。

于 2009-06-23T15:26:30.233 に答える
1

私はそれが理にかなっているかもしれないと言うでしょう。私はRESTのアイデアを非常に柔軟だと考えているので、1つのエンティティを更新する場合、実装で更新する必要のあるフィールドを転送するだけではないのはなぜですか。ただし、サーバー側の作業がさらに必要になるのは事実です。エンティティが使用可能であり、転送されたデータで更新できるかどうかを確認する必要があります。また、検証チェックが必要です(スキーマフリーのドキュメント指向データとは対照的です)。

<!-- PUT books/1337 -->

<book>
    <title>Hello</title>
    <author>John Doe</author>
</book>

<!-- PUT books/1337 -->

<book>
    <title>Hello here I am</title>
</book>
于 2009-06-23T15:24:12.267 に答える
1

部分的な更新のソリューションも好きではありません。広く使用される Web サービスを設計する場合は、おそらく を使用しPOSTます。それがかなり少数の人々によって使用される場合、つまり、私がそれを呼ぶと予想されるすべての人々と話すことができる場合、私はそれに対処するための2つの異なるアイデアを持っていました.

  1. PUT新しい「更新」リソースに。基本的に、適用する更新を記録し、重複を適用しないようにします。これは、パッチ/変更セットのリストを保持するバージョン管理システムのように機能し、すべてのコーナー ケースを考えようとするたびにかなり複雑になると思います。

  2. PUTただし、存在しないフィールドは変更しないでください。アウトしたいフィールドには、NULLアウトしたいことを示す特別な属性が存在する必要がありますNULLPUTこれははるかに実用的ですが、完全な更新であるというコンセンサスにはあまり適合しません。

誰かが同様のアイデアの議論へのポインタを持っている場合は、それに応じて編集/コメントしてください.

于 2009-06-24T12:37:08.103 に答える