4
respostas

Erro 404 ou 204

Se é NoContent, deveriamos retornar 204. O recurso existe, não podemos tratar o dado(id) como um recurso, apesar de a URL apontar para um recurso, o ID da Médico não pode ser considerado como um recurso, mas como dado de um possível médico. Observo essa interpretação em diversas APIS. No entando, se estou errado, por favor, me explique.

4 respostas

Olá Edson!

Para explicar de uma forma didática, o id é um identificador único para o recurso que você está buscando. O status 204 é utilizado para processamentos que não retornam valor, por exemplo um delete com sucesso. Quando você busca um recurso por ID, o client "sabe" o que está buscando e não encontrou, por isso é um client error, ou seja, o client informou um id inválido (que não existe).

Mais detalhes na doc: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/204 https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/404

Olá Gabriel!

É exatamente isso que estou questionando. Vamos pensar o seguinte:

Recurso = Fórmula ou caminho prefixado para relizar alguma tarefa

Conteúdo = Dados retornados com os "parâmetros" passados.

Observe, estão misturando as coisas. Uma coisa é o caminho prefixado na aplicação e a outra coisa é um fragmento do conteúdo, variável e portanto não documentado(exceto pelo apelido), enviado como parâmetro de localização do conteúdo.

https://www.duvidalegal.com/api/alunos <- esse seria o recurso /id <- esse seria o identificador do conteúdo desejado

O recurso é o mecanismo e o parametro a chave para recuperar os dados... se não retorna dados porque o id informado não existe, por ser um parâmetro, então, acredito que a resposta deveria ser um 400(Bad request) ou 412(Precondition failed) ou 428 (Precondition required) ou , amigavelmente, o 204(NoContent). Não?

O que não está entrando na minha cabeça é o fato de dizerem que a vitamina ou a ausência dela, é a mesma coisa que o liquidificador, entende? São coisas distintas.

Olá Edson!

O 204, neste caso, não me parece uma resposta correta para o client, uma vez que a request realmente falhou ao encontrar um recurso específico e caracteriza um client error, o que nos leva a família 4xx e não 2xx (sucesso). (link)

The HTTP 204 No Content success status response code indicates that a request has succeeded, but that the client doesn't need to navigate away from its current page.

This might be used, for example, when implementing "save and continue editing" functionality for a wiki site. In this case a PUT request would be used to save the page, and the 204 No Content response would be sent to indicate that the editor should not be replaced by some other page.

A 204 response is cacheable by default (an ETag header is included in such a response).

O 400 é uma resposta genérica para qualquer erro da família 4xx, então estaria correto retornar ele, mas é não é nada específico. (link)

The HyperText Transfer Protocol (HTTP) 400 Bad Request response status code indicates that the server cannot or will not process the request due to something that is perceived to be a client error (for example, malformed request syntax, invalid request message framing, or deceptive request routing).

412 está mais relacionado com uma pré-condição de acesso ao recurso, o que não parece ser o caso. Nesse caso, o recurso existe, mas o client não tem a pré-condição necessária para acessar este recurso. (link)

The HyperText Transfer Protocol (HTTP) 412 Precondition Failed client error response code indicates that access to the target resource has been denied. This happens with conditional requests on methods other than GET or HEAD when the condition defined by the If-Unmodified-Since or If-None-Match headers is not fulfilled. In that case, the request, usually an upload or a modification of a resource, cannot be made and this error response is sent back.

Quanto ao 428, não existe uma pré-condição para acessar o recurso que não seja o próprio parâmetro enviado (id) existir, ou seja, poderia considerar este status se o ID não fosse informado (na minha experiência, geralmente retorna 400 nestes casos). (link)

The HTTP 428 Precondition Required response status code indicates that the server requires the request to be conditional.
Typically, this means that a required precondition header, such as If-Match, is missing.
When a precondition header is not matching the server side state, the response should be 412 Precondition Failed.

O 404 indica que o server não encontrou o recurso específico pesquisado, por isso faz sentido nesse seu cenário. (link)

The HTTP 404 Not Found response status code indicates that the server cannot find the requested resource. Links that lead to a 404 page are often called broken or dead links and can be subject to link rot.

A 404 status code only indicates that the resource is missing: not whether the absence is temporary or permanent. If a resource is permanently removed, use the 410 (Gone) status instead.

Enfim, está consolidada essa forma de pensamento, vou me render, mesmo pensando diferente. rsrsrs

Obrigado, Gabriel!