Как отправить HTML-форму RESTful? - PullRequest
3 голосов
/ 07 августа 2009

У меня есть URI для набора ресурсов, называемых «фактами», и URI для каждого «фактического» ресурса в этой коллекции.

Я полагаю, что форму для создания нового "факта" следует запрашивать с помощью GET, но у меня возникают проблемы с определением, к какому URI он должен быть подключен.

GET для URI коллекции должен возвращать список URI ресурса «факт». Каждый фактический URI должен возвращать свое содержимое в ответ на GET. Фактическим фактическим созданием будет, конечно, POST (или PUT, в зависимости от ситуации).

Я вижу несколько вариантов, но ни один не выглядит удовлетворительным:

  1. Добавьте URI «фактической формы», на который будет ссылаться URI «фактов». GET к этому URI дает форму HTML. Кажется неправильным иметь другой ресурс только для описания ресурса.
  2. POST, созданный для URI «факты» без включения данных формы в заголовки, возвращает форму. Затем, после того как пользователь заполнит форму, он отправит POST с данными формы и создаст новый ресурс фактов. Это похоже на еще худший подход.
  3. Не отправляйте форму по сети, а включайте ее как часть API. Это кажется RESTful, поскольку REST API должен описывать типы медиа, и форму можно создать из описания типа «факт». Это странно для реализации. Возможно, служба REST отделена от обычного веб-сайта, поэтому фактический запрос HTML-формы находится на некотором URI, кроме REST API.
  4. Включить HTML-форму как часть URI-ответа «факты».

Чтобы уточнить, я пытаюсь следовать истинной архитектуре REST, как это определено Роем Филдингом, а не недоделанным RPC, изображающим из себя REST.

edit: Я начинаю думать, что # 3 что-то делает.

edit2: я думаю, что решение состоит в том, чтобы иметь обычную HTML-навигацию без REST в режиме CRUD, а затем внешний интерфейс выполняет вызовы AJAX REST соответствующим образом (или внутренний сервер выполняет внутренние вызовы своего REST API).

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

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

По-моему, единственные чисто RESTful ответы - 1 и 3.

На мой взгляд, описание ресурса является собственным ресурсом. Вопрос в том, хотите ли вы сделать этот ресурс доступным через API вашего приложения или же вы хотите сделать его частью самого API.

Для 1 кажется, что RESTful делает URI примерно такими:

GET / факты -> все факты GET / facts / 1 -> возвращает факт 1 (очевидно, id может быть словом или чем-то еще) GET / fact / create -> возвращает форму, подходящую для создания факта POST / факты -> добавляет факт

0 голосов
/ 07 августа 2009

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

Между тем, я предлагаю вам просто использовать то, что большинство сред REST назвали бы дополнительным «представлением» ресурса, чтобы вернуть форму: Например. /your/collectionresource?view=form или /your/collectionresource;form

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...