@ray, отличная дискуссия
@jgerman, не забывайте, что только потому, что это REST, не означает, что ресурсы должны быть высечены в камне из POST.
Что вы решите включить в любое данное представление ресурса, зависит от вас.
В вашем случае обложки, упомянутые отдельно, представляют собой просто создание родительского ресурса (комикса), чьи дочерние ресурсы (обложки) могут иметь перекрестные ссылки. Например, вы также можете предоставить ссылки на авторов, издателей, персонажей или категории отдельно. Вы можете создать эти ресурсы отдельно или перед комиксом, который ссылается на них как на дочерние ресурсы. Кроме того, вы можете создать новые дочерние ресурсы после создания родительского ресурса.
Ваш конкретный случай с обложками немного сложнее, поскольку для обложки действительно требуется комикс, и наоборот.
Однако, если вы рассматриваете сообщение электронной почты как ресурс, а адрес отправителя — как дочерний ресурс, вы, очевидно, все равно можете ссылаться на адрес отправителя отдельно. Например, получить все с адресов. Или создайте новое сообщение с предыдущим адресом отправителя. Если бы электронная почта была REST, вы могли бы легко увидеть, что многие ресурсы с перекрестными ссылками могут быть доступны: /received-messages, /draft-messages, /from-addresses, /to-addresses, /addresses, /subjects, /attachments, /folders , /tags, /categories, /labels и др.
В этом руководстве представлен отличный пример ресурсов с перекрестными ссылками. http://www.peej.co.uk/articles/restfully-delicious.html
Это наиболее распространенный шаблон для автоматически генерируемых данных. Например, вы не публикуете URI, идентификатор или дату создания нового ресурса, поскольку они генерируются сервером. И все же вы можете получить URI, идентификатор или дату создания, когда вернете новый ресурс.
Пример в вашем случае двоичных данных. Например, вы хотите опубликовать двоичные данные в качестве дочерних ресурсов. Когда вы получаете родительский ресурс, вы можете представить эти дочерние ресурсы как одни и те же двоичные данные или как URI, которые представляют двоичные данные.
Формы и параметры уже отличаются от HTML-представлений ресурсов. Публикация двоичного/файлового параметра, который приводит к URL-адресу, не является натяжкой.
Когда вы получаете форму для нового ресурса (/comic-books/new) или получаете форму для редактирования ресурса (/comic-books/0/edit), вы запрашиваете конкретное для форм представление ресурса. Если вы отправляете его в коллекцию ресурсов с типом содержимого «application/x-www-form-urlencoded» или «multipart/form-data», вы просите сервер сохранить представление этого типа. Сервер может ответить сохраненным HTML-представлением или чем-то еще.
Вы также можете разрешить отправку представления HTML, XML или JSON в коллекцию ресурсов для целей API или аналогичных целей.
Также можно представить свои ресурсы и рабочий процесс так, как вы описываете, принимая во внимание обложки, размещенные после комикса, но требуя, чтобы у комиксов была обложка. Пример следующий.
- Позволяет отложенное создание обложки
- Позволяет создавать комиксы с необходимой обложкой
- Позволяет обложкам быть перекрестными ссылками
- Позволяет использовать несколько обложек
- Создать черновик комикса
- Создание эскизов обложек комиксов
- Опубликовать черновик комикса
GET /comic-books
=> 200 ОК, получить все комиксы.
GET /comic-books/0
=> 200 OK, Получить комикс (id: 0) с обложками (/covers/1, /covers/2).
GET /comic-books/0/covers
=> 200 ОК, Получить обложки для комиксов (id: 0).
GET /covers
=> 200 ОК, получить все обложки.
GET /covers/1
=> 200 OK, Получить обложку (id: 1) с комиксом (/comic-books/0).
GET /comic-books/new
=> 200 OK, Получить форму для создания комикса (форма: POST /draft-comic-books).
POST /draft-comic-books
title=foo
author=boo
publisher=goo
Published=2011-01-01
=> 302 Найдено, расположение: /draft-comic-books/3, перенаправление на черновик комикса (id: 3) с обложками (бинарный).
GET /draft-comic-books/3
=> 200 ОК, Получить черновик комикса (id: 3) с обложками.
GET /draft-comic-books/3/covers
=> 200 ОК, Получить обложки для проекта комикса (/draft-comic-book/3).
GET /draft-comic-books/3/covers/new
=> 200 OK, Получить форму для создания обложки для проекта комикса (/draft-comic-book/3) (форма: POST /draft-comic- книги/3/обложки).
POST /draft-comic-books/3/covers
cover_type=front
cover_data=(binary)
=> 302 Found, Location: /draft-comic-books/3/covers, перенаправление на новую обложку чернового комикса (/draft-comic-book/3/covers/1).
GET /draft-comic-books/3/publish
=> 200 OK, Получить форму для публикации черновика комикса (id: 3) (форма: POST /published-comic-books).
POST /published-comic-books
title=foo
author=boo
publisher=goo
Published=2011-01-01
cover_type=front
cover_data=(binary)
=> 302 Найдено, Расположение: /comic-books/3, Перенаправление на опубликованный комикс (id: 3) с обложками.
person
Alex
schedule
21.09.2011