Ero in un colloquio di lavoro che dimostrava un'API RESTful in Flask quando un argomento si rompeva sull'API. L'intervistatore ha affermato che l'URL per l'aggiunta di un nuovo utente ( /users/new
) non è corretto REST.
Il mio endpoint dell'API era simile a quello riportato di seguito:
GET /users # get all users
GET /users/1 # get user 1
DELETE /users/1 # delete user 1
POST /users/new # add new user
La sua tesi
- Dovrebbe essere
/users
per coerenza con il resto dell'API. - Dovrebbe essere
/users
perché l'operazione è nel metodo HTTP stesso (POST
) quindinew
non è coerente.
La mia tesi
- L'URL può essere qualsiasi cosa purché punti a una risorsa e che sia più una cosa stilistica.
- RubyOnRais utilizza questa convenzione in modo che non possa essere completamente sbagliata.
In retrospezione ottengo la validità della sua argomentazione. Tuttavia, contraddice ciò che sta facendo uno dei framework web più popolari. Esiste un consenso su come può essere un URL e cosa no in una API RESTful? In questo caso è sbagliato un intero framework web?
Un altro modo di vedere questo è che /users
è un "multiplo di utenti" mentre /users/x
corrisponde a "singolo utente", nel qual caso la convenzione che ho usato ha senso.