A REST API must not define fixed resource names or hierarchies (an obvious coupling of client and server). Servers must have the freedom to control their own namespace. Instead, allow servers to instruct clients on how to construct appropriate URIs, such as is done in HTML forms and URI templates, by defining those instructions within media types and link relations.
Fielding - 2008 (Enfasi aggiunta).
La cartina tornasole è, può il server pubblicare un nuovo modello URI senza rompere i client?
Lavorare attraverso l'analogico WWW ...
Come facciamo a tradurre in linguaggio HTML un POST nello stile di riposo? Gli input del modulo vengono inviati al server Web con un tipo di supporto specifico (per impostazione predefinita:
application / x-www-form-urlencoded). Quindi quali sono i parametri di input? Sono descrizioni di vincoli aggiuntivi sui dati che il server si aspetta. In altre parole, sono analoghi a un tipo di media personalizzato (application / prs.esben.user-search-form + urlencoded, forse).
Quindi il tuo hypermedia descrive una ricerca come POST del tuo tipo di media personalizzato su una risorsa. Qual è il modo RESTful per il server di gestire questa richiesta?
Un'implementazione banale sarebbe quella di utilizzare i dati codificati per identificare una nuova risorsa che rappresenta il set di risultati della query e reindirizzare l'agente utente a tale nuova risorsa. Quindi POST / search (color = blue) reindirizza a / search? Color = blue, e quindi l'user agent segue quel reindirizzamento per ottenere i risultati. Questo recupero delle risorse è sicuro e può essere recuperato da una cache anziché spedire il messaggio fino al server. Quindi tutto è buono in questa implementazione.
Che aspetto ha questa implementazione? È solo una trasformazione della rappresentazione della ricerca (nel tipo di supporto personalizzato) in un identificatore di risorsa.
Cosa cambia quando usiamo GET, piuttosto che POST, come metodo del modulo? In realtà, stiamo solo trasferendo l'esecuzione di quel codice dal server al browser.
Come funziona? Lo stato dell'applicazione viene consegnato al browser utilizzando il tipo di supporto text / html. Proprio come la comprensione condivisa di questo tipo di media dice al browser che
<form method="post" ...>
significa "questo è un collegamento con un tipo di supporto personalizzato, descritto dai seguenti vincoli", così da fare
<form method="get" ...>
indica al browser che "questo è un collegamento che si basa sulla costruzione uri personalizzata, descritta dai seguenti vincoli"
Questa è la risposta per RMM-3; la descrizione del tuo tipo di media include una specifica per come gli identificatori costruiti sono descritti nell'ipermedia (es .: il modello, ma anche come (se) i parametri del modello sono vincolati).
Per un esempio di questo, dai un'occhiata alle specifiche di HAL .