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):
A classe 5xx (Erro do servidor) do código de status indica que o servidor está ciente de que errou ou é incapaz de executar o método solicitado . Exceto ao responder a uma solicitação HEAD, o servidor DEVE enviar uma representação contendo uma explicação da situação de erro e se é uma condição temporária ou permanente.
Nota
- "errou ou é incapaz de executar a solicitação": apesar do título de "Erro no servidor", eles não são apenas para erros do servidor.
- " temporário ou permanente": esses códigos são adequados para recursos temporariamente indisponíveis, como o seu.
Dos códigos disponíveis, eu diria 503, "Serviço indisponível" foi o mais adequado:
O código de status 503 (Serviço Indisponível) indica que o servidor atualmente não pode lidar com a solicitação devido a uma sobrecarga temporária ou manutenção agendada, que provavelmente será aliviada após algum atraso. O servidor PODE enviar um campo de cabeçalho Repetir-Após ... para sugerir uma quantidade adequada de tempo para o cliente aguardar antes de repetir a solicitação.
Nota:
- "provavelmente será aliviado após algum atraso": verdadeiro para o seu caso.
- "sobrecarga temporária": não é pedanticamente verdade para o seu caso. Mas, pode-se argumentar, se o seu servidor fosse muito mais rápido, o processamento em lote já teria sido feito quando o cliente fez a solicitação, portanto, é uma espécie de "sobrecarga": o cliente está solicitando recursos mais rapidamente do que o servidor pode fazer eles disponíveis.
- A nova tentativa é adequada para o seu serviço, portanto, sua resposta deve incluir um
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:
um cliente DEVE entender a classe de qualquer código de status, conforme indicado pelo primeiro dígito, e tratar um código de status não reconhecido como equivalente ao código de status x00 dessa classe
Os clientes tratariam seu próprio código de status como 500, "Erro interno do servidor" , o que não seria correto.