Sto lavorando con un'API REST che risiede su un server che gestisce i dati per una moltitudine di dispositivi IoT.
Il mio compito è interrogare il server utilizzando l'API per raccogliere informazioni specifiche sulle prestazioni di tali dispositivi.
In un caso, ottengo un elenco dei dispositivi disponibili e dei relativi identificatori, quindi in seguito eseguo una query sul server per ulteriori dettagli utilizzando tali identificatori (GUID).
Il server sta restituendo un 500 Internal Server Error
per una query su uno di quegli ID. Nella mia applicazione, viene generata un'eccezione e non vedo i dettagli sull'errore. Se esamino la risposta più da vicino con Postman , vedo che il server ha restituito JSON nel corpo che contiene:
errorMessage: "This ID does not exist"
.
Ignora il fatto che il server ha fornito l'ID per cominciare - questo è un problema separato per lo sviluppatore.
Un'API REST dovrebbe restituire a 500 Internal Server Error
per segnalare che una query fa riferimento a un oggetto che non esiste? Secondo me, i codici di risposta HTTP dovrebbero riferirsi rigorosamente allo stato della chiamata REST, piuttosto che alla meccanica interna dell'API. Mi aspetterei un 200 OK
con la risposta contenente l'errore e la descrizione, che sarebbero proprietari dell'API in questione.
Mi viene in mente che esiste una potenziale differenza di aspettativa a seconda di come è strutturata la chiamata REST.
Considera questi esempi:
http://example.com/restapi/deviceinfo?id=123
http://example.com/restapi/device/123/info
Nel primo caso, l'ID dispositivo viene passato come variabile GET. Un 404 o 500 indicherebbe che il percorso ( /restapi/deviceinfo
) non è stato trovato o ha provocato un errore del server.
Nel secondo caso, l'ID dispositivo fa parte dell'URL. Sarei più comprensivo di un 404 Not Found
, ma potrei ancora discutere sulla base di quali parti del percorso sono interpretate come variabili rispetto a endpoint.