2012-04-15 1 views
5

私は1つのことしかしない小さなアプリケーションを書いています:ユーザが提供するデータをいくつかとり、そのデータを分析し、そのデータの「タグ」を返します。私はクライアントがGETまたはPOSTのいずれかの応答を返すために/getTagへの彼らの要求をするべきだと考えています。本当にRESTfulな方法で、実際に何かを作成したり取得したりしていないリクエストを処理できますか?

クライアントがこれを実行してもサーバに何も格納されていないので、POSTを使用するのが不思議です。しかし、分析のための一様なURIも存在しないので、GETを使用すると、提供されるデータに応じて異なるものが返されるため、奇妙な感じがします。

RESTでこの機能を表現する最良の方法は何ですか?

答えて

1

POSTはアクションの実行を表すことができます。アクションはにはデータベースアクションではないがありません。

実際に作成したことは、リモートプロシージャです。 RPCは通常すべてPOSTです。私はこれがRESTには適していないと思いますが、単純なURLとJSONの使用を止める必要はありません。

2

「最良の方法」は、アプリケーションとそのニーズに最も適したものを実行することです。それを知らない、ここでいくつかのアイデアがあります:あなただけのサーバーが提供するものを検索し、作成したり、サーバー上で何かを格納していないので、

  1. GETが最も適切な動詞です。

  2. 提案したとおり、getという単語をURIに入れないでください。そのような動詞はすでにHTTPによって提供されているので、代わりに/tagGETを使用してください。

  3. このリソースにはわかりやすい(またはクールな)URIを使用し、そのデータをクエリパラメータとして渡す必要があります。私はそれが奇妙に感じることについて心配しないでしょう(なぜthis question's回答を参照してください)。

はちょうど GET /tag?foo=bar&beef=deadに、要約すると、すれば完了です。

1

元のデータを生成したユーザーが、生成されたタグを永続させたいと思うようなのはおそらく私のようです。

可能性がある場合は、POST /tagsと書いて、/tags/:idリソースURIをLocation:ヘッダーに戻します。

生成されたタグを永続化することについて本当に気にしなかったなら、私は「ユーザー生成データ」が何であったか、そして裏で何が処理されているかを考えます。 「タグ」がシステムに渡されているデータと十分に異なる場合は、GET /tagがAPIコンシューマーにとって本当に混乱している可能性があります。

0

私は2番目のブライアン答えでしょう:GETを使用してください。同じ入力パラメータが同じ出力を返し、実際に何も作成していない場合、それは冪等の動作であり、したがってGETに完全に適しています。

0

あなたはGETPOSTのいずれかを使用することができます。

  • GET /tag?data="..." -> 200, tag

    GETメソッドが要求URIで識別される( 実体の形で)どんな情報取得を意味します。 Request-URIがデータ作成プロセスの を参照する場合、 が返され、返されたテキストは プロセスのソーステキストではなく返されます。プロセス。

  • POST /tag {data: "..."} -> 200, tag

    POSTメソッドによって実行されるアクションは、URIによって識別することができるリソース をもたらさない可能性があります。この場合、 に結果を記述するエンティティが含まれているかどうかに応じて、200(OK)または204 (No Content)のいずれかが適切な応答ステータスになります。

/method definitionsセクションHTTP標準に従って。

私はあなたの場合はGETを使用します(ファイルを送信する場合のみPOST)。

関連する問題