Два предварительных пункта:
- Официальной спецификации REST, выпущенной центральным органом, не существует.Вся парадигма происходит от довольно тонкой (но гениальной) технической схемы, написанной Роем Филдингом в 2000 году.
- Однако есть несколько хороших книг по этому вопросу и сотни тысяч реализаций, которые привели к фирменный отраслевой стандарт .
Один из этих стандартов состоит в том, что URL-адреса REST относятся к ресурсам и идентификаторам, встроенным в эти URL-адреса, ссылки на ресурсы того же типа.Таким образом, GET /groups/:groupdId
является ортодоксальным (стандартная реализация, которая соответствует ожиданиям большинства программистов), тогда как GET /groups/:permissionId
- нет.
Возвращаясь к четырем рассматриваемым альтернативам:
Метод 1:
:GET /v1/groups/:id/permissions
Является ортодоксальным, поскольку ресурс, управляемый конечной точкой, имеет тип Group
и: id является идентификатором группы.
Метод 1.1:
:GET /v1/:id/permissions
Неортодоксален, так как нет указаний на то, к какому типу ресурсов относится URL.
Метод 2:
:GET /v1/permissions,
"If-Match": "[REPLACE_ID_HERE]" (header)
Неортодоксально, поскольку ожидается, что идентификаторы ресурсов будут передаваться как часть URL.
Метод 3:
:GET /v1/permissions/?groups=REPLACE_ID_HERE
Isортодоксальный, поскольку здесь ресурс равен Permission
, а groupId
применяется в качестве фильтра, для которого параметры запроса являются адекватным средством.