2016-10-15 9 views
0

Odata V4 Specは、アクションは、観察可能な副作用を持つ可能性があり、HTTP POSTを使用して呼び出されるべきだと述べています。しかし、私たちはいくつかのステータスを変更するだけのアクションを使用する必要があるシナリオを持っています。 ... /ドキュメント({ID})/ロック() - あなたがロックされ
エンドポイントとIDで識別されるドキュメントの状態をマークすることがあります
1.
:たとえばOdata(V4)アクションはPOSTでのみ呼び出されるべきですか?


私はここで部分的な更新を行っているので、私の意見ではパッチがより適しています。これはHTTPである({ID})
..... /書類(無紛争を削除しない)

-

2.
あなたは、ドキュメント
A)だけ
エンドポイントが非表示を削除する二つの方法を提供することをお勧めしますb)永久削除
エンドポイント - ...../Documents({id})/ permanentDelete()
これはODATAアクションです。
私の意見では、ここではHTTP POSTの代わりにHTTP Deleteが適しています。

オダータの視点からこれを行うにはどうすればよいでしょうか?ここの助けがあれば大歓迎です。

以下はSPECの情報です。

SPEC 11.5.4アクション

アクションが呼び出されたときの副作用を持っているかもしれませんのODataサービスによって公開される操作です。アクションはデータを返すかもしれませんが、追加のパスセグメントでさらに構成してはならない(MUST NOT)。リソースにバインドされたアクションを起動するアクション

を起動 は11.5.4.1、クライアントはアクションURLにPOST要求を発行します。アクションURLは、以前に返されたエンティティ表現から取得されるか、または名前空間またはエイリアス修飾されたアクション名を、その型がバインディングパラメータの型と同じか、またはそれから派生するリソースを識別するURLに追加することによって構築されます。アクション。バインディング・パラメータの値は、アクション名を追加する前のURLによって識別されるリソースの値であり、バインドされていないパラメータ値は、特定のフォーマットに従ってリクエスト本体に渡されます。 ODataの観点から、事前
--ksp

答えて

0

おかげで、あなたは常にPOSTでアクションを呼び出す必要があり、他の動詞と、それは動作しません。

両方の例は、私が個人的に行動に適しているとは思わないものです。すでにODataでこれらのことを行う方法があり、あなたが言及している動詞を使用しているからです。 PATCHおよびオブジェクトの削除は、DELETEでサポートされています。削除操作には2つの異なるタイプがありますが、これは難しくなりますが、カスタムヘッダーを使用してそれらを区別することができます。

アクションは、通常のCRUD操作に適合しないものになる傾向があります。そのため、どのHTTP動詞を使用するかは必ずしも明確ではありません。

あなたの例では、はDELETEとPATCHを使いたいと感じています。が正しいと感じています。ただし、ODataのアクションはすべてメタデータによって検出可能であるため、実際にアクションが何をしているのかを知らないクライアントが消費する可能性があることに注意してください。この場合、何かを定義する。アクションがサーバーに何らかの形で影響することはわかっているので、POSTはすべてのアクションで一貫性のある最も悪いオプションであるようです。

関連する問題