Как сделать RESTful-запрос для формы редактирования? - PullRequest
2 голосов
/ 01 ноября 2009

Я думаю, что у меня есть общее представление о REST, но я застрял в том, как запросить HTML-форму для редактирования ресурса.

Насколько я понимаю, если ресурс

user/12

И вы сделаете GET для этого с типом контента "text / html", тогда вы получите обратно html, который будет отображать детали этого пользователя.

Чего я не понимаю, так это как вернуть html, который будет отображать форму, позволяющую вам редактировать данные пользователя (и, в конечном счете, отправлять PUT для обновления пользователя).

Я видел:

user/12/edit 
user/12;edit

Которые не чувствуют себя супер RESTful для меня. Лично, ничего не зная (в том числе, является ли он действительным), я бы подумал о передаче какого-либо параметра edit = true в строку «Accept:» заголовка HTTP.

Есть ли определенный способ сделать это?

Редактировать : Я должен был объяснить, что я внедряю службу и хотел бы знать правильный способ сделать это, если таковой существует.

Ответы [ 4 ]

2 голосов
/ 01 ноября 2009

Не существует специальных методов или заголовков для такого рода вещей (отвечая HTML-кодом редактируемой формы для данного ресурса). А использование параметров строки запроса только усугубит это.

Вместо этого можно концептуально рассматривать редактируемую форму как ресурс самостоятельно и назначать ей путь /user/12/edit. «Обратная передача», конечно, будет PUT /user/12 (или, в Rails, POST /user/12 и с добавлением _method=PUT& к POST ed сущности).

Когда кто-то делает GET /user/12, он запрашивает представление пользователя . Когда кто-то делает GET /user/12/edit, он запрашивает представление формы для пользователя, а не представление пользователя напрямую.

Это точное расширение REST? Это чистый ОТДЫХ? Спорно. Но что еще ты собираешься делать?

2 голосов
/ 01 ноября 2009

Возврат формы HTML в виде представления ресурса тесно связывает вашу презентацию и данные. Это даст вам больше контроля, если вы просто вернете базовое представление ресурса (которое может быть HTML, но я бы не ожидал, что он будет иметь элементы формы), а затем положитесь на мой клиент для разметки данных таким образом, что это можно редактировать в HTML.

Кроме того, если вы должны вернуть HTML-форму с помеченным ресурсом, как данные формы будут отправлены обратно на сервер? Браузеры обычно поддерживают POST и GET только для действий формы, но выполнение POST для уже существующего ресурса не является RESTful; Вы хотели бы делать вместо этого. До тех пор, пока браузеры не поддержат все (или, по крайней мере, больше) методов HTTP, использование API-интерфейсов RESTful с формами браузера напрямую не будет работать (по крайней мере, в рамках ограничений REST).

Edit:

Чтобы ответить на ваш вопрос о том, как вы на самом деле попросите клиента проинформировать сервер о том, как он хочет вернуть ресурс, вы должны использовать согласование содержимого . На основании заголовков запроса сервер возвращает ресурс в соответствующем формате. Он может использовать пользовательский агент из заголовка или клиент может указать конкретный заголовок Accept, которому может подчиниться сервер. Вы и ваше серверное приложение должны обработать заголовок (и) и вернуть соответствующее представление HTML, если оно доступно.

Edit2:

Отредактировал мое заявление о возврате формы, не являющейся RESTful, см. Комментарии ниже.

1 голос
/ 01 ноября 2009

Как раз то, что стоит - AFAIK, пользователь / 12; редактирование использовалось только в Rails и только в течение месяца или двух. Это было упало довольно быстро.

1 голос
/ 01 ноября 2009

REST - это концепция, а не реализация. То есть, хотя ваше описание URL-адреса RESTful с типом содержимого text / html, возвращающего html, безусловно, является действительным, оно не гарантирует возврат полезной нагрузки. Разработчик службы REST может вернуть данные в форме.

Работайте в обратном направлении от запрашиваемой вами записи REST и просматривайте возвращаемую полезную нагрузку. Это расскажет вам все, что вам нужно знать о том, как вы используете этот URL-адрес, и о том, сколько работы вам нужно будет выполнить для потребляющей части уравнения.

...