#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 из контекста и относительной ссылки. В некоторых случаях действительно хорошей идеей является проектирование вашей иерархии таким образом, чтобы вы могли воспользоваться этим преимуществом.
В противном случае это во многом похоже на выбор имени переменной — машине все равно, поэтому вы просто хотите выбрать варианты написания, которые устраивают других людей; другими словами, убедиться, что вы соответствуете локальным соглашениям.