http - mdn - rest status error




Como escolho um código de status HTTP na API REST para “Não pronto ainda, tente novamente mais tarde”? (6)

Eu não quero retornar 404; isso é para coisas que não existem.

O URL não corresponde a um pedido de uma coisa.

http://server/thingyapi/thingyblob/1234

O cliente está solicitando um thingyblob, que não existe. Se existisse, você daria a eles.

404

Estou desenvolvendo uma API RESTful em que http://server/thingyapi/thingyblob/1234 retorna o arquivo (também conhecido como "blob") associado a thingy # 1234 para download. Mas pode ser que a solicitação seja feita de cada vez que o arquivo não exista no servidor, mas definitivamente estará disponível mais tarde. Há um processo em lote no servidor que gera todos os blobs para todas as coisinhas. Thingy 1234 já existe e seus dados, além do blob, já estão disponíveis. O servidor ainda não gerou o problema do 1234.

Eu não quero retornar 404; isso é para coisas que não existem. Isso é uma coisa que existe, mas seu blob ainda não foi gerado. Um tipo de vídeo do YouTube que está "processando". Eu não acho que os códigos de redirecionamento seriam adequados; não há "outro" URL para tentar.

Qual é o código de status HTTP correto para retornar nesse caso?


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 da Wikipedia.]

Isso poderia ser apropriado.

Se você não puder atender a solicitação retornando os dados, isso não será um sucesso. Eu acho que 202 sugere que o servidor tenha colocado a solicitação na fila e ela atenderá a solicitação mais tarde. Mas no seu caso, a solicitação é para dados agora e falhou. Se você tentar novamente mais tarde, será uma solicitação diferente.

Eu acho que você tem um conflito .. você quer os dados .. mas está sendo editado / atualizado. Este também seria o caso se o Thingy1234 já existisse e tivesse sido baixado com sucesso antes, mas agora estava em processo de edição, não estava disponível enquanto a edição estava ocorrendo.


Como seu recurso não está pronto, você provavelmente sabe quando (aproximadamente) estará disponível e quando o cliente poderá repetir sua solicitação. Isso significa que você pode querer utilizar o cabeçalho Retry-After . Este cabeçalho é válido com 503 (Serviço indisponível), o que significa que o site inteiro está inativo para manutenção e 3xx respostas (Redirecionamento).

Na minha opinião 302 (Found) com o cabeçalho Retry-After seria a melhor opção, mas não tenho certeza se o campo Location do cabeçalho de resposta pode ser igual ao URL de solicitação. É um redirecionamento circular, de qualquer forma.


Eu acho que o 423 - Locked pode ser usado para este propósito:

O código de status 423 (Bloqueado) significa que o recurso de origem ou destino de um método está bloqueado. Esta resposta deve conter um código de pré-condição ou pós-condição apropriado, como 'lock-token-submitted' ou 'no-conflicting-lock'.


Outra opção: 503 - Service Unavailable .


Sugiro 202 - Accepted . Da documentation :

A solicitação foi aceita para processamento, mas o processamento não foi concluído. [...] Sua finalidade é permitir que um servidor aceite uma solicitação para algum outro processo (talvez um processo orientado em lote que é executado apenas uma vez por dia)







http-status-codes