Присвоение имен конечным точкам REST API для определенных подкатегорий данных

#rest #naming-conventions #endpoint

#rest #соглашения об именовании #конечная точка

Вопрос:

Допустим, у меня есть API, который (наряду с другими объектами) занимается задачами. Мои конечные точки будут выглядеть примерно так

 GET /api/tasks //List all tasks
POST /api/tasks //Create a new task

GET /api/task/1 //Fetch a single task
PUT /api/task/1 //Update a single Tasks

GET /api/task/1/comments //Get the comments of task 1
  

Мне также нужно несколько подмножеств данных задачи, которые имеют совершенно разные форматы:

  • user-tasks задачи для пользователя, но сформированные в соответствии с расписанием.
  • sync-data все задачи, которые необходимо отправить во внешнюю систему со специальными ссылками

Я вижу, что пользовательские данные могут существовать вне иерархии пользователей, например

 GET /api/user/1/tasks //tasks for this user with dedicated 
  

Но что из sync-data ? Должно ли это подпадать под tasks иерархию или систему, для которой оно предназначено, например

 GET /api/ExternalSystemA/tasks //tasks for synchronization
  

Ответ №1:

REST не заботится о том, какие соглашения о правописании вы используете для своего URI. Допустимы любые варианты написания, которые согласуются с производственными правилами в RFC 3986.

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

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