2012-11-14 1 views
16

Sto appena iniziando a scrivere un'implementazione client per una WebAPI che sto creando attualmente. L'API impiega già HATEOAS, quindi sto scrivendo il client di conseguenza. Sto usando RestSharp come base per il client.HATEOAS Rel - Qualsiasi standard ancora?

Il Cliente viene passato l'URL di base api in fase di costruzione ("https://myapi/start '), che spara una richiesta a ed è quindi superato una serie di URI per altre risorse disponibili - l'autorizzazione (' https://myapi/authorize") e che richiedono token di accesso ("https://myapi/tokens") per autorizzarlo a chiamare in risorse protette sull'API.

La domanda è: ci sono ancora degli standard elaborati per i requisiti rel = "" nell'ipermedia restituita?

risposta

10

credo Hypertext Application Language (HAL) è un progetto di norma - il tentativo di standardizzare questi legami tra ipermedia.

Si tratta di un collegamento alla bozza di specifica JSON http://tools.ietf.org/html/draft-kelly-json-hal-03

La specifica HAL impone la "href" conforme con la "Target IRI" definito nella specifica Linking Web (RFC 5988)

C'è un XML attuazione di HAL utilizzando C# qui https://github.com/tavis-software

Lo stesso repository GitHub sopra contiene anche un esempio di implementazione di Net RFC 5988.

4

Questo IETF proposto standard RFC5988 document descrive i diversi tipi di relazione di collegamento e gli usi proposti. Il suo focus è sulle specifiche dell'intestazione HTTP Link ma include una discussione su altri tipi di relazioni di link. Come alcune (la maggior parte?) RFC, leggerle può lasciarvi più confusi di quando avete iniziato, ma è valsa la pena di questo sforzo a lungo termine. Risponderebbe a cosa mettere tra le virgolette nella tua domanda? Probabilmente no, ma almeno avrai alcuni pensieri per guidare le tue scelte.

+0

Cerco di evitare le RFC, ove possibile;) Solo scherzando, anche se sono contento di non essere l'unico che fa sempre più domande che risposte. – Jammer

2

HAL sembra molto int davvero stancante.

Per chiunque altro esaminando questo argomento o hateoas browser HAL è un must. Check out a sul link qui sotto:

The Hal Browser on Heroku

8

Il Web Linking spec, RFC5988, come è stato sottolineato in un'altra risposta, definisce alcuni diversi tipi di relazioni di collegamento. Ma incarica anche IANA di creare un registro delle relazioni di collegamento e di consentire ulteriori registrazioni delle relazioni di collegamento. Quel registro, che è l' elenco definitivo delle relazioni pubbliche di collegamento, è disponibile presso iana.org/assignments/link-relations e sarà aggiornato man mano che vengono registrate nuove relazioni.

rapporti comunemente utilizzati in API HTTP includono:

  • start (punti da ogni risorsa di nuovo al punto di partenza API)
  • item (punti da una raccolta a un elemento, ad esempio da una pagina utente Twitter a un tweet)
  • collection (inverso item)
  • previous (questi prossimi quattro sono per le risorse impaginati, ad esempio,collezioni o articoli composti da più pagine)
  • next
  • first
  • last
  • create-form (punti da una raccolta a una risorsa che descrive come creare nuovi oggetti da collezione, ad esempio un 'Nuovo elemento' HTML o XForms formano)
  • edit-form (punti da un elemento a un modulo per la modifica di tale elemento, ad esempio un pulsante Modifica Tweet)

Se la tua relazione desiderata è non coperta da qualsiasi cosa in quella lista, la tua relazione deve essere un URI. Inoltre, si consiglia di rendere quell'URI un URL http dereferenziabile in un dominio sotto il proprio controllo in modo che i client API possano cercare la documentazione per la relazione, ad es. "http: //www.example.com/link-relations#tweets". Di solito, il punto di inizio dell'API sarà un elenco di raccolte, ognuna con una relazione di collegamento personalizzata che descrive il tipo di risorsa contenuta in ciascuna raccolta.