質問
ここでは、ビジネスパートナーにXMLフィードを提供するボックスがあります。フィードのリクエストは、クエリ文字列のパラメーターと値を指定することによりカスタマイズされます。これらのパラメーターの一部は必須ですが、多くは必須ではありません。
たとえば、パートナーを識別するためにすべてのリクエストにGUIDを指定する必要がありますが、リクエストは「最新の情報を取得」することができます。または" search"アクション:
検索の場合: http://services.null .ext /?id = [GUID]& q = [検索キーワード]
カテゴリの最新データ: http://services.null。 ext /?id = [GUID]& category = [ID]
これらのパラメーターのRESTful URLスキームの構成は簡単です:
検索: http://services.null.ext/ [GUID] / search / [キーワード]
最新: http://services.null.ext/ [ GUID] / latest / category / [ID]
しかし、私たちが持っているダースほどのオプションのパラメーターをどう扱うべきでしょうか?これらの多くは相互に排他的であり、多くは組み合わせて必要です。非常に迅速に、可能なパスの数は圧倒的に複雑になります。
複雑なクエリ文字列を含むURLをより使いやすい/ REST / ful / pathsにマップする方法の推奨プラクティスは何ですか?
(規約、スキーム、パターンなどに興味があります。WebサーバーまたはフレームワークにURL書き換えを実装する特定の技術ではありません。)
解決
クエリ文字列にオプションのクエリパラメータを残す必要があります。 「ルール」はありません。 RESTでは、クエリ文字列は存在できないと言っています。実際、それはまったく逆です。クエリ文字列を使用して、クライアントに転送する表現のビューを変更する必要があります。
「表現可能な状態のエンティティ」にこだわるURLパスコンポーネント用。カテゴリは問題ないように見えますが、XMLをフィードしているのは正確には何ですか?投稿?カタログアイテム?部品?
はるかに優れたREST分類は次のようになります(XMLフィードのコンテンツが"記事"であると仮定):
- http://myhost.com/PARTNERGUID/articles/latest?criteria1 = value1& criteria2 = value2
- http://myhost.com/PARTNERGUID/articles/search?criteria1 = value1& criteria2 = value2
REST構造の構築中に、表現しているエンティティについて考えていない場合は、RESTを実行していません。あなたは別のことをしています。
RESTのベストプラクティスに関するこの記事。古いですが、役立つかもしれません。
他のヒント
値を持つパラメーター? 1つのオプションはクエリ文字列です。それを使用することは本質的に不安定ではありません。別のオプションは、セミコロン Tim Berners-Leeがそれらについて話しますを使用することですそれらは法案にちょうど合うかもしれず、URLを意味のあるものにすることができます。