例:
メソッド:GET
応答:collection
のすべてのアイテムがa search term
と一致します。
問題:検索語が長すぎて、Webサーバーの最大URL長を超えている可能性があります。
非常に長い検索用語を許可し、それでもRESTfulを維持するにはどうすればよいですか?
インスピレーションを得るために、 GoogleTranslateのAPIv2 を調べました。これは、 "RESTful呼び出しスタイルを使用しています。"
当然、翻訳されるテキストはかなり長くなる可能性があります。そのため、GoogleはオプションでPOST
を使用してリクエストを送信することを許可していますが、ひねりを加えています。
POST
を使用するには、X-HTTP-Method-Override
ヘッダーを使用して、リクエストをGET
として処理するようにTranslate APIに指示する必要があります(X-HTTP-Method-Override: GET
を使用)。
したがって、意味論的にPOST
リクエストをGET
リクエストに変換することが可能です。
(この発見により、質問に x-http-method-override タグを追加することになりました。)
RESTはPOSTの作成を制限しません。CRUDをHTTPメソッドにマッピングすることに注意し、それがRESTfulであると想定してください。POSTは、そうでないアクションに使用されるメソッドです。 tHTTPによって標準化されています。
標準ではURIの制限が確立されていないため、これは壊れた実装と見なすことができ、修正しても問題ありません。回避策がAPIに疎結合されている限り、RESTfulです。つまり、APIは変換を実装したり、直接オーバーライドしたりするのではなく、リクエストを適切に書き換える何らかのプリプロセッサ上で実装する必要があります。これは実装の失敗によるものであり、最終的には廃止されると予想されることをどこかに明確に文書化する必要があります。
クエリが長すぎて最大長を超える可能性がある場合は悪臭がします(ブラウザの事実上は2000文字ですが、REST API)にアクセスする他の手段ではそれより長くなる可能性があります)。
ユーザーがその量のデータを渡すことができる場合は、URLではなくリクエストの本文/データフィールドに入力する必要があります。