PHP で REST サービスとクライアントをセットアップしましたが、PUT に少し問題があります。
私の状況は次のとおりです。データの配列と画像を受け入れる REST リソースをコーディングしています。REST リソースは既存のレコードを更新する必要があるため、PUT を使用しています。私が書いたPHP curlクライアントでデータを送信しています。つまり、ファイルのアップロードを行い、追加の POST フィールドを受け入れる PHP スクリプトに HTML マルチパート フォームを送信する場合とほぼ同じ状況です。ただし、PUT と PHP curl を除きます。
今まで、私は次のような PUT リクエストを送信してきました (疑似コード):
$a_some_data = array('name' => 'test', 'user_id' => 4);
$body = http_build_query($a_data);
$fh = fopen('php://memory', 'rw');
fwrite($body);
rewind($fh);
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => 'http://myapi/resource/someid',
CURLOPT_PUT => TRUE,
CURLOPT_INFILE => $fh,
CURLOPT_INFILESIZE => strlen($body)
));
curl_exec($ch);
サーバー上のデータを次のように読み取ります。
parse_str(file_get_contents('php://input'), $put_data);
..これは問題なく動作します。
そこで、(バイナリ) ファイルをミックスに追加したいと思います。- クライアント側でこれをどのように実装しますか? - サーバー上のファイルをどのように処理しますか?
テストのために、ファイル入力を使用して HTML フォームをセットアップし、それが送信する生の multipart/form-data リクエストをコピーし、PUT リクエストで curl を使用してそのデータをファイルとして送信しようとしました。そのようなものは機能しますが、サーバー上の生データを手動で解析する必要があります。これが最善のアイデアかどうかはわかりません。または、ファイルを PUT リクエストの本文として送信し、URL に他のパラメーターをクエリ文字列として追加することもできると思いますが、それは PUT REST リソースの要点に反していると思います..
これについてあなたの考えを共有してください。ありがとう!