Hypertextový aplikační jazyk - Hypertext Application Language
Hypertext Application Language ( HAL ) je standardní konvence Internet Draft („rozpracovaná“) pro definování hypermedií, jako jsou odkazy na externí zdroje v rámci kódu JSON nebo XML (poslední verze HAL Internet-Draft však vypršela 12. listopadu, 2016.). Standard byl původně navržen v červnu 2012 speciálně pro použití s JSON a od té doby je k dispozici ve dvou variantách, JSON a XML. Dva související typy MIME jsou typ média: application/hal+xml a media type: application/hal+json.
HAL byl vytvořen tak, aby byl snadno použitelný a snadno použitelný v různých doménách tím, že se vyhnul nutnosti ukládat jakékoli požadavky na strukturu projektu. Při zachování tohoto přístupu s minimálním dopadem umožnil HAL vývojářům vytvářet obecné knihovny, které lze snadno začlenit do jakéhokoli rozhraní API, které používá HAL.
API, která přijímají HAL, zjednodušují používání open source knihoven a umožňují interakci s API pomocí JSON nebo XML. Alternativou by bylo vyvinout proprietární formát, který zase nutí vývojáře naučit se používat ještě jiný cizí formát.
Konvence
HAL je strukturován tak, aby reprezentoval prvky založené na dvou konceptech: Zdroje a Odkazy. Prostředky se skládají z odkazů URI , vložených zdrojů, vašich standardních dat (ať už jde o JSON nebo XML) a odkazů jiných než URI. Odkazy mají cílový identifikátor URI a také název odkazu (dále jen „rel“) a také volitelné vlastnosti navržené tak, aby pamatovaly na ukončení podpory a vyjednávání obsahu.
Příklad
Obecné zdroje
{
"_links": {
"self": {
"href": "http://example.com/api/book/hal-cookbook"
}
},
"id": "hal-cookbook",
"name": "HAL Cookbook"
}
Vložený zdroj
{
"_links": {
"self": {
"href": "http://example.com/api/book/hal-cookbook"
}
},
"_embedded": {
"author": {
"_links": {
"self": {
"href": "http://example.com/api/author/shahadat"
}
},
"id": "shahadat",
"name": "Shahadat Hossain Khan",
"homepage": "http://author-example.com"
}
},
"id": "hal-cookbook",
"name": "HAL Cookbook"
}
Sbírky
{
"_links": {
"self": {
"href": "http://example.com/api/book/hal-cookbook"
},
"next": {
"href": "http://example.com/api/book/hal-case-study"
},
"prev": {
"href": "http://example.com/api/book/json-and-beyond"
},
"first": {
"href": "http://example.com/api/book/catalog"
},
"last": {
"href": "http://example.com/api/book/upcoming-books"
}
},
"_embedded": {
"author": {
"_links": {
"self": {
"href": "http://example.com/api/author/shahadat"
}
},
"id": "shahadat",
"name": "Shahadat Hossain Khan",
"homepage": "http://author-example.com"
}
},
"id": "hal-cookbook",
"name": "HAL Cookbook"
}