Esta é uma questão conceitual.
Tenho um aplicativo cliente (móvel) que precisa oferecer suporte a uma ação de login em um serviço da web RESTful. Como o serviço da web é RESTful, isso significa que o cliente aceita um nome de usuário / senha do usuário, verifica esse nome de usuário / senha com o serviço e, em seguida, lembra apenas de enviar esse nome de usuário / senha com todas as solicitações subsequentes.
Todas as outras respostas neste serviço da web são fornecidas em formato JSON.
A questão é, quando eu consulto o serviço da web simplesmente para descobrir se um determinado nome de usuário / senha é válido, o serviço da web deve sempre responder com dados JSON informando se foi bem ou malsucedido ou se ele deve retornar HTTP 200 em credenciais boas e HTTP 401 com credenciais incorretas.
O motivo de minha pergunta é que alguns outros serviços RESTful usam 401 para credenciais incorretas, mesmo quando você está apenas perguntando se as credenciais são válidas. No entanto, meu entendimento das respostas 401 é que elas representam um recurso ao qual você não deveria ter acesso sem credenciais válidas. Mas o recurso de login DEVE ser acessível a qualquer pessoa, porque todo o propósito do recurso de login é informar se suas credenciais são válidas.
Dito de outra forma, parece-me que um pedido como:
myservice.com/this/is/a/user/action
deve retornar 401 se credenciais incorretas forem fornecidas. Mas um pedido como:
myservice.com/are/these/credentials/valid
nunca deve retornar 401 porque esse URL específico (solicitação) está autorizado com ou sem credenciais válidas.
Eu gostaria de ouvir algumas opiniões justificadas de uma forma ou de outra sobre isso. Qual é a forma padrão de lidar com isso, e a forma padrão de lidar com isso é logicamente apropriada?