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 usando l'API per raccogliere informazioni specifiche sul rendimento di tali dispositivi.
In un'istanza, ottengo un elenco di dispositivi disponibili e i relativi identificatori corrispondenti, quindi richiedo più tardi al server per ulteriori dettagli utilizzando tali identificatori (GUID).
Il server restituisce una 500 Internal Server Error
per una query su uno di questi ID. Nella mia applicazione, viene generata un'eccezione e non vedo i dettagli sull'errore. Se analizzo la risposta più da vicino con Postman , posso vedere che il server ha restituito JSON nel corpo che contiene:
errorMessage: "This ID does not exist"
.
Ignora il fatto che il server abbia fornito l'ID per iniziare - questo è un problema separato per lo sviluppatore.
Un'API REST dovrebbe restituire una 500 Internal Server Error
per segnalare che una query fa riferimento a un oggetto che non esiste? A mio avviso, i codici di risposta HTTP dovrebbero fare riferimento 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 sarebbe di proprietà dell'API in questione.
Mi sembra che ci sia 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 del dispositivo viene passato come variabile GET. Un 404 o 500 indica che il percorso ( /restapi/deviceinfo
) non viene trovato o ha provocato un errore del server.
Nel secondo caso, l'ID del dispositivo è parte dell'URL. Sarei più comprensivo di un 404 Not Found
, ma potrei comunque argomentare sulla base delle parti del percorso interpretate come variabili rispetto a endpoint.