No momento, estamos projetando uma API REST para acessar dados clássicos de clientes. Um dos elementos na API são os ativos de um usuário. Os ativos são adicionados sob um determinado serviço. A API de back-end adicionará apenas um ativo a um usuário em um determinado serviço. Portanto, não existe uma relação Usuário - Ativo, mas um relacionamento Usuário - [Serviço] - Ativo.
Nossos URIs ficarão assim:
/users/{id}/assets/{id}/services/{id}
Os usos da API conhecerão o ID do ativo e o ID do serviço para criar uma nova entrada. O que estamos lutando é com a criação dessa relação.
Uma maneira direta seria postar toda a relação com /users/{id}/assets/
POST /users/{id}/assets
{asset:${id}, service:{id}, attribute1:"{var}", attribute2:"{var}"}
mas, na verdade, não estamos criando um ativo como o URI pode indicar, mas uma relação serviço-ativo.
Como alternativa, estamos considerando o POST para o URI abordar a relação, assim:
POST /users/{id}/assets/{id}/service/{id}
{attribute1:"{var}", attribute2:"{var}"}
Mas, nesse caso, o caminho do recurso /users/{id}/assets/{id}
não existirá antes do POST e será criado como efeito colateral.
POST'ing para um caminho de recurso que ainda não existe ainda é permitido?
Obrigado por seus pensamentos,
Gerard.
fonte
Existem vários pontos aqui: Primeiro: você não deve colocar o ID ao criar um novo recurso, pois ele já pode existir, ou pode ser o sistema que usa uma técnica específica para gerar o ID e você está forçando-o a usar o seu e para o Se o ID precisar ser criado pelo sistema, o atributo do cabeçalho do local deverá ser definido no caso de recurso de criação, para obter o retorno com o ID gerado.
Segundo: seu JSON não está correto, você precisa lidar com o serviço como outro objeto dentro do objeto ativo, assim como nos serviços "URI" de recurso, você precisa lidar com ele como matriz.
tem que ser:
Se você vai usar dessa maneira
Terceiro: não prefiro usar esse caminho para a proposta de design. Se esse caso falhou, como você poderia saber que houve falha ao criar um ativo ou serviço,
fonte
Aqui está uma linha de pensamento diferente:
Dessa forma, você está defendendo os relacionamentos como um link de três vias entre ativo, serviço e usuário e não implica em nenhum relacionamento hierárquico
Você pode recuperar um relacionamento específico:
ou pesquise um subconjunto de relacionamentos por:
ou
A maneira original não está errada, mas essa abordagem pode oferecer mais flexibilidade sobre quem é usado.
fonte