Tengo el siguiente punto final:
a/{id}/b
y desea crear una solicitud de b
envío POST
. Si a
con dado {id}
no se encuentra, ¿debería responder con 404 NOT_FOUND
o tal vez con 409 CONFLICT
?
Es para manejar sin formato a/{id}
, el truco es que aquí se utiliza un subrecurso.
rest
api
api-design
http-request
Ópalo
fuente
fuente
Respuestas:
404 NOT FOUND
parece la respuesta adecuada, porque el recurso con este ID no existe. Es muy claro de entender y está esperando la misma respuesta sia/{id}
se llama.409 CONFLICT
No 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
fuente
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.Además de la respuesta de @ Dherik.
Los URI son identificadores , por lo que debemos tener en cuenta que (
/a/{id}/b
es 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 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á
fuente