2009-07-24 14 views
17

Qualcuno sa di un'implementazione di un client REST che include il vincolo di Hypermedia as the Engine of Application State (HATEOAS)?Implementazione client REST che abbraccia il vincolo HATEOAS?

Il Sun Cloud API sembra essere un buon candidato, a giudicare dal modo in cui è documentato e a statement by the author per l'effetto che le implementazioni di Ruby, Java e Python erano in lavorazione. Ma finora non ho trovato traccia del codice.

Sto cercando qualsiasi cosa - anche un'implementazione parziale sarebbe utile.

+0

Buona domanda. Non ho trovato nessun framework per scrivere i client RESTful: IE quelli che possono reagire dinamicamente seguendo il principio di HATEOAS. È un peccato perché questa idea è un principio di REST, ma la mancanza di supporto formale e un sacco di equivoci sul REST in generale fanno apparire la comunità frammentata. – jkp

+0

@DawidFerenczy è fuori tema per gli stessi motivi che è qui. Si prega di astenersi dal raccomandare siti che non si conoscono. Lettura consigliata: ** [Cosa succede in Software Engineering (precedentemente noto come Programmer)? Una guida per Stack Overflow] (https://softwareengineering.meta.stackexchange.com/q/7182/31260) ** – gnat

risposta

1

Il principio di progettazione HATEOAS (anche REST è un insieme di principi di progettazione) significa che ogni risorsa deve avere al massimo un singolo URL fisso.

Tutto il resto correlato dovrebbe essere individuabile dinamicamente da tale URL tramite collegamenti "ipermediali".

ho appena iniziato un wikipedia stub here

+0

Rest è un "architettura". – aehlke

+0

Penso che questa risposta e il tuo stub di Wikipedia non siano corretti. Non vedo come o perché un'applicazione REST debba essere letta da un * unico * URL semplice. Qualsiasi URL dato dovrebbe essere bookmarkable (gli URI cool non cambiano) e non vedo come "al massimo un singolo URL fisso" abbia senso. Ciò implica che ci sono risorse che non hanno un URL? Ovviamente no. Non vedo perché una risorsa non possa avere più URI. HATEOAS significa che le transizioni di stato sono realizzate tramite collegamenti ipermediali. Ciò include il passaggio da un deep bookmark a un livello più alto a una risorsa principale. –

+0

Il principio HATEOS è in realtà uno in cui l'URI non è fisso, questo è il punto. Scomporre le assunzioni sull'url del client dall'implementazione reale dei server. – Jammer

6

Restfulie è un framework Ruby #, Java e C, che ha lo scopo di consentire ai clienti di costruzione e server che impiegano hateoas. Non l'ho usato, ma sembra interessante.

Ecco qualche esempio di codice da their java project:

Order order = new Order(); 

// place the order 
order = service("http://www.caelum.com.br/order").post(order); 

// cancels it 
resource(order).getTransition("cancel").execute(); 

Anche in questo caso, non sono sicuro esattamente ciò che questo fa, o come funziona, in pratica, ma sembra intrigante.

0

Rich,

Sto lavorando su un quadro lato client RESTful di Jersey al momento. Una volta che il progetto iniziale è stato stabilizzato un po ', verrà aggiunto alla base del codice Jersey e dopo aver esaminato la community per la revisione dovrebbe alla fine guidare la forma del framework lato client di JAX-RS.

C'è stata una vivace discussione sulla lista degli utenti di Jersey di recente su tutte le cose RESTful.

Dovrebbero essere circa due settimane da ora che il codice diventi pubblico la prima volta che le persone sperimentino.

gen

+0

ci sono novità su questo? – koppor

+0

No, l'approccio è stato fatto nel 2010, sfortunatamente. Spiacente. –

+0

Non le nuove annotazioni @Ref e la nuova classe Link fanno il trucco? http://jersey.java.net/nonav/documentation/latest/user-guide.html#d0e7556 – koppor

2

Il problema con la REST HTTP e hateoas è che non esiste un approccio comune a specificare collegamenti in modo che è difficile seguire i link in quanto la loro struttura potrebbe cambiare da un fornitore di servizi a un altro. Alcuni userebbero <link href="..." /> altri utilizzerebbero la struttura proprietaria per i collegamenti ex. <book href="..." />. Non è come in HTML o atomo il collegamento è parte di uno standard definito.

Un client non può sapere che cosa è un link nella vostra rappresentazione è che non conosce il tipo di supporto a meno che non ci sia una rappresentazione standard o convenzionale di un legame

12

La prima cosa che si dovrebbe guardare è il browser web comune. È lo standard per un cliente che abbraccia HATEOAS (almeno in una certa misura).

Ecco come funziona Hypermedia.E 'così semplice che è quasi doloroso:

  1. si punta il browser per http://pigs-are-cool.org/
  2. il browser carica la pagina HTML, immagini, CSS e così via.
    • A questo punto, l'applicazione (la tua esperienza di navigazione) si trova su un URI specifico.
    • Il browser sta mostrando il contenuto di tale URI
  3. si vede un collegamento nell'applicazione
  4. si fa clic sul collegamento
  5. il browser segue il link
    • a questo punto, il l'applicazione è a un URI diverso
    • Il browser sta visualizzando il contenuto del nuovo URI

Ora, per una breve spiegazione di come i due termini si riferiscono alla esperienza di navigazione web:

  • Hypermedia = pagine HTML con i link incorporati
  • stato dell'applicazione = quello che stai vedendo nel browser in qualsiasi momento.

Così hateoas descrive in realtà ciò che accade in un browser web quando si passa dalla pagina web alla pagina web:

pagine HTML con link incorporati unità ciò che si vede nel browser in qualsiasi punto time

Il termine HATEOAS è solo un'astrazione di questa esperienza di navigazione.

Altri esempi di applicazioni client RESTful includono:

  • RSS feed e lettori. Traggono collegamenti dati dagli utenti
  • La maggior parte dei client di blog AtomPub. Hanno bisogno semplicemente di un URI per un documento di servizi, e da lì scoprono dove caricare immagini e post di blog, ricerche e così via.
  • Probabilmente Google Gadget (e simili), ma sono semplicemente browser in un'altra skin.
  • I crawler Web sono anche clienti RESTful, ma sono un mercato di nicchia.

Alcune caratteristiche del RESTful software client:

  • Il client funziona con con qualsiasi server, dato che si è innescato con un po 'URI e il server risponde con un risultato atteso (ad esempio per un client atomo di blog , un documento di servizi Atom).
  • il cliente sa nulla su come il server progetta i suoi URI diverso da quello che può scoprire a runtime
  • Il cliente conosce abbastanza tipi di media e le relazioni di collegamento per capire che cosa il server sta dicendo (ad es Atom o RSS)
  • Il client utilizza collegamenti incorporati per trovare altre risorse; alcuni automaticamente (come <img src=) alcuni manualmente (come <a href=).

Molto spesso sono guidati da un utente e possono essere correttamente definiti "agenti utente", ad eccezione, ad esempio, di GoogleBot.

+1

Questo è tutto molto buono, ma un browser web restituisce semplicemente l'ipermedia, è un umano che fa tutta la comprensione e decide quali link significa e quali cose su cui fare clic. Che dire di un'implementazione client progettata per essere guidata dal software? –

+0

Questa è assolutamente la grande differenza. Un'implementazione del client guidata dal software deve essere programmata per comprendere i collegamenti (e le forme?) Che trova nelle sue "avventure". Il punto principale è, immagino, per codificare un client verso tipi di media, e non su una struttura URI di un particolare server. – mogsie

+1

È interessante notare che tutti i tuoi "altri esempi" sono client che recuperano dati e li rendono disponibili per essere letti da un essere umano. HATEOS funziona perfettamente sul server per esporre le cose in un formato logico, ma sul lato client, non riesco a vedere cosa offre su RPC. Ho appena finito di codificare il nome dei link che mi interessano, invece di codificare la struttura degli URL di quei link. Come mi aiuta il tipo di media? Non conosco il tipo di supporto finché non recupero il collegamento. –

0

RestTemplate di Spring Framework può essere utilizzato per raggiungere lo scopo. Controlla questo article per i dettagli.

Problemi correlati