Estou criando um serviço RESTfull para uma estrutura de recursos em forma de árvore e queria saber qual seria a melhor estrutura de URL?
Eu tenho três requisitos:
- ser capaz de obter uma coleção de recursos raiz
- ser capaz de obter um recurso individual
- ser capaz de obter uma coleção de recursos filho
Meu pensamento atual é:
/rest/documents
/rest/documents/{id}
/rest/documents/{id}/documents
Eu também estava pensando em seguir as rotas do singular / plural para denotar listas ou elementos individuais, mas sei que vou ter um recurso que é o mesmo plural que o singular, então decidi contra isso.
Alguém tem alguma opinião sobre o exposto? ou tem uma maneira diferente / melhor de estruturar isso?
web-services
Matt Brailsford
fonte
fonte
Respostas:
O que me vem à mente é: não permita que a API RESTful reflita a recursividade no próprio URL. Venha para pensar sobre isso, seu recurso é apenas os documentos.
Se você tiver seus documentos armazenados fisicamente de acordo com a estrutura recursiva, crie um mapeamento para um ID exclusivo e use o ID no URL:
Agora, se você possui seus documentos como este:
a solicitação consultaria esse URL para obter o
/abc/asd
documentoPortanto, agora você precisa fornecer aos usuários da sua API meios para percorrer sua estrutura com pouco esforço. Isso pode ser feito envolvendo sua carga útil de resposta (documento) em um objeto, contendo informações adicionais de travessia, como esta:
desde que você espere que os usuários não criem muitos documentos em um único nível, inclua uma lista de filhos na resposta. Se não for esse o caso, você poderá oferecer ao usuário a recuperação de IDs de documentos filhos, permitindo, por exemplo, a paginação dos resultados por meio de parâmetros da string de consulta:
Por fim, falando dos parâmetros da string de consulta, você também pode fornecer as informações do caminho diretamente através dos parâmetros da string de consulta:
Todas as abordagens mencionadas esperam que a planície
GET /rest/documents
retorne apenas documentos raiz.fonte
Algo assim talvez:
onde {rootEntity} é o ponto de partida da sua coleção, {leafEntity} é qualquer nó da folha nomeado dentro da sua árvore.
Você pode acrescentar alguns parâmetros a qualquer um dos itens acima para selecionar, por exemplo, Mais recentes ou Todos ou algo assim.
fonte