REST: использование PUT для обновления с загрузкой файла - PullRequest
0 голосов
/ 06 июля 2011

Я кодирую API и застрял на части ОБНОВЛЕНИЯ.Из того, что я читал о REST, операция обновления должна быть раскрыта с помощью HTTP PUT.

Хорошо, PUT выдает мне только поток данных.По крайней мере, в PHP расшифровка этих данных - моя ответственность.Итак, как мне смешать строковые данные и загрузить файл и использовать PUT?Я знаю, что могу сделать это в POST, но я пытаюсь сделать это RESTful способом.

Должен ли я использовать multipart / form-data и является ли он переносимым для PUT (я имею в виду, легко ли отправлять такого родазапроса на разных языках)?Я пытаюсь выяснить способ proper сделать это.Опять же, если я использую multipart / form-data, я отвечаю за синтаксический анализ, поэтому возможны некоторые ошибки или снижение производительности.Можете ли вы предложить парсер, если этот multipart / ... это способ сделать то, что я спрашиваю?

Спасибо

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Общее правило PUT - идемпотент

Вызов 2x PUT /user/{userId}/files/foo.txt заканчивается в том же состоянии, при втором вызове вы просто переопределяете foo.txt. Вы «настраиваете» вещи.

Вызов 2x POST /user/{userId}/files будет в двух разных файлах. Вы «добавляете» вещи.

Поэтому я бы использовал PUT, если вы хотите писать в выделенную цель. Какие файлы вы хотите загрузить. Например. если это загрузка изображений, я бы использовал POST (где вы получите целевой URL внутри ответа). Если вы разрабатываете своего рода хранилище файлов для пользователя, я бы использовал PUT, потому что, скорее всего, пользователи захотят записать (установить) в определенное место (как вы это делаете в обычной файловой системе).

Может быть, у вас есть больше деталей / требований для конкретного случая?

2 голосов
/ 06 июля 2011

Какие данные вы пытаетесь PUT?Помните, что PUT - это метод направленной публикации.Клиент отправляет данные на сервер и, по сути, говорит «PUT этот файл в /home/sites/.../myfile.txt".

Полезно для публикации данных на сайте исоздание новой страницы.Не очень полезно, если это стандартная форма загрузки файла («Загрузить изображение аватара здесь!»).Вы не хотите, чтобы потенциально злонамеренные пользователи могли указывать, куда должен идти загруженный файл.

Именно тогда вы используете POST, что означает «вот файл, он называется myfile.txt, делайте то, что вы хотите сэто».

...