Например, у меня есть объекты: Клиент, Отчет. У клиента может быть много отчетов, и я думаю, что конечная точка для управления одним отчетом должна быть вложена следующим образом:
/clients/{client_id}/reports/{report_id}
Что касается всех отчетов одного клиента, ожидается, что enpoint:
/clients/{client_id}/reports
Но как должна выглядеть конечная точка для получения всех отчетов всех клиентов, чтобы API был согласованным и хорошо спроектированным.
Мои подходы:
- (Я видел это в некоторых API Google) используйте вместо него "-" и проанализируйте его как "все":
/clients/-/reports
Это сохраняет формат конечной точки таким же, но выглядит немного необычно, не может найти ни одного rfc, предлагающего этот способ.
- Создайте отдельную конечную точку только для всех отчетов:
/reports
Но чтобы получить Отчеты Клиента, это все равно:
/clients/{client_id}/reports
- Рефакторинг конечных точек, чтобы сделать «клиента» не родителем, а просто параметром фильтра:
/reports?client={client_id}
- отчеты одного клиента
/reports
- отчеты всего клиента
В случае добавления новой конечной точки для публикации отчета для конкретного клиента, это может выглядеть некрасиво, потому что это будет POST-запрос с параметром в URL.
Есть ли другие предложения идей?