Richardson Maturity Level 3. Per quanto riguarda l'input del modulo

1

In molti modi RMM livello 3 è simile al world wide web, sappiamo dove ogni la risorsa è disponibile con il clic di un link.

In www abbiamo collegamenti, ma abbiamo anche moduli in cui un modulo con method="GET" istruirà il browser a creare una nuova richiesta GET all'azione moduli con tutti i parametri formattati secondo la ben nota sintassi della stringa di query.

C'è qualcosa di analogo a questo nel mondo REST? Vedo che c'è un rfc6570 chiamato modello URI che potrebbe essere alleviato a qualcosa di simile. È possibile progettare un'interfaccia di ricerca RESTful ed essere al livello 3 RMM?

    
posta Esben Skov Pedersen 18.03.2015 - 07:58
fonte

1 risposta

1

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 .

    
risposta data 29.01.2016 - 20:18
fonte

Leggi altre domande sui tag