У меня есть URI для набора ресурсов, называемых «фактами», и URI для каждого «фактического» ресурса в этой коллекции.
Я полагаю, что форму для создания нового "факта" следует запрашивать с помощью GET, но у меня возникают проблемы с определением, к какому URI он должен быть подключен.
GET для URI коллекции должен возвращать список URI ресурса «факт». Каждый фактический URI должен возвращать свое содержимое в ответ на GET. Фактическим фактическим созданием будет, конечно, POST (или PUT, в зависимости от ситуации).
Я вижу несколько вариантов, но ни один не выглядит удовлетворительным:
- Добавьте URI «фактической формы», на который будет ссылаться URI «фактов». GET к этому URI дает форму HTML. Кажется неправильным иметь другой ресурс только для описания ресурса.
- POST, созданный для URI «факты» без включения данных формы в заголовки, возвращает форму. Затем, после того как пользователь заполнит форму, он отправит POST с данными формы и создаст новый ресурс фактов. Это похоже на еще худший подход.
- Не отправляйте форму по сети, а включайте ее как часть API. Это кажется RESTful, поскольку REST API должен описывать типы медиа, и форму можно создать из описания типа «факт». Это странно для реализации. Возможно, служба REST отделена от обычного веб-сайта, поэтому фактический запрос HTML-формы находится на некотором URI, кроме REST API.
- Включить HTML-форму как часть URI-ответа «факты».
Чтобы уточнить, я пытаюсь следовать истинной архитектуре REST, как это определено Роем Филдингом, а не недоделанным RPC, изображающим из себя REST.
edit: Я начинаю думать, что # 3 что-то делает.
edit2: я думаю, что решение состоит в том, чтобы иметь обычную HTML-навигацию без REST в режиме CRUD, а затем внешний интерфейс выполняет вызовы AJAX REST соответствующим образом (или внутренний сервер выполняет внутренние вызовы своего REST API).
Причина, по которой мне нужно правильно выполнять REST-часть этой службы, заключается в том, что я хочу разрешить другим не-HTML-клиентам взаимодействовать с ней позже.