3

APIを作成していて、RESTアプローチに従いたいと思っています。私が理解しているように、APIユーザーに特定のレコードを更新させたい場合は、タイプリクエストをサポートする必要があります。もちろん、彼らはを行っておらず、新しいデータを渡す必要があります。私の質問は、これをどのように行うかです(私の特定のケースでは、指定されたレコードの一部のフィールドのみを更新しますが、ここではそれほど関係ありません)。私が考えることができる2つのアプローチがあります:リクエスト本文(curl:を使用)またはクエリ文字列(curl:を使用)にデータを含めることです。PUT http://server/specific_resourceGETcurl -X PUT -d "key=value" http://server/specific_resourcecurl -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で使用されている場合、リクエストメソッドに関係なく'配列に配置されます。当然のことながら、これに遭遇したのは私だけではありませparamsparamsurl

あなたが提案する解決策は何ですか?入力ストリームを処理しますか?クエリ文字列パラメータを使用しますか?PUT動詞を忘れてPOST代わりに使用しますか?

4

2 に答える 2

2

PHPでのRESTインターフェースのPUTデータの解析に関するこのブログエントリを試してください。

于 2010-10-05T00:46:46.207 に答える
0

サーバーのhttpメソッド変数を使用して、そのPUTかどうかを確認します。

SLIMソースコードを見て、それらがどのように処理するかを確認することをお勧めします

応援!

于 2014-02-26T10:44:34.310 に答える