Какой маршрут RESTful использовать при обновлении элемента включает создание и добавление в него нового элемента? - PullRequest
1 голос
/ 25 сентября 2019

Новый для кодирования и имел вопрос о структуре маршрутов, а не о фактическом кодировании.Ниже я приведу пример веб-приложения для библиотек и книг, чтобы прояснить мой вопрос.

Я хочу создать новую библиотеку: маршрут к библиотекам POST.

Я хочу обновить имя библиотеки: PUT библиотеки / libraryId route.

Я хочу создать новую книгу.POST books

Я хочу обновить название книги.PUT books / bookId

Я просматриваю список книг в библиотеке в своем одностраничном приложении.Существует форма для добавления новой книги в библиотеку.

По какому маршруту должна идти форма в соответствии с маршрутизацией RESTful или это не имеет значения?

  1. Форма отправляет сообщения вмаршрут новой книги, а затем обновляет библиотеку: POST / books / libraryId

или

Форма помещает в маршрут обновления библиотеки и создает новую книгу по этому маршруту: PUT / library / libraryId / newbookname

РЕДАКТИРОВАТЬ: некоторые пояснения, основанные на комментариях ниже .. Так что в моем сценарииновые книги могут быть созданы вне библиотеки пользователями, но они не могут быть выделены библиотеке.Библиотекарь управляет библиотекой, поэтому может создавать новые книги, которые будут автоматически добавляться в их библиотеку.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Выбор target-uri в первую очередь зависит от того, какой в ​​данный момент кэшированный ресурс вы хотите автоматически аннулировать.См. RFC 7234 .

Например, рассмотрите этот протокол: вы GET /libraries/123 и увидите в представлении, что книга отсутствует.Таким образом, вы получаете форму для добавления книги в библиотеку и отправляете ее.Куда должна отправляться эта отправка?

Что ж, текущее кэшированное представление /libraries/123 не имеет этой книги, поэтому, если мы хотим, чтобы пользователь мог проверить, что что-то изменилось, ему понадобитсяновая копия /libraries/123 для просмотра, поэтому мы должны сделать недействительной текущую кэшированную копию, отправив запрос на запись в /libraries/123

Обратите внимание, что это тот же target-uri, который мы используем при попытке обновитьэто имя библиотеки.Это преднамеренно.

Хорошая эвристика, на которую стоит обратить внимание: «Как бы вы сделали это в Интернете?».Когда мы используем HTML для навигации по протоколу доменного приложения, POST - единственный доступный нам небезопасный метод.Таким образом, добавление новой книги и изменение названия будут POST запросами - другими словами, обработчику POST может потребоваться просмотреть тело запроса, чтобы выяснить, что делать.

1 голос
/ 25 сентября 2019

По моему мнению, если книги относятся к библиотеке, у вас будет такой путь для создания книги: POST /libraries/libraryId/books и для обновления книги: PUT /libraries/libraryId/books/bookId.

Также убедитесь, что соблюдаете следующие основные правила о методах HTTP: https://nordicapis.com/understanding-idempotency-and-safety-in-api-design/

POST не всегда для создания и PUT для обновлений.

...