2011-12-15 3 views
1

ウェブサイトがアプリケーションフォームを送信するために使用するRESTfullシステムを設計しています。その後、内部ツールによってアプリケーションを承認または却下します。私は頭を悩ませてこれをどうやって構築するか、そして2つの選択肢があるかどうかについて議論してきました。 PUTまたはPOST。アプリケーションリソースを承認するときのPUTまたはPOSTへのRESTfullインターフェイスデザイン

PUTオプション

アプリケーションは、すべての状態コードによってフィルタリングすることができ、アプリケーションリソースの下にリストされているクエリパラメータ(異なるリソースを介して公開状態)を使用して(新しい、承認され、減少しました)。新規URLを作成し、IDとIDを割り当てるURLに新しいアプリケーションを投稿することができます。 IDを使用してGETを使用してアプリケーションにアクセスできます。承認するには、状態コードの1つをアプリケーションURLにプットしてレコードを更新します。

 GET Service.svc/statecodes 
GET POST Service.svc/Applications?statecode={statecode} /{POST DATA} 
GET PUT Service.svc/Applications/{applicationId} statecode={statecode} 

POST OPTION

用途すべてとアプリケーションリソースの下に表示され、新しいApplicatonsはそれらおよび譲受人とIDを作成し、このURLに掲載することができます。保留中、承認済み、拒否済みのアプリケーションのフィルタ表示を示すさまざまなURLがあります。アプリケーションを承認するには、承認されたURLにIDが投稿され、拒否されたURLにはURLが拒否されます。これらの最後の2つの投稿が効果を持つか、保留中のリストから承認済みのリストにアプリケーションを移動します。

PUTメソッドは私にとって最もRESTfulですが、動作を外部に公開し、カプセル化を中断します。 POSTメソッドはよりクリーンで発見可能なようですが、私はPOSTの別のリソース上のリソースへの副作用が気に入らない。

私は実際には、RESTが本当に何であるかという質問ではなく、コマンド/メッセージであるため、承認と拒否にSOAPを使用する必要があると感じていますが、誰かがSOAPの議論を形成するのを助けることができます。

これは正しいまたは最良のアプローチですか?

答えて

1

は/アプリケーションstateを設定しなさい:

GET PUT /application/{id}/state 

それがパブリックインターフェイスでない場合(それが可能取得/状態を設定するための許可を取得する場合は401)要求であるならば、あなただけの403を返すことができます内部ツールからではありません。

新しいアプリケーションを提出し、それを表示:

POST /application/ 
GET /application/{id} 

あなたはまた、特定の状態ですべてのアプリケーションを公開することができます:あなたはたとえばたい場合

GET /application?state={pending|approved|declined} 

同じリソースが複数のURLを有していてもよく、状態にあるアプリケーションの集合pending

/state/pending/application 

/application?state=pending 

私はSOAPの引数の形成を助けます。

フリーディスカッションがどのように進行するかの例については、Should a Netflix or Twitter-style web service use REST or SOAP?を参照してください。

+0

PUTアプローチが正しいアプローチであると言いますか? SOAPの質問にコメントはありませんか? –

+0

@daffers:リソースを使用しない理由がないと言っています*リソースのURL(状態)がわかっており、操作の意味(リソースの作成/置換)が標準です。しかし、他のアプローチを好む理由がある可能性があります。たとえば、操作が冪等でない場合はPOSTを使用します。同じことがSOAPにも当てはまります。私は誓いの言葉を使わずにSOAPについて話すことはできませんが、より良い選択である状況があるかもしれません[各HTTP要求にすべての認証情報をエンコードできない場合](http://stackoverflow.com/a/3285790/4279)。 – jfs

+0

ありがとう、upvote 1しかし答えとしてそれを取るつもりはない。おそらく黒か白の答えがない質問でしょう。 –

関連する問題