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

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

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

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

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

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

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

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

Ответ 1

Если вы отправляете данные через обычный HTML, вы ограничены формой POST. URI, который запрос POST отправляется на , не должен быть URI для изменяемого ресурса. Вы должны либо использовать POST для ресурса коллекции, который каждый раз добавляет вновь созданный ресурс (с URI для нового ресурса в заголовке Location и кодом статуса 202) или POST для ресурса обновления, который обновляет ресурс с предоставленным URI в содержимом запроса (или пользовательский заголовок).

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

Ответ 2

Существует множество альтернатив, которые вы можете использовать. Хорошее решение предоставляется в микроформатах wiki, а также упоминается команда 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 

Ответ 3

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

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

Ответ 4

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

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

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