0

そこで、Laravel 4 PHP フレームワークを使用して RESTful (できるだけ RESTful) API を構築しています。現在、数十の API 呼び出しが機能しており、制限、順序付け、単純なフィルタリングを行うためのプロセスがあります。呼び出しの 1 つの例を次に示します。

/api/v1/users?limit=10&offset=10&firstName=John&order[]=createdTimestamp desc

これにより、11 番目から 20 番目の名前が John という名前のユーザーが、createdTimestamp で降順に並べ替えられて返されます。ここでの単純なフィルタリングでは、完全一致 (=) のみを実行できます。また、REST API を介してより複雑なフィルタリング システムを提供できるようにしたいと考えています。このシステムは、!=、>、または LIKE などを実行できる方法で等価一致タイプを特定する機能をサポートします... 問題は、私が通常のクエリ文字列を介してこのタイプのフィルタリングを提供できるかどうかはわかりません。

REST API を介してこの複雑なフィルタリングを提供する最善の方法は何ですか? 「真に」RESTful ではないにもかかわらず、POST を介して実行することが最善の方法と考えられていますか (これにより、ユーザーが一部のブラウザーの URI 文字の長さの制限を超える長いクエリを実行しようとする問題を防ぐことができます)?

4

2 に答える 2

1

@ryanzec

また、REST APIを介して、より複雑なフィルタリングシステムを提供できるようにしたいと考えています。これは、!=、>、またはLIKEなどを実行できるように等式一致タイプを指定する機能をサポートします。問題は私が通常のクエリ文字列を介してこのタイプのフィルタリングを提供できるかどうかはわかりません。

単純なクエリ文字列では不可能です(おそらく可能ですが、クエリ文字列でそのようなロジックを適切にエンコードすることは非常に困難です)。カスタムクエリ形式を定義し、POSTを使用してそのようなクエリを送信する必要があります。サーバーは次のように応答する場合があります。

  • 「201Created」ステータスと「Location」ヘッダーフィールドは、以前にそのようなクエリがなかった場合にクエリリソースを示します。また
  • 「303SeeOther」および「Location」ヘッダーフィールドは、既存のクエリリソースを示します。

「真に」RESTfulではない場合でも、POSTを介して実行することが依然として最善の方法と考えられています

誰が言ったのかわかりませんが、間違っています。このような目的でPOSTを使用しても問題はありません。

于 2013-02-21T00:25:34.163 に答える
0

コレクションリソースの応答でフォームを使用して、コレクションの検索方法をクライアントに指示します。例については、RESTおよび複雑な検索クエリに対する私の回答を参照してください。

于 2013-02-21T00:44:55.447 に答える