Насколько я могу судить, каждый отдельный ресурс должен иметь только один канонический путь. Итак, в следующем примере, какими были бы хорошие шаблоны URL?
Возьмем, к примеру, представительство компаний для отдыха. В этом гипотетическом примере каждая компания имеет 0 или более отделов, и каждый отдел имеет 0 или более сотрудников.
Отдел не может существовать без ассоциированной компании.
Сотрудник не может существовать без соответствующего отдела.
Теперь я бы нашел естественное представление шаблонов ресурсов.
-
/companies
Коллекция компаний - принимает предложение для новой компании. Получить для всей коллекции. -
/companies/{companyId}
Индивидуальная компания. Принимает GET, PUT и DELETE -
/companies/{companyId}/departments
Принимает POST для нового элемента. (Создает отдел внутри компании.) -
/companies/{companyId}/departments/{departmentId}/
-
/companies/{companyId}/departments/{departmentId}/employees
-
/companies/{companyId}/departments/{departmentId}/employees/{empId}
Учитывая ограничения, в каждом из разделов, я чувствую, что это имеет смысл, если немного глубоко вложен.
Однако моя трудность возникает, если я хочу перечислить (GET
) всех сотрудников во всех компаниях.
Шаблон ресурсов для этого наиболее точно соответствует /employees
(коллекция всех сотрудников)
Означает ли это, что я должен иметь /employees/{empId}
также потому, что если это так, есть два URI для получения одного и того же ресурса?
Или, может быть, вся схема должна быть сглажена, но это будет означать, что сотрудники - это вложенный объект верхнего уровня.
На базовом уровне /employees/?company={companyId}&department={deptId}
возвращает тот же вид сотрудников, что и самый глубоко вложенный шаблон.
Какая наилучшая практика для шаблонов URL-адресов, в которых ресурсы принадлежат другим ресурсам, но должна быть доступна отдельно?
ОБНОВЛЕНИЕ: см. Мой ответ ниже, чтобы узнать, что я сделал.