Как спроектировать конечную точку покоя для элемента, имеющего несколько типов? - PullRequest
0 голосов
/ 06 января 2019

У меня есть несколько конечных точек для уведомлений:

Создать / обновить: POST /notifications и параметры: SimpleNotif pojo

Получить уведомления (список): POST /notifications/query и параметры: NotifFilter pojo

Получить уведомление: GET /notifications/{id} и параметры: id из простое уведомление

Удалить уведомление: DELETE /notifications/{id} и params: id снова

Pojo NotifFilter имеет такие поля, как sortBy, offset, limit и т. Д. Теперь уведомления бывают двух типов: простые и составные (иначе сводные). Указанные выше конечные точки используются для простых уведомлений.

POJO SimpleNotif и SummaryNotif также имеют много общих атрибутов. Сводное уведомление будет иметь все те же атрибуты (например, имя, частота и т. Д.) Вместе со списком простых уведомлений. Сводное уведомление может быть инициировано на основании определенных правил, например, серьезность одного изменения уведомления или нескольких изменений и т. д.

Как обработать дизайн конечной точки покоя для CRUD для сводных уведомлений?

/notifications/summary

будет конфликтовать с

/notifications/{id}.

Существующие конечные точки берут объект фильтрации для фильтрации. Должен ли я вводить тип там? Я не думаю, что желательно вводить совершенно новую конечную точку отдыха, поскольку у нас уже есть такая для уведомлений. Любые предложения, как обращаться с CRUD для сводного уведомления?

Примечание: Причиной использования POST для листинга (фактически GET) является ограничение длины URL в браузере.

1 Ответ

0 голосов
/ 06 января 2019

Существующие конечные точки принимают объект фильтра для фильтрации, если я ввести тип там?

Да, это имеет смысл с вашей текущей реализацией, поскольку рассмотрение SummaryNotif - это просто тип уведомления. Поэтому в будущем, если вы введете другой тип, вы не сможете просто добавить другую конечную точку для него.

Альтернативным способом сделать то же самое было , введя параметр запроса ?type=summary (также для того факта, что вы выполняете GET под именем f POST), но поскольку у вас уже есть запрашиваемая конечная точка, вы должны повторно использовать ее с дополнительным параметром в объекте запроса.


Другое предложение по дизайну может заключаться в том, что вы можете создать родителя (скажем, Notification) из SummaryNotif и SimpleNotif с помощью esp. атрибуты, которые являются общими для них, ваш базовый CRUD может выглядеть так:

Create/Update: POST /notifications and params: Accept a Notification object (subtyping helps here) 

Get Notifs (listing): POST /notifications/query and params: updated NotifFilter pojo

Get Notif: GET /notifications/{id} and params: id

Delete Notif: DELETE /notifications/{id} and params: id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...