Estoy creando una API RESTful que procesará una serie de interacciones del usuario, incluida la realización de pedidos con tarjetas de crédito almacenadas.
En el caso de un pedido exitoso, devuelvo un 200 OK, y en el caso de que la solicitud de pedido esté mal formada o no sea válida, devuelvo un 400 Bad Request. Pero, ¿qué debo devolver si hay algún problema durante el procesamiento real del pedido?
- El cliente envía un pedido al servidor para un recurso de usuario. Si el usuario no existe, se devuelve 404 Not Found.
- Se valida el formato y la información del pedido. Si no es válido, se devuelve 400 Bad Request.
- Se procesa el pedido. Si el pedido tiene éxito, se devuelve un 201 Created para el pedido. Si se encuentra un error inesperado, se devuelve un 500 Server Error.
El último paso es el problema: ¿qué devuelvo si el pedido no se completa por algún otro motivo? Los posibles escenarios podrían incluir:
- Producto agotado
- Se alcanzó el límite máximo de pedidos del usuario
- Error en la transacción de la tarjeta de crédito (fondos insuficientes, etc.)
Esto no parece que sea apropiado ni para 400 ni para 500. En todo caso, podría verlo como 400 si no hay un código mejor: la solicitud no era válida según las reglas comerciales. Simplemente no parece exacto.
Editar: También encontré esta discusión existente sobre el mismo tema. Todas las respuestas allí parecen apuntar al uso de códigos de estado para este tipo de infracción, con cierta discusión entre el uso de la extensión 400, 409 o 422.