Por exemplo, tenho entidades: Cliente, Relatório. O cliente pode ter muitos relatórios e acho que o ponto final de um único gerenciamento de relatórios deve ser aninhado assim:
/clients/{client_id}/reports/{report_id}
Quanto a todos os relatórios de um cliente, o enpoint é esperado:
/clients/{client_id}/reports
Mas como deve ser um ponto de extremidade para obter todos os relatórios de todos os clientes para manter a API consistente e bem projetada.
Minhas abordagens:
- (Eu vi em algumas APIs do Google) use "-" em vez dele e analise-o como "todos":
/clients/-/reports
Isso mantém o formato do ponto final o mesmo, mas parece um pouco incomum, não consegue encontrar nenhum rfc que sugira esse caminho.
- Faça um ponto de extremidade separado apenas para todos os relatórios:
/reports
Mas, para obter os relatórios do cliente, ainda é:
/clients/{client_id}/reports
- Refatorar pontos de extremidade para tornar o "cliente" não um pai, mas apenas um parâmetro de filtro:
/reports?client={client_id}
- relatórios de um cliente
/reports
- relatórios de todo o cliente
No caso de adicionar um novo terminal para postar um relatório para um cliente específico, pode parecer feio, porque será uma solicitação POST com um parâmetro na URL.
Existem outras sugestões de idéias?