Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   REST API Проектирование путей запроса (https://javascript.ru/forum/node-js-io-js/83193-rest-api-proektirovanie-putejj-zaprosa.html)

Elfix 12.10.2021 10:17

REST API Проектирование путей запроса
 
Приветствую!

Сделал несколько API для управления пользователями.

GET /api/users - получение списка пользователей;
GET /api/users/{userId} - получение полей выбранного пользователя;
POST /api/users - создание нового пользователя;
PATCH /api/users - изменение полей текущего пользователя;
PATCH /api/users/{userId} - изменение полей конкретного пользователя;
DELETE /api/users - удаление текущего пользователя;
DELETE /api/users/{userId} - удаление конкретного пользователя.

Есть еще желание сделать функционал получения, создания, редактирования, удаления адреса конкретного пользователя, но не понимаю в каком формате лучше это реализовать?

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

Я пока думаю о таком варианте:

GET /api/postalAddresses - получить список всех адресов;
GET /api/postalAddresses/{postalAddressId} - получить поля конкретного адреса;
GET /api/postalAddresses/users/{userId} - получить список адресов конкретного пользователя
GET /api/postalAddresses/{postalAddressId}/users/{userId} - получить поля конкретного адреса у конкретного пользователя.

Или такой вариант:

GET /api/users/postalAddresses - получить список всех адресов текущего пользователя
GET /api/users/{userId}/postalAddresses/ - получить список всех адресов конкретного пользователя
GET /api/users/{userId}/postalAddresses/{postalAddressId} - получить поля конкретного адреса у конкретного пользователя.

Таблица postalAddresses подчинена таблице users (postalAddresses.userId = users.id).

ksa 12.10.2021 11:24

Цитата:

Сообщение от Elfix
но не понимаю в каком формате лучше это реализовать?

Я за "второй" вариант... :)

Elfix 12.10.2021 11:30

А как во втором варианте получить список всех адресов по всем пользователям?

ksa 12.10.2021 12:01

Elfix, если такое нужно - сделай еще ;)
GET /api/users/postalAddressesAll

ksa 12.10.2021 12:03

Или вот это используй...
Цитата:

Сообщение от Elfix
GET /api/postalAddresses - получить список всех адресов;


Nexus 12.10.2021 16:23

Цитата:

Сообщение от Elfix
А как во втором варианте получить список всех адресов по всем пользователям?

А кто запрещает совмещать различные варианты адресов?

GET /api/postalAddresses - получить список всех адресов;
GET /api/users/postalAddresses - получить список всех адресов текущего пользователя
GET /api/users/{userId}/postalAddresses/ - получить список всех адресов конкретного пользователя

Я бы только использовал в адресах не camelCase, а kebab-case или snake_case.

Elfix 12.10.2021 22:24

Может есть какое то общепринятое соглашение, как обычно это форматируют? Стандарт или правила хорошего тона? В этом вопрос.

Vlasenko Fedor 13.10.2021 10:31

я бы не писал адреса в верблюжей нотации
users/{userId}/postal-addresses читается легче
api - здесь префикc, apiv1, apiv2 ...
иначе не нужен

ksa 13.10.2021 10:33

Цитата:

Сообщение от Elfix
как обычно это форматируют?

Сильно зависит от количества "единиц роутинга"... :D
Если их с десяток - то и париться особо не о чем. А вот если такое измеряется сотнями - тогда волей, не волей, а придется придумывать некую унификацию УРЛов, дабы у них была какая-то общая идея.

Elfix, прикинь сколько этого будет у тебя... Разложи на "кучки"...
Тогда тут смогут что-то посоветовать по решению.

Rise 13.10.2021 14:50

Цитата:

Сообщение от Elfix
Сделал несколько API

"текущего пользователя" это лишнее, один из принципов архитектуры REST это stateless.


Часовой пояс GMT +3, время: 16:20.