Хорошая практика использования различных методов в REST API

В настоящее время я использую маршрут патча к / api / events /: id, который позволяет пользователю обновлять вхождение. Дело в том, что мне нужно будет обновить вхождения разными способами (один для обновления некоторых данных, один просто для изменения статуса и другой для обновления некоторых других данных). Каким будет лучший путь (как в хороших практиках) для проверки вхождения на примере? Я думал об использовании / api / events / validate /: id, когда дело доходит до проверки, но это действительно лучшая практика?

stackoverflow.com/a/49127862/125816
Sergio Tulentsev 31.07.2018 12:56

Большое спасибо, @SergioTulentsev;)

André 31.07.2018 13:02

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

Roman Vottner 31.07.2018 13:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
77
2

Ответы 2

Проверка данных должна выполняться путем добавления аннотаций проверки java в bean-компонент, как показано ниже:

@NotNull
private String lastName;
@NotNull
private String firstName;
@NotNull
private LocalDate dateOfBirth;
@NotNull
private Integer siblings;

Мне очень жаль, но я спросил не об этом.

André 31.07.2018 12:53

Нет, это не очень хорошая практика, не из-за URI (как упоминал выше Роман Воттнер, REST не заботится о том, как вы структурируете свои URI), а потому, что вы эффективно создаете метод RPC.

Есть ли причина, по которой PATCH для / api / событий /: id не отвечал с ошибкой 400 Bad Request и подробностями, если проверка не удалась?

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

André 01.08.2018 03:06

Роли и разрешения @ André являются внутренними и не должны открываться внешнему миру. Вы, конечно, можете возвращать разные ответы для разных пользователей / ролей в зависимости от имеющихся у них разрешений. Тем не менее, может быть важно отключить кеширование для этих ресурсов, поскольку промежуточный кеш может выполнять запросы к серверу, не предназначенные для определенных пользователей.

Roman Vottner 01.08.2018 13:42

@ André, часть проблемы использования разных URL-адресов для разных действий состоит в том, что это усложняет инвалидацию кеша. например, без дополнительных усилий патч для /api/occurrences/validate/:id не сделает /api/occurrences/:id недействительным. Также с точки зрения семантики, ресурс, который вы изменяете, находится на /api/occurrences/:id, поэтому вам следует отправлять запросы PATCH. Если вам нужно поддерживать различные действия по модификации, я бы использовал дополнительный параметр, чтобы указать, какое действие выполняется.

Tom Howard 02.08.2018 01:10

@TomHoward Например, только менеджер может изменить статус события, но и менеджер, и секретарь могут изменить обычные данные события.

André 02.08.2018 14:38

Итак, / api / событий / validate /: id будет использоваться для обновления обычных данных события, в то время как / api / событий / validate /: id будет обновлять только статус. Секретарь будет иметь доступ к / api / events /: id, но не к / api / events / validate /: id. Есть ли в этом смысл или мне следует поступить иначе?

André 02.08.2018 14:39

Вы имеете в виду: «/ api / событий /: id будет использоваться для обновления обычных данных события, в то время как / api / событий / validate /: id будет обновлять только статус».

Tom Howard 03.08.2018 08:16

@ André Бизнес-действия, которые пользователь может предпринять для представления, возвращаемого сервером, должны быть найдены в наборе ссылок с осмысленными именами отношений ссылок. В вашем случае, когда и секретарю, и руководителю разрешено изменять данные, предоставьте этим пользователям ссылку на своего рода формулу, где они могут вводить данные и отправлять их в службу. На самом деле пользователей не интересует точный URI, но то, что данные передаются на сервер. В случае менеджера вы также можете добавить ссылку для изменения статуса события - это похоже на (HTML-) Web

Roman Vottner 03.08.2018 13:34

@ André, кажется, Роман говорит о чем-то вроде github.com/kevinswiber/siren#actions-1

Tom Howard 07.08.2018 03:40

Другие вопросы по теме