Discriminação entre infraestrutura e lógica de negócios ao usar códigos de status HTTP
Estamos tentando criar uma interface REST que permita aos usuários testar a existência de um recurso específico. Vamos supor que estamos vendendo nomes de domínio: o usuário precisa determinar se o domínio está disponível.
Um HTTPGET
combinado com200
e404
os códigos de resposta parecem sensatos à primeira vista.
O problema que temos é discriminar entre uma solicitação atendida com sucesso pelo nosso serviço de pesquisa e uma solicitação atendida sob um comportamento excepcional de outros componentes. Por exemplo:
404
e200
pode ser retornado por proxies intermediários que realmente bloqueiam a solicitação. Isso pode ser devido à configuração incorreta do proxy ou mesmo a infraestrutura externa, como Wifi de cafeteria, usando autenticação ruim baseada em formulários.
Os clientes podem estar usando URLs quebrados. Isso pode ocorrer por descontinuação ou (novamente) por configuração incorreta. Nós poderíamos combater o primeiro através301
, Contudo.
Qual é a melhor prática atual para discriminar entre respostas que foram cumpridas com sucesso contra a intenção do cliente para essa solicitação e respostas servidas por um comportamento excepcional?
O problema é eliminado através do encapsulamento de respostas através do corpo de respostas, pois podemos garantir que elas sejam exclusivas do nosso serviço. No entanto, não parece muito RESTful!