Я установил REST-сервис и клиент на PHP, и у меня возникли небольшие проблемы с PUT.
Вот моя ситуация: я кодирую ресурс REST, который должен принимать массив данных и изображение.Ресурс REST должен обновить существующую запись, поэтому я использую PUT.Я отправляю данные с помощью написанного PHP-клиента.Так что - почти такая же ситуация, как если бы вы отправляли многокомпонентную форму HTML в скрипт PHP, который выполняет загрузку файла и принимает некоторые дополнительные поля POST - за исключением PUT и PHP curl.
Up 'до сих порЯ отправляю запрос 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 и отправил эти данные какфайл с curl в запросе PUT.Это работает, но мне пришлось бы анализировать необработанные данные на сервере вручную, что, я не уверен, является лучшей идеей.В качестве альтернативы, я думаю, я мог бы отправить файл в качестве тела запроса PUT и добавить другие параметры в URL в виде строки запроса - но я полагаю, что этот тип не соответствует точке ресурса PUT REST ..
Пожалуйста, поделитесь своими мыслями по этому поводу.Спасибо!