¿Cuál es un código de estado de respuesta adecuado para POST cuando no se encuentra el recurso principal?

Respuestas:

15

404 NOT FOUNDparece la respuesta adecuada, porque el recurso con este ID no existe. Es muy claro de entender y está esperando la misma respuesta si a/{id}se llama.

409 CONFLICTNo me parece la mejor opción, porque en su ejemplo devolverá un 409 cuando no se encontró el recurso principal :).

Pero recuerda que lo más importante es ser consistente en tu API

Dherik
fuente
Estoy de acuerdo. Si intentara escribir en una carpeta que no existía, ¿es un conflicto o un error de carpeta faltante? Me parece más intuitivo de esta manera.
Neil
¿Una "carpeta" te refieres a una ruta que no existe?
Dherik
Me refiero a una carpeta, como en el sistema de archivos.
Neil
¿Puedes detallar el escenario? Porque depende Si la carpeta se esperaba para el servidor y (por alguna razón) no está allí, creo que este es un error del servidor (5xx), no un error del cliente (4xx). Si el cliente pasó el valor de esta carpeta al recurso (como el id), es 404. Pero si la carpeta se pasó en el cuerpo, esto podría ser cualquier otra cosa (412, 422 ... algo que represente "error de validación: la carpeta sí no existe"). Es una buena pregunta para hacer y discutir.
Dherik
Si le pide al servidor un archivo con la ruta /nonexistent/help.html, y la carpeta / nonexistent no existe, solo hay una respuesta clara a esto. ¡Archivo 404 no encontrado! Incluso podría existir un /home/help.html, y la respuesta no sería diferente. Esta es una aplicación REST claramente, pero no veo ninguna razón por la cual la lógica cambiaría. El padre debe existir primero.
Neil
4

Además de la respuesta de @ Dherik.

Los URI son identificadores , por lo que debemos tener en cuenta que ( /a/{id}/bes un identificador). El URI no tiene sentido para la WWW, y tampoco lo es para el cliente HTTP.

404 es la respuesta correcta . En esencia, el servidor está respondiendo

No encontré ningún recurso con esa identificación. Recurso no encontrado 1

No importa si el recurso que falta es padre o hijo .

Nosotros, los desarrolladores, vemos jerarquías y rutas en el URI, pero los clientes HTTP no. En otras palabras, HTTP solo debe ser interpretado por clientes HTTP pero no por humanos (desarrolladores, usuarios finales, etc.).

En caso de dudas, no pregunte qué código tiene sentido para usted (humano). Pregunte, qué código tiene sentido para el cliente HTTP. ¿Cómo quiere que se comporte el cliente HTTP?

¿Por qué? Debido a que algún código de estado hace que estos clientes realicen ciertas operaciones. Por ejemplo, 302 . Este código generalmente hace que los navegadores web redirijan a una ubicación específica (URI) informada en los encabezados de respuesta.

Puede que este no sea su caso, pero es importante tener en cuenta. En última instancia, los códigos de estado HTTP están dirigidos a clientes HTTP. No a nuestras aplicaciones. No a las personas.


1: 409 rara vez se implementa como error de navegación. Por lo general, implica la ejecución de operaciones remotas (eliminar, actualizar, nuevas, etc.). Pero el URI debería existir. De lo contrario, 404 prevalecerá

Laiv
fuente