Я строю простой сервис RESTful и пытаюсь создать хороший дизайн и интуитивно понятные конечные точки. Вот некоторые из идей, которые я придумал после прочтения кучу статей о REST, и хотел получить некоторую обратную связь.Хорошие конечные точки для веб-сервиса RESTful
Ресурсы, которые будут подвергаться службой книги -
представлениеhttp://myapp.com/books/?type=fiction&age=15-35&author=american
http://myapp.com/books/35/chapters/2
http://myapp.com/books/35/chapters/2/pages/6
http://myapp.com/books/35/chapters/2/pictures/1
отклика для каждой конечной точки будет зависеть от способа и Accept заголовка т.е.
GET -H «Accept: приложение/JSON ' 'http://myapp.com/books/35/chapters/2' должно привести к что-то вроде
{
"book": "The Adventures Of Huckleberry Finn",
"title": "The Boys Escape Jim",
"pages": 15,
"pictures": 3
}
и тот же запрос с' Accept: APPLI cation/xml 'вернет мне представление xml того же самого.
Пара вещей, которые я не ясно, о:
Поскольку REST диктует, что мы должны использовать существительные, не глаголы, как я разоблачить форму HTML, чтобы ввести новые ресурсы?
/новый или/добавить не РЕСТИТУТ вообще.
бы
GET 'Accept: text/html' 'http://myapp.com/books/new'
быть приемлемым способом является конечной точкой на странице формы? Или, возможно,
POST 'Accept: text/html' 'http://myapp.com/books/'
с пустым телом - лучший способ? И тот же POST с пустым телом и
'Accept: application/json'
закончится ошибкой http 400. Это правильный/разумный подход, или есть лучший способ сделать это?
Я подхожу к этому как к «службе, которая предоставляет ресурсы книг, глав, изображений», а «веб-страница» является лишь одним из представлений этих ресурсов. Итак, технически, если бы я должен был поставить «Accept: text/html» в любом из указанных запросов, я должен ожидать получить html-представление запрашиваемого ресурса. В то же время html - это действительно не данные, описывающие язык, но язык презентации и последующее разделение проблем предполагает сохранение отдельно от представления (html) модели (ресурсов) и контроллера (кода, обрабатывающего запросы).
В целом, должен ли «api», который предоставляет ресурсы, обрабатываться отдельно от пользовательского интерфейса?
Что делать, если это небольшое приложение с одной страницей?
Благодарим за помощь!
Спасибо. Это в основном мой процесс. Вопрос, на который я пытаюсь ответить, - это вопрос о конечных точках. Чтобы POST добавлял книгу, клиент должен знать о необходимых полях и т. Д. Для людей, которые будут выполняться через html-форму. Поэтому я пытаюсь придумать хороший RESTful uri для этой формы. На данный момент я склонен делать http://myapp.com/books/new, где «новый» можно было бы подумать о специальном идентификаторе книги, указывающем, что форма должна быть представлена клиенту. – user3326384
Я думаю, вы пропустили мою мысль. URL не должен меняться. Это должен быть просто POST для myapp.com/books с телом, содержащим данные книги. Ваш сервер должен увидеть POST и узнать, что ему нужно создать новую книгу. Как правило, сервер будет возвращать сохраненный ресурс или только его вновь сгенерированный идентификатор. – jgitter
Я это понимаю, но мои вопросы касаются того, что происходит перед POST с телом. POST с телом происходит в ответ на то, что кто-то заполняет и представляет форму (в этом примере я говорю о человеке, взаимодействующем с веб-приложением). Чтобы форма была отправлена, она должна быть представлена пользователю. Один из способов сделать это - иметь отдельную страницу book_form.html (я упрощаю ее здесь), с помощью метода form = "POST" action = "http://myapp.com/books". Затем клиент может ПОЛУЧИТЬ http://myapp.com/book_form.html, заполнить его, а затем выполнить POST. – user3326384