Estou desenvolvendo uma API RESTful na qual http://server/thingyapi/thingyblob/1234
retorna o arquivo (também conhecido como "blob") associado à coisinha # 1234 para download. Mas pode ser que a solicitação seja feita em um momento em que o arquivo não exista no servidor, mas definitivamente estará disponível posteriormente. Há um processo em lote no servidor que gera todos os blobs para todas as coisas. O Thingy 1234 já existe e seus dados, exceto o blob, já estão disponíveis. O servidor ainda não conseguiu gerar o blob de 1234.
Eu não quero retornar 404; isso é para coisinhas que não existem. Isso é algo que existe, mas seu blob ainda não foi gerado. Como um vídeo do YouTube que está "processando". Também não acho que os códigos de redirecionamento sejam adequados; não há "outro" URL para tentar.
Qual é o código de status HTTP correto para retornar nesse caso?
204
"Sem Conteúdo"? Is indica que o servidor processou a solicitação com sucesso e não está retornando nenhum conteúdo [no momento].Respostas:
Eu sugiro
202 - Accepted
. A partir da documentação :fonte
O "problema", como é, está no lado do servidor: o cliente fez uma solicitação bem-formada, mas o servidor não pode atendê-la. Então, estou inclinado a um "Erro de servidor", código de status 5xx.
Quoth RFC 7231 (o padrão HTTP atual, ênfase adicionada):
Nota
Dos códigos disponíveis, eu diria 503, "Serviço indisponível" foi o mais adequado:
Nota:
Retry-After
valor. Você pode fornecer como valor o tempo estimado de conclusão da próxima execução do processo em lote ou o intervalo de execução do processo em lote.Definir seu próprio código de status 5xx (591, por exemplo), embora permitido , teria a semântica incorreta:
Os clientes tratariam seu próprio código de status como 500, "Erro interno do servidor" , o que não seria correto.
fonte
307 - TEMPORARY REDIRECT
o que é bom se você quer do lado do cliente força de esperar em outro lugar, enquanto o seu ressource está sendo "preparado"Eu acho que 423 - Locked pode ser usado para este fim:
fonte
O URL não corresponde a uma solicitação de algo.
http://server/thingyapi/thingyblob/1234
O cliente está solicitando um thingyblob, que não existe. Se existisse, você daria a eles.
404
fonte
503
ser uma resposta apropriada. Sem mencionar algumas das outras sugestões estranhas.Outra opção:
503 - Service Unavailable
.fonte
Como seu recurso não está pronto, você provavelmente sabe quando (aproximadamente) estará disponível e quando o cliente poderá tentar novamente sua solicitação. Isso significa que você pode querer utilizar o cabeçalho Retry-After . Esse cabeçalho é válido com as respostas 503 (Serviço Indisponível), o que significa que todo o site está inativo para manutenção e 3xx (Redirecionamento).
Na minha opinião, 302 (Encontrado) com o cabeçalho Repetir-Após seria a melhor opção, mas não tenho certeza se o campo Local do cabeçalho da resposta pode ser igual ao pedido de URL. É redirecionamento circular, de qualquer maneira.
fonte
409 Conflito
Indica que a solicitação não pôde ser processada devido a um conflito na solicitação, como um conflito de edição no caso de várias atualizações. [Fonte: Wikipedia.]
Isso pode ser apropriado.
Se você não puder atender à solicitação retornando os dados - não será um sucesso. Eu acho que 202 sugere que o servidor enfileirou a solicitação e a atenderá posteriormente. Mas, no seu caso, a solicitação é de dados agora e falhou. Se você tentar novamente mais tarde, é uma solicitação diferente.
Eu acho que você tem um conflito .. você quer os dados .. mas está sendo editado / atualizado. Esse também seria o caso se o Thingy1234 já existisse e tivesse sido baixado com sucesso antes, mas agora estava sendo editado e não estava disponível enquanto a edição estava ocorrendo.
fonte
501 - Não implementado
Exatamente como parece. Um recurso que ainda não foi implementado, mas implica disponibilidade futura.
Aqui está um link para um resumo dos erros 5xx .
fonte