現在、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¶meter2=value2¶meter3=value3¶meter4=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 では永続性さえ必要ありません。これは実装の詳細です。