APIを作成していて、RESTアプローチに従いたいと思っています。私が理解しているように、APIユーザーに特定のレコードを更新させたい場合は、タイプリクエストをサポートする必要があります。もちろん、彼らはを行っておらず、新しいデータを渡す必要があります。私の質問は、これをどのように行うかです(私の特定のケースでは、指定されたレコードの一部のフィールドのみを更新しますが、ここではそれほど関係ありません)。私が考えることができる2つのアプローチがあります:リクエスト本文(curl:を使用)またはクエリ文字列(curl:を使用)にデータを含めることです。PUT http://server/specific_resource
GET
curl -X PUT -d "key=value" http://server/specific_resource
curl -X PUT http://server/specific_resource?key=value
残念ながら、私が取ったアプローチに関係なく、提供されたデータを取得するのは非常に難しいようです。問題は、PHPが2つのHTTPメソッドを完全に理解しているだけでGET
ありPOST
、ファイルのアップロード用とPUT
見なされていることです。本文にデータを含めると、データにアクセスする唯一の方法は、呼び出しを介するfopen('php://input')
ようです。たとえばhttp_get_request_body()
、データを提供しません。$_REQUEST
同様に、情報はスーパーグローバルで見つけることができません。生のリクエスト本文を処理する必要がない場合は、データがスーパーグローバルfopen('php://input')
の要素として表示されるため(データも)、クエリ文字列パラメーターとしてデータを送信する必要があるようです。$_GET
$_REQUEST
私は特にCakePHPを使用しており、リクエストがPOSTの場合にのみ、コントローラーメソッドに配列form
の配列を設定しているようです。クエリ文字列パラメータは、リクエストURLで使用されている場合、リクエストメソッドに関係なく'配列に配置されます。当然のことながら、これに遭遇したのは私だけではありません。params
params
url
あなたが提案する解決策は何ですか?入力ストリームを処理しますか?クエリ文字列パラメータを使用しますか?PUT
動詞を忘れてPOST
代わりに使用しますか?