Путаница с несколькими путями при разработке REST API

У нас есть ресурсы под названием «Игры и игроки».

/games -> Get all Games available

/games/{game-id} -> Get the game details of specific Game with game-id

/players/me -> Get logged in Player details

Будут игры, в которые играет игрок, которые можно пометить в разделе «Игры» или «Игроки».


Сценарий 1

/games/me -> Fetches games played by the current logged in player

Это группирует запрос под тегом «Игры». Я использую Swagger API, поэтому этот вызов будет направляться контроллеру GamesAPI в сгенерированном клиентом коде. Я считаю справедливым быть в API игр, а не в игроке, поскольку это связано с играми.

Проблема : Это выглядит слишком странно, чтобы рассматривать «я» как особый идентификатор, так как похоже, что это одна из форм {game-id}, которую я не могу переварить.


Сценарий 2

/players/me/games -> Fetches games played by the current logged in player

Это группирует его под тегом Player, который переходит в PlayerAPI после генерации кода. Путь имеет хорошее значение, но более уместно иметь его в GamesAPI (по моему выбору - я могу ошибаться, подскажите, пожалуйста)

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

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

Ответы 3

Сценарий 1 кажется лучшим из двух, потому что, как правило, URL-адрес ваших игр попадает в GameController, и там вы можете иметь функцию действия для получения всех игр, одной игры с заданным идентификатором или игр пользователя, вошедшего в систему.

Дизайн отношений основан на API, как ваши схемы разработаны. Итак, в вашем случае

1 игрок может играть в 1 или несколько игр — отношение 1 ко многим

Следовательно, вы должны группировать игровые данные на основе игроков. Таким образом, возникает 2 сценария повышения производительности API.

Сценарий 1

Не проще ли искать в играх идентификатор игрока, а затем группировать их?

Сценарий 2

Не проще ли искать игроков по идентификатору игры, а затем группировать их?

Логически, говорить и рассматривать сценарий 1 имеет больше смысла, поэтому

/games/{player-id} -> Fetches games played by the current logged in player

/games/{player-id} -> но это конфликтует с GET /games/{game-id}

Ayyappa 29.05.2019 06:30

@Ayyappa как дела?, это даст вам игру для идентификатора игрока, где `/games/{game-id}` дает вам игру для идентификатора игры

Vaibhav Kumar Goyal 29.05.2019 08:15

Это не так работает. {player-id} или {game-id} может быть любым идентификатором или буквенно-цифровым значением. Трудно классифицировать или сгруппировать все документы/записи в рамках одного ресурса только по идентификатору.

Ayyappa 29.05.2019 10:47
Ответ принят как подходящий

Вот как я это решил.

Как упоминалось в Сценарии 1, я вижу, что «я» конфликтует с {game-id} и смущает пользователей. В Сценарии 2 я вижу, что выбор пользовательских игр из API проигрывателя не интуитивно понятен.

Поэтому я выбрал подход, при котором он пытается свести конечные точки к минимуму. Я добавил новый параметр запроса "playedOnly:boolean" для GET /games, который возвращает все игры, связанные с игроком.

Это упрощает многое. Я все еще могу использовать конечную точку /games, и больше никакой путаницы!

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