Skip to main content
Drupal - REST API v Drupalu 8

Stabilní verze Drupalu 8 už je tady s námi relativně dlouhou dobu. Tato verze již v základu obsahuje poměrně bohatou funkcionalitu. Jednou zse zajímavých možností, které Drupal 8 v základu poskytuje, je možnost tvorby RESTového API.

REST API

Nechci se tady pouštět do nějakých složitých definic co je a není REST API, takže spíše jenom tak pro představu. REST (Representational State Transfer) je styl architektury, který se používá při vývoji webových služeb. REST API je obvykle používáno v kombinaci s HTTP protokolem.

Drupal 8

Do Drupalu 7 bylo možné také vytvářet REST API, ale byla k tomu potřeba vlastního modulu nebo modulu třetí strany. Od Drupalu 8 jsou k dispozici přímo v jádru systému moduly pro tvorbu REST API. Když se podíváte mezi moduly v Drupalu 8, jsou ve výchozím stavu dostupné 4 moduly pro práci s webovými službami (viz následující obrázek). 

 

Drupal 8 - Web Services Modules


Ukázka modulů pro webové služby v Drupalu 8

 

Pokud chcete vyzkoušet tvorbu jednoduchého API, vystačíte si pouze s moduly RESTful Web Services s Serialization. Trošku matoucí je, že po zapnutí modulu se na první pohled vůbec nic nestane, takže není úplně jasné, co by mělo být dalším krokem, proto bude následovat jednoduchá ukázka tvorby REST API.

REST UI

Vzhledem k tomu, že Drupal je známý tím, že v něm lze spoustu věcí „naklikat“, tvorba modulu pro nastavení REST API pomocí uživatelského rozhraní na sebe nenechala dlouho čekat. Tímto modulem je právě REST UI. Tento modul je možné stáhnout ze stránek Drupalu. Po zapnutí tento modul umožňuje nastavovat povolené operace v rámci jednotlivých API. Ukázka REST UI je na následujícím obrázku.

Drupal 8 - REST UI

Ukázka modulu REST UI

Ukázka tvorby REST API v Drupalu 8

Následující příklad ukáže, jak vytvořit jednoduché REST API pro zobrazení seznamu článků a také zobrazení detailu článků.

1) Obsah

Ze všeho nejdřív je potřeba vytvořit obsah, který chceme publikovat pomocí API. Já v následujícím příkladu použiji beze změn výchozí typ obsahu „Article“, který je v Drupalu 8 dostupný ve výchozím stavu. Vytvořím 3 ukázkové články. Přidání prvního z nich je znázorněno na následujícím obrázku.

Drupal 8 - add article

Ukázka přidání článku

 

Po přidání všech tří článků by měl vypadat výpis obsahu podobně jako na následujícím obrázku.


Přehled přidaných článků

2) Výpis článků

Pokud mám vytvořený obsah, který chci publikovat, tak je dalším krokem tvorba view, pomocí kterého můžu daný obsah konzumovat. Views modul je v Drupalu 8 součástí jádra, takže není potřeba přidávat žádný další modul. Stačí v menu zvolit Structure > Views > Add new view. Zde je důležité zvolit typ obsahu, který chceme vypsat. Další důležitou věcí je zvolit, že chci REST export a také zvolit adresu, pod kterou bude dostupný. V tomto příkladu bude dostupný na adrese api/v1/articles. Popsané nastavení je znázorněno na následujícím obrázku.

Ukázka tvorby view pro REST API

 

Pokud přidané view uložíte a neuděláte nic jiného, tak bude pod danou adresou dostupný výpis článku ve formátu JSON (viz následující obrázek). 

Ukázka JSONu s výchozím nastavením

 

Problém je v tom, že ve výchozím stavu se vypisují celé entity a to včetně informací, jakou jsou verze článku, uuid atd., což jsou informace, které nemusí být úplně potřeba, pokud chceme například články zobrazit v mobilní aplikaci. Proto je dobré v nastavení view změnit formát z Entity na Fields. Poté je možné specifikovat přímo položky ze článku, které máme zájem přes API vystavit. Často je také dobré v nastavení fieldu zrušit volbu výpisu jako odkazu, jinak se bude například titulek článku zobrazovat jako HTML odkaz.

Pokud chci tedy ve výpisu článku publikovat titulek článku a tagy, tak by nastavení view mohlo vypadat například jako na následujícím obrázku.


Ukázka nastavení view pro výpis článků s určitými fieldy

 

Pokud se podíváte teď na výpis článků, bude vypadat nějak jako na následujícím obrázku (vpravo stejný výpis akorát zformátovaný).


Ukázka výsledného JSONu při specifikaci fieldů

3) Detail článku

V předchozí části byl nastaven výpis článků, ale v drtivé většině případů je nutné načítat i detaily jednotlivých článků. Možnost číst detaily článku lze řešit ve Views pomocí kontextuálního filtru. Pravděpodobně nejrychlejší způsob jak vytvořit view pro detail článků je naklonování view pro výpis článků (viz následující obrázek).


Ukázka naklonování view pro zobrazení detailu článku

 

Po naklonování view pro výpis článku je potřeba udělat pár úprav.

  • Změnit adresu pro detail článku a použití placeholderu pro kontextuální filtr.
  • Přidat kontextuální filtr.
  • Volitelně je možné přidat/odebrat fieldy, které se mají zobrazit u detailu článku (já jsem přidal text článku).

Popsané změny jsou znázorněné na následujícím obrázku.
 


Ukázka nastavení view pro výpis detailu článku

 

Přidání a nastavení kontextuální filtru je znázorněné na následujícím obrázku. Je potřeba přidat field ID (viz obrázek vlevo). Pro fungování by nemělo být potřeba cokoliv měnit přímo v nastavení kontextuálního filtru (viz obrázek vpravo).
 


Ukázka přidání a nastavení kontextuální filtru pro výpis detailu článku

 

Pokud si nyní zobrazíte detail článku, bude vypadat podobně jako na následujících obrázcích.


Ukázka JSONu pro detail prvního a druhého článku

 

Závěr

Z předchozí ukázky je myslím pěkně vidět, že tvorba REST API v Drupalu 8 je relativně jednoduchá a rychlá. Nutno dodat, že ukázka zahrnovala pouze ten nejjednodušší příklad. REST API v Drupalu 8 umožňuje samozřejmě nejenom konzumování, ale i tvorbu a úpravu obsahu. K nějakému složitějšímu příkladu použití se snad dostaneme někdy příště.