H.A.L.

{
"_links": {
"self": { "href": "/orders" },
"curies": [{
"name": "ea",
"href": "http://example.com/docs/rels/{rel}",
"templated": true
}],
"next": { "href": "/orders?page=2" },
"ea:find": {
"href": "/orders{?id}",
"templated": true
},
"ea:admin": [{
"href": "/admins/2",
"title": "Fred"
}, {
"href": "/admins/5",
"title": "Kate"
}]
},
"currentlyProcessing": 14,
"shippedToday": 20,
"_embedded": {
"ea:order": [{
"_links": {
"self": { "href": "/orders/123" },
"ea:basket": { "href": "/baskets/98712" },
"ea:customer": { "href": "/customers/7809" }
},
"total": 30.00,
"currency": "USD",
"status": "shipped"
}, {
"_links": {
"self": { "href": "/orders/124" },
"ea:basket": { "href": "/baskets/97213" },
"ea:customer": { "href": "/customers/12369" }
},
"total": 20.00,
"currency": "USD",
"status": "processing"
}]
}
}

Cool 👍

  • Simple, clair et facile à implémenter.

  • Les "templated links" sont très prometteurs et permettent un découplage entre le code client et l’API.

  • Les "curies" permettent de facilement lier les ressources à leur documentation et pourquoi pas un schéma (mais ce n’est pas défini par H.A.L.).

Pas cool 👎

  • Comme son nom l’indique, H.A.L. se focalise uniquement sur le linking. Le périmètre est donc très limité.

  • La propriété _embedded manque d’intérêt et peut provoquer des conflits entre les propriétés de la ressource et les propriétés _embedded.

  • De nombreuses implémentations mais la plupart ne sont plus maintenues depuis des mois voire des années.