2

システム内のいくつかのタイプのオブジェクト (クライアント、製品など) を検索できるようにする検索 API を実装しています。どの形式の URI が望ましいか:

/clients/search
/products/search
...

また

/search/clients
/search/products
...

/clients、/products リソースは、他の目的のために既に存在します。

編集:

私はそれが問題になるとは思いませんでしたが、問題があるようです - 検索はおそらくGETの代わりにPOSTを必要とするほど複雑になるでしょう

ありがとう、

アレックス

4

3 に答える 3

2

それがRESTfulAPIである場合、製品はリソースであり、HTTPメソッドGETが動詞を提供するため、URIで「検索」という単語を使用する必要はありません。だからあなたは次のようなことをすることができます。

  • GET /product/998827727/(IDで製品を取得)
  • GET /product/?searchTerm=thingybob(検索語で製品を検索)

とは言うものの、検索用語が複雑すぎてユーティリティリソースが必要な場合は、次のようなことを行うかPOST /product-search/POST /product/search/製品が主要なリソースであるためです。

于 2013-03-17T13:34:34.863 に答える
2

この提案は非常に合理的に見えます:https ://blog.apigee.com/detail/restful_api_design_tips_for_searchしたがって、これによると:

/clients/search
/products/search
...

ツイーターは一貫性のない構造を使用しています:

Splunkは、search最初であるという概念を好みます:http: //docs.splunk.com/Documentation/Splunk/5.0.2/RESTAPI/RESTsearches

したがって、これらの例は、これを行うための単一の最良の方法がないことを示しています。クエリを事前に既知のリソースに制限する場合は、最初の例を使用する方がよいと思います。それ以外の場合は、グローバル検索を使用します-/search他のすべてはパラメーターとしてエンコードされます(Freebase API:https ://developers.google.com/freebase/v1/searchを参照してください-クエリ用の独自の言語があります...)。

于 2013-03-17T13:11:44.900 に答える
1

どちらのアプローチも間違っています。

質問: 次の HTTP リクエストをサービスに送信するとどうなりますか:

GET /clients/search
Host: service.org

GET /products/search
Host: service.org

GET /search/clients
Host: service.org

GET /search/products
Host: service.org

/search および /products リソースが既に存在する場合、それらを再利用して、検索時に必要なクエリ パラメータのみを送信しないのはなぜですか? 例えば:

GET /clients?gender=female&country=US
Host: service.org

「/clients」サービスに対するクライアント リクエストがすべてのクライアントのリストで応答する場合、URI にクエリ パラメータが含まれている場合、サービスはフィルタリングされた結果で応答します。そのような検索専用のリソースを作成する価値はないと思います。

PS Twitter の URI はひどいものです。

于 2013-03-17T13:31:02.383 に答える