Eu queria saber quais são as opiniões das pessoas sobre uma PUT
operação RESTful que não retorna nada (nulo) no corpo da resposta.
Eu queria saber quais são as opiniões das pessoas sobre uma PUT
operação RESTful que não retorna nada (nulo) no corpo da resposta.
Respostas:
A especificação HTTP ( RFC 2616 ) possui várias recomendações aplicáveis. Aqui está a minha interpretação:
200 OK
para uma PUT bem-sucedida de uma atualização em um recurso existente. Nenhum corpo de resposta é necessário. (De acordo com a Seção 9.6 , 204 No Content
é ainda mais apropriado.)201 Created
para uma PUT bem-sucedida de um novo recurso, com o URI mais específico para o novo recurso retornado no campo Cabeçalho do local e quaisquer outros URIs e metadados relevantes do recurso ecoados no corpo da resposta. ( Seção 10.2.2 da RFC 2616 )409 Conflict
para um PUT que é bem sucedido devido a um 3 rd modificação -party, com uma lista de diferenças entre a tentativa de atualização e o recurso atual no corpo da resposta. ( Seção 10.4.10 da RFC 2616 )400 Bad Request
para uma PUT sem êxito, com texto em idioma natural (como inglês) no corpo da resposta que explica por que a PUT falhou. ( Seção 10.4 da RFC 2616 )No response body needed
em relação a um 200. De fato, o corpo da resposta não é mencionado em relação a um PUT. Só declaraIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
Ao contrário da maioria das respostas aqui, acho que o PUT deve retornar o recurso atualizado (além do código HTTP, é claro).
O motivo pelo qual você desejaria retornar o recurso como uma resposta para a operação PUT é que, quando você envia uma representação de recurso para o servidor, o servidor também pode aplicar algum processamento a esse recurso, para que o cliente queira saber como esse recurso parece que após a solicitação foi concluída com êxito. (caso contrário, ele terá que emitir outra solicitação GET).
Eu acho que é possível que o servidor retorne conteúdo em resposta a um PUT. Se você estiver usando um formato de envelope de resposta que permita dados carregados de sidel (como o formato consumido por dados de brasa), também poderá incluir outros objetos que podem ter sido modificados por acionadores de banco de dados etc. (Os dados carregados de sideload devem explicitamente reduzir número de solicitações e este parece ser um ótimo local para otimizar.)
Se eu apenas aceitar o PUT e não tiver nada a relatar, utilizarei o código de status 204 sem corpo. Se tenho algo a relatar, uso o código de status 200 e incluo um corpo.
A especificação HTTP / 1.1 (seção 9.6) discute os códigos de resposta / erro apropriados. No entanto, ele não aborda o conteúdo da resposta.
O que você esperaria? Um código de resposta HTTP simples (200 etc.) parece direto e inequívoco para mim.
Se o back-end da API REST for um banco de dados relacional SQL,
Se você não se importa com atualizações perdidas ou se deseja forçar seus clientes a fazer um GET imediatamente após um PUT, não retorne nada do PUT.
Código de resposta HTTP 201 para "Criado" junto com um cabeçalho "Local" para apontar para onde o cliente pode encontrar o recurso recém-criado.
Eu usei a API RESTful em meus serviços, e aqui está a minha opinião: primeiro precisamos obter uma visão comum: PUT
é usado para atualizar um recurso que não é criado ou obtido.
Eu defini recursos com: Stateless resource
e Stateful resource
:
Recursos sem estado Para esses recursos, basta retornar o HttpCode com corpo vazio, basta.
Recursos com estado Por exemplo: a versão do recurso. Para esse tipo de recurso, você deve fornecer a versão quando quiser alterá-la. Portanto, retorne o recurso completo ou a versão ao cliente, para que o cliente não precise enviar uma solicitação de obtenção após a ação de atualização.
Mas , por um serviço ou sistema, mantê-losimple
,clearly
,easy to use and maintain
é a coisa mais importante.
Assim como um corpo de solicitação vazio está de acordo com o objetivo original de uma solicitação GET e o corpo de resposta vazio está de acordo com o objetivo original de uma solicitação PUT.
parece ok ... embora eu ache uma indicação rudimentar de sucesso / fracasso / tempo publicado / # bytes recebidos / etc. seria preferível.
editar: eu estava pensando na linha da integridade dos dados e / ou manutenção de registros; metadados, como um hash MD5 ou registro de data e hora para o tempo recebido, podem ser úteis para grandes arquivos de dados.
Idealmente, ele retornaria uma resposta de sucesso / falha.
Há uma diferença entre o cabeçalho e o corpo de uma resposta HTTP. PUT nunca deve retornar um corpo, mas deve retornar um código de resposta no cabeçalho. Basta escolher 200 se foi bem-sucedido e 4xx se não. Não existe um código de retorno nulo. Por que você quer fazer isso?
200
PUT, DELETE ou qualquer outro método. Perdi alguma coisa? Como a Mozilla se tornar o chefe do W3 e da IETF? ;) Ou talvez eles nunca tenham ouvido falar do Princípio da Robustez da Postel.