質問

Agaviフレームワークは、情報を更新するための作成と投稿のPutリクエストを使用します。通常、休息では、これは逆に使用されます(多くの場合、データレコード全体を置き換えながら情報の追加を参照します)。

私がそれを正しく理解している場合、重要な問題は、Putが等である必要があり、Postにはこの要件がないことです。したがって、特にORMが主キーとしてIDを使用し、新しいレコードのIDがわからない場合、特に新しいレコードを作成することがどのようにiDempotent(つまり、複数のリクエストがレコードの複数の作成につながることはありません)になる方法を傷つけます。クライアントにとって(データベースで自動補強されているため)、リクエストの一部になることはできません。 Agaviは、Put Requestのために、これに照らしてIdempotenceの要件をどのように維持していますか。

ありがとう。

役に立ちましたか?

解決

PUTは、作成と完全なレコードの更新の両方に使用できます。投稿は通常、部分的な更新と関連操作、およびリソースのURLを指定せずにサーバー上に新しいタイプのレコードを作成するために使用されます(例:Post to /article /23 /コメントは201ステータスと場所を返します: /記事/23/コメント/283136ヘッダー)。したがって、あなたの場合(シーケンス/自動インクリメントIDを使用)、そのアプローチを使用します。

ただし、HTML(したがってWebフォーム)は異なります。削除して配置するのではなく、get and postのみを知っています。削除および更新操作のために、POSTメソッドを過負荷にします。

そのため、アガビはデフォルトで「書き込み」に投稿して「読み取り」に移動するために投稿します。これは最も一般的なユースケースであり、「読み取り」と「書き込み」が比較的中立であり、ある意味で安全を表すために選択されました。 Get vs Postの側面(「GETは副作用なしに呼び出すことができます」とBLAHのような安全性)。

Factories.xmlでのAgaviwebrequest実装の動詞のマッピングを変更できます。あなたがそれについて助けが必要な場合は、AgaviユーザーのメーリングリストまたはIRCチャネルを参照してください(またはここで尋ねてください)。 IRCチャンネルの多くの人々は、APIをきれいにするためにより多くのサポートが必要な場合に備えて、URLスキームの設計を非常に経験しています。

他のヒント

考える代わりに PUT 作成して、それを「パッティング」と考えてください。リソースをURIに配置します(つまり、リソース全体をURIに送信します)。

PUT http://example.com/articles/1

これを繰り返す(同じリソース全体を同じURIに送信する)場合、同じ結果が得られ、そのURIでリソースを変更していません。

Agaviの実装の場合 PUT idempotentであり、実装しています PUT 正しく。そうでなければそうではありません。

リソースを作成するためにPUTを使用することができますが、リソースが既に存在する場合(または以前のPUTによって既に作成されている場合)、それを更新するだけです。ただし、これが単純なCRUDである場合、投稿はリソースを更新しないでください。 HTTP動詞には、特定のアクションへの定義されたマッピングが必ずしもないことに注意してください。これは、単なるCRUD以上のものに役立つためです。

また、この質問は休息とは何の関係もないことに注意してください - ちょうど適切なHTTP使用法。残りのタグを削除してください。

私は以前にこの問題を抱えていました。これはによって解決できます Factories.xmlの変更

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top