RESTful 検索/フィルタリングを設計するには? [closed] 質問する

RESTful 検索/フィルタリングを設計するには? [closed] 質問する

現在、PHP で RESTful API を設計および実装しています。ただし、当初の設計を実装することはできていません。

GET /users # list of users
GET /user/1 # get user with id 1
POST /user # create new user
PUT /user/1 # modify user with id 1
DELETE /user/1 # delete user with id 1

ここまではかなり標準的ですよね?

私の問題は最初のものですGET /users。リストをフィルタリングするために、リクエスト本文でパラメータを送信することを検討していました。これは、次のような非常に長い URL を取得せずに複雑なフィルタを指定できるようにしたいためです。

GET /users?parameter1=value1&parameter2=value2&parameter3=value3&parameter4=value4

代わりに、次のようなものを欲しかったのです:

GET /users
# Request body:
{
    "parameter1": "value1",
    "parameter2": "value2",
    "parameter3": "value3",
    "parameter4": "value4"
}

読みやすくなり、複雑なフィルターを設定する可能性が高まります。

とにかく、file_get_contents('php://input')リクエストのリクエストボディを返しませんでしたGET。 も試しましたhttp_get_request_body()が、使用している共有ホスティングには がありませんpecl_http。いずれにしても役立つかどうかはわかりません。

私は見つけたこの質問そして、GET にはリクエスト ボディはおそらく含まれないはずだと気づきました。少し結論が出ませんでしたが、それを使用しないようアドバイスされました。

それで、今何をすべきかわかりません。RESTful 検索/フィルタリング機能をどのように設計しますか?

を使用することもできると思いますPOSTが、あまり RESTful ではないようです。

ベストアンサー1

RESTful 検索を実装する最良の方法は、検索自体をリソースと見なすことです。そうすれば、検索を作成するので POST 動詞を使用できます。POST を使用するために、データベースに文字通り何かを作成する必要はありません。

例えば:

Accept: application/json
Content-Type: application/json
POST http://example.com/people/searches
{
  "terms": {
    "ssn": "123456789"
  },
  "order": { ... },
  ...
}

ユーザーの視点から検索を作成しています。これの実装の詳細は無関係です。一部の RESTful API では永続性さえ必要ありません。これは実装の詳細です。

おすすめ記事