Resposta adequada para uma inserção REST - novo registro completo ou apenas o valor da identificação do registro?

15

Estou criando uma API REST que permite inserções (POST, não idempotent) e atualizações (PUT, idempotent) para adicionar / atualizar banco de dados em nosso aplicativo.

Gostaria de saber se existem padrões ou práticas recomendadas em relação aos dados que enviamos de volta ao cliente na resposta para uma operação POST (inserção). Precisamos enviar de volta pelo menos um valor de ID de registro (por exemplo, seu novo registro é o registro 1234).

Devemos responder com o objeto completo? (por exemplo, essencialmente a mesma resposta que eles receberiam de uma solicitação "GET / object_type / 1234")

Devemos responder apenas com o novo valor de ID? (por exemplo, "{id: 1234}", o que significa que, se eles querem buscar o registro inteiro, precisam fazer uma solicitação HTTP GET adicional para obter o registro completo)

Um cabeçalho de redirecionamento apontando-os para a URL do objeto completo?

Algo completamente diferente?

Keith Palmer Jr.
fonte
Estou oot certeza sobre a melhor prática, mas para mim, pessoalmente, eu provavelmente iria considerar apenas devolver o ID de recém-criada, se bem sucedido caso contrário -1 etc estar interessado em ver o que os outros dizem que
dreza

Respostas:

13

Bem, em uma interface REST, seguindo o HTTP sempre que possível, eu retornaria um 201 e um URI no campo de cabeçalho Location para o Recurso recém-criado. Aqui está o que as Definições de código de status dizem:

10.2.2 201 criado

A solicitação foi atendida e resultou na criação de um novo recurso. O recurso recém-criado pode ser referenciado pelos URIs retornados na entidade da resposta, com o URI mais específico para o recurso fornecido por um campo de cabeçalho Local. A resposta DEVE incluir uma entidade que contenha uma lista de características de recursos e localizações a partir das quais o usuário ou agente de usuário possa escolher o mais apropriado. O formato da entidade é especificado pelo tipo de mídia fornecido no campo de cabeçalho Content-Type. O servidor de origem DEVE criar o recurso antes de retornar o código de status 201. Se a ação não puder ser realizada imediatamente, o servidor DEVE responder com a resposta 202 (Aceita).

Se algo der errado, eu diria que você não deve retornar -1como outros já disseram, mas simplesmente um código de erro de cliente ou servidor (4xx ou 5xx). Por exemplo, se um usuário não tiver permissão para criar algum novo recurso, você simplesmente retornará um "401 Não Autorizado", nada mais e nada menos.

Bruno Schäpper
fonte
E o corpo? vazio ou todo o objeto recém-criado em resposta?
Desenvolvedor
Duas opções comuns que eu conheço são: 1) definir o cabeçalho do local para onde a nova entidade pode ser encontrada ou 2) incluir a nova entidade no corpo. Eu pessoalmente vou com o último por razões práticas. Somtimes combinada para uma sensação mais Resty;)
de Bruno SCHAPPER