RESTfulサーバーに「コマンド」を送信するにはどうすればよいですか?
使用例:サーバーは特定の情報をキャッシュするため、その情報が要求されるたびにデータベースを読み取る必要はありません。クライアントアプリケーションからコマンドを送信して、サーバーにキャッシュをフラッシュするように指示する方法が必要です。 「.../flush_cache
」などのURLでPOST
またはPUT
を使用しますか?
転送される状態がコマンドの結果でない限り、「コマンド」は実際には「表現状態の転送」を必要とするデータではありません。「スイッチがオフ」、「キャッシュがフラッシュされる」などです。一般的なルールとして、 RESTコマンドをサーバーに送信しますか?
私は過去のプロジェクトでそのような状況に多く遭遇しました。 RESTはリソースに関しては...なので、本当にRPCの性質のものに対処する方法は必ずしも明確ではありません。
これを回避する簡単な方法は、それを残りの官僚的部分と考えることです。要求はリソース自体にすることができます。
1。 "私のサーバーでコマンドをトリガーしたいですか?最初にこのフォームI90292に入力して送信してください":
POST /bureaucracy/command-request
Content-Type: application/x-www-form-urlencoded
Content-Length: ...
「わかりました。できることを確認します。ケース番号は999です。」
201作成済み(または202クーゲルのコメントに従って承認済み)場所/ bureaucracy/command-request/999
そしてクライアントは定期的にチェックします
GET/bureaucracy/command-request/999
うまくいけば、彼は次のような応答を受け取ります
200 OK
<command-request>
<number>999</number>
...
<result>Success</result>
</command-request>
もちろん、官僚的なサービスが優れた顧客ケアを持っている場合、顧客が望めばそれが終わったときに顧客に電話するように勧めます:
「私たちのサーバーでコマンドをトリガーしますか?親切にこのフォームに記入して送信してください。連絡先情報に参加して、完了時に電話をかけることができます」
POST /bureaucracy/command-request?callback=client.com/bureaucracy/inbox
またはカスタムhttpヘッダーとしてX-Callback: http://client.com/bureaucracy/inbox
私はこれをお勧めします:
http://server.example/results/00001
)、おそらく204(コンテンツなし)ステータスとLocationヘッダーまたはリダイレクト(どのクライアントが理解できるかによる)。結果リソースのライフサイクルを決めるのはあなた次第です。結果を長期間保存する必要がない場合は、短命になる可能性があります。たとえば、URIはUUIDから構築できます。
あなたの場合、cache
をリソースにしてみませんか?
DELETE /cache
フラッシュしたいとき。
POST /cache
新しいものを作成したいとき。
または、前の2つを次のように組み合わせます。
DELETE /cache?autorecreate=true