Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.10.2021, 10:17
Аспирант
Отправить личное сообщение для Elfix Посмотреть профиль Найти все сообщения от Elfix
 
Регистрация: 03.01.2018
Сообщений: 38

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).
Ответить с цитированием
  #2 (permalink)  
Старый 12.10.2021, 11:24
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Сообщение от Elfix
но не понимаю в каком формате лучше это реализовать?
Я за "второй" вариант...
Ответить с цитированием
  #3 (permalink)  
Старый 12.10.2021, 11:30
Аспирант
Отправить личное сообщение для Elfix Посмотреть профиль Найти все сообщения от Elfix
 
Регистрация: 03.01.2018
Сообщений: 38

А как во втором варианте получить список всех адресов по всем пользователям?
Ответить с цитированием
  #4 (permalink)  
Старый 12.10.2021, 12:01
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Elfix, если такое нужно - сделай еще
GET /api/users/postalAddressesAll
Ответить с цитированием
  #5 (permalink)  
Старый 12.10.2021, 12:03
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

Или вот это используй...
Сообщение от Elfix
GET /api/postalAddresses - получить список всех адресов;
Ответить с цитированием
  #6 (permalink)  
Старый 12.10.2021, 16:23
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,791

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

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

Я бы только использовал в адресах не camelCase, а kebab-case или snake_case.
Ответить с цитированием
  #7 (permalink)  
Старый 12.10.2021, 22:24
Аспирант
Отправить личное сообщение для Elfix Посмотреть профиль Найти все сообщения от Elfix
 
Регистрация: 03.01.2018
Сообщений: 38

Может есть какое то общепринятое соглашение, как обычно это форматируют? Стандарт или правила хорошего тона? В этом вопрос.
Ответить с цитированием
  #8 (permalink)  
Старый 13.10.2021, 10:31
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

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

Последний раз редактировалось Vlasenko Fedor, 13.10.2021 в 15:03.
Ответить с цитированием
  #9 (permalink)  
Старый 13.10.2021, 10:33
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,215

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

Elfix, прикинь сколько этого будет у тебя... Разложи на "кучки"...
Тогда тут смогут что-то посоветовать по решению.
Ответить с цитированием
  #10 (permalink)  
Старый 13.10.2021, 15:46
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Ну мне кажется логичным делать как в таблицах, т.е:
GET /api/postalAddresses - получить список всех адресов;
GET /api/postalAddresses/{postalAddressId} - получить поля конкретного адреса;
GET /api/postalAddresses/{postalAddressId}/users/ - получить всех пользователей с конкретным адресом
GET /api/users/{userId}/postalAddresses/ - получить список всех адресов конкретного пользователя
GET /api/users/{userId}/postalAddresses/{postalAddressId} - получить поля конкретного адреса у конкретного пользователя.

Т.е. можно запросить и так и эдак.)

А про текущего юзера уже сказали - не надо так, ничего страшного нет в том чтоб id лишний раз послать. Если нужны какие-то ограничения, то это уже на той стороне по ролевой модели.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Rest API -учебники torsar Учебные материалы 0 18.02.2021 08:00
Submit формы используя REST API Sogl ExtJS 11 08.11.2016 10:06
REST API для сайта на Node js Ashotich Node.JS 2 26.09.2016 23:04
Rest api server(php), кроссдоменные запросы и клиенты на чем угодно torsar Серверные языки и технологии 0 06.05.2016 15:58
rest api client z2312 AJAX и COMET 0 20.01.2015 11:53