Как реализовать формы «редактирования» ресурсов с помощью RESTful?

StackOverflow https://stackoverflow.com/questions/46004

  •  09-06-2019
  •  | 
  •  

Вопрос

Мы пытаемся реализовать REST API для имеющегося у нас сейчас приложения.Мы хотим предоставить возможности чтения/записи для различных ресурсов с помощью REST API.Как нам реализовать часть «формы» этого?Я узнаю, как предоставить «чтение» наших данных, создав URL-адреса RESTful, которые по сути функционируют как вызовы методов и возвращают данные:

GET /restapi/myobject?param=object-id-maybe

... и возвращается XML-документ, представляющий некоторую структуру данных.Отлично.

Но обычно в веб-приложении «редактирование» включает два запроса:один для загрузки текущей версии ресурсов и заполнения формы этими данными, а другой для отправки измененных данных обратно.

Но я не понимаю, как бы вы сделали то же самое с методами HTTP, с которыми как бы сопоставлен REST.Это ПУТ, верно?Может кто-нибудь объяснить это?

(Дополнительное рассмотрение:Пользовательский интерфейс в основном будет выполнен с использованием AJAX)

-- Обновлять:Это определенно помогает.Но меня все еще немного смущает серверная часть?Очевидно, что здесь я имею дело не просто с файлами.На сервере код, отвечающий на запросы, должен фильтровать метод запроса, чтобы определить, что с ним делать?Это «переключатель» между чтением и записью?

Это было полезно?

Решение

Если вы отправляете данные через простой HTML, вы ограничены использованием формы на основе POST.URI, на который отправляется запрос POST. не должна быть URI изменяемого ресурса.Вам следует либо отправить POST к ресурсу коллекции, который каждый раз ДОБАВЛЯЕТ вновь созданный ресурс (с URI для нового ресурса в Расположение заголовок и 202 код состояния) или POST к ресурсу средства обновления, который обновляет ресурс с помощью предоставленного URI в содержимом запроса (или настраиваемом заголовке).

Если вы используете объект XmlHttpRequest, вы можете установить метод PUT и отправить данные в URI ресурса.Это также может работать с пустыми формами, если сервер предоставляет действительный URI для еще несуществующего ресурса.Первый PUT создаст ресурс (возвращая 202).Последующие запросы PUT либо ничего не сделают, если это те же данные, либо изменят существующий ресурс (в любом случае 200 возвращается, если не возникает ошибка).

Другие советы

Есть много разных альтернатив, которые вы можете использовать.Хорошее решение представлено на микроформаты вики и на него также ссылалась команда RESTful JSON.Действительно, максимально близко к стандарту.

 Operate on a Record

GET /people/1
    return the first record 
DELETE /people/1
    destroy the first record 
POST /people/1?_method=DELETE
    alias for DELETE, to compensate for browser limitations 

GET /people/1/edit
    return a form to edit the first record 
PUT /people/1
    submit fields for updating the first record 
POST /people/1?_method=PUT
    alias for PUT, to compensate for browser limitations 

Я думаю, вам нужно отделить службы данных от веб-интерфейса.При предоставлении услуг передачи данных полностью подходит система RESTful, включая использование команд, которые браузеры не поддерживают (например, PUT и DELETE).

Я думаю, что большинство людей, описывая пользовательский интерфейс, путают «RESTful» с «красивыми, предсказуемыми URL-адресами».Когда вы описываете веб-интерфейс, меня бы не особо беспокоил синтаксис URL-адресов, основанный исключительно на RESTful.

Загрузка должна быть обычным запросом GET, а сохранение новых данных должно быть POST для URL-адреса, который в данный момент содержит данные...

Например, загрузить текущие данные из http://www.example.com/record/matt-s-example а затем измените данные и верните POST на тот же URL-адрес с новыми данными.

Запрос PUT можно использовать при создании новой записи (т. е.ПОМЕСТИТЕ данные по URL-адресу, который в настоящее время не существует), но на практике, вероятно, лучшим подходом для начала будет просто POSTing.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top