RESTfulインターフェースを設計する場合、要求タイプのセマンティクスは設計に不可欠であると見なされます。
- GET-コレクションの一覧表示または要素の取得
- PUT-コレクションまたは要素を置き換えます
- POST-コレクションまたは要素を作成する
- DELETE -まあ、ERM、コレクションや要素を削除
ただし、これは「検索」の概念をカバーしていないようです。
たとえば、求人検索サイトをサポートする一連のWebサービスの設計では、次の要件があります。
- 個々の求人広告を取得する
- GETへ
domain/Job/{id}/
- GETへ
- 求人広告を作成
- POSTへ
domain/Job/
- POSTへ
- 求人広告の更新
- PUT to
domain/Job/
- PUT to
- 求人広告の削除
- DELETEへ
domain/Job/
- DELETEへ
「Get All Jobs」も簡単です。
- GETへ
domain/Jobs/
しかし、仕事の「検索」はこの構造にどのように分類されますか?
あなたは可能性があり、それは「リストコレクション」のバリエーションの主張として実装します。
- GETへ
domain/Jobs/
ただし、検索は複雑になる可能性があり、長いGET文字列を生成する検索を作成することは完全に可能です。つまり、ここでSOの質問を参照すると、約2000文字よりも長いGET文字列の使用に問題があります。
例として、ファセット検索があります-「ジョブ」の例を続けます。
「テクノロジー」、「役職」、「規律」、およびフリーテキストキーワード、就業年齢、場所、給与などのファセットでの検索を許可できます。
流動的なユーザーインターフェイスと多数のテクノロジと役職により、検索に多数のファセットの選択肢を含めることが可能です。
この例をジョブではなくCVに微調整すると、さらに多くのファセットがもたらされ、100個のファセットが選択された検索、または50文字の長さ(たとえば役職、大学名、雇用者名)。
そのような状況では、検索データが正しく送信されるようにするために、PUTまたはPOSTを移動することが望ましい場合があります。例えば:
- POSTへ
domain/Jobs/
しかし意味的には、これはコレクションを作成するための命令です。
これを検索の作成として表現することもできます。
- POSTへ
domain/Jobs/Search/
または(以下のburninggrammaで示唆されているように)
- POSTへ
domain/JobSearch/
意味的には理にかなっているように思えるかもしれませんが、実際には何も作成しておらず、データを要求しています。
したがって、セマンティック上はGETですが、GETは必要なものをサポートすることを保証されていません。
ですから、質問は-可能な限りRESTfulなデザインを忠実に保ちながら、HTTPの制限内に収まるようにしながら、検索に最適なデザインは何ですか?
domain/Jobs?keyword={keyword}
です。これは私にはうまくSEARCH
いきます:)私の希望は、動詞が標準になることです。programmers.stackexchange.com/questions/233158/...