Estoy trabajando con una API REST que reside en un servidor que maneja datos para una multitud de dispositivos IoT.
Mi tarea es consultar al servidor utilizando la API para recopilar información de rendimiento específica sobre dichos dispositivos.
En un caso, obtengo una lista de dispositivos disponibles y sus identificadores correspondientes, luego consulto al servidor para obtener más detalles utilizando esos identificadores (GUID).
El servidor está devolviendo una 500 Internal Server Error
consulta sobre uno de esos ID. En mi aplicación, se produce una excepción y no veo detalles sobre el error. Si examino la respuesta más de cerca con Postman , puedo ver que el servidor devolvió JSON en el cuerpo que contiene:
errorMessage: "This ID does not exist"
.
Para empezar, ignore el hecho de que el servidor proporcionó la ID; ese es un problema separado para el desarrollador.
¿Debería una API REST devolver a 500 Internal Server Error
para informar que una consulta hace referencia a un objeto que no existe? En mi opinión, los códigos de respuesta HTTP deberían referirse estrictamente al estado de la llamada REST, más que a la mecánica interna de la API. Esperaría un 200 OK
con la respuesta que contiene el error y la descripción, que sería propiedad de la API en cuestión.
Se me ocurre que hay una diferencia potencial en las expectativas dependiendo de cómo se estructura la llamada REST.
Considere estos ejemplos:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
En el primer caso, la ID del dispositivo se pasa como una variable GET. Un 404 o 500 indicaría que la ruta ( /restapi/deviceinfo
) no se encuentra o da como resultado un error del servidor.
En el segundo caso, la ID del dispositivo es parte de la URL. Sería más comprensivo de a 404 Not Found
, pero aún podría argumentar en función de qué partes de la ruta se interpretan como variables frente a puntos finales.