WordPress REST API – jak začít

Dneska to bude zase trochu odbornější, ale myslím si, že technologie jménem REST API je něco, co většina z vás takňák intuitivně zná, ale možná nevíte, za jaký konec to vzít a co s tím vlastně dělat. Tak mi dovolte, abych vám ukázal, co jsem zatím pochopil a využil já.

Obsah

  1. Co je REST API
  2. Jak REST API ve WordPressu funguje
  3. Autorizace
  4. K čemu využít REST API?
  5. Na co si dát pozor

Co je REST API

Slovo REST znamená Representational State Transfer a slovo API Application Programming Interface. API je tedy nástroj pro komunikaci mezi aplikacemi a REST je určité norma obsahující nástroje, pravidla a definice, jak ta komunikace má probíhat. Přehledné vysvětlení problematiky najdete např. na webu https://restfulapi.net a samozřejmě stručně taky na Wikipedii v článku o REST. REST API je jednou z možností komunikace mezi aplikacemi, další je třeba SOAP nebo starší XML-RPC, které v WordPressu ještě také zůstává.

WordPress má REST API integrované do jádra od verze 4.7 vydané v prosinci 2016, předtím byla funkce vyvíjena jako plugin. Existuje k tomu srozumitelná a dostatečná dokumentace na portálu pro vývojáře.

Pozor, nepleťte si REST API s webhooky! Třeba WooCommerce je má už velmi dlouho, je to adresa skriptu, který v url přijímá argumenty a nějakým způsobem je zpracuje. Princip je podobný, ale webhook je ryze individuální věc, která nemá standard.

Jak REST API ve WordPressu funguje

API je definované pomocí přístupových bodů, což jsou speciální adresy. Začínají na slugu /wp-json/, protože REST API ve WordPressu vrací data ve formátu JSON (jiná API používají XML). Na daném end-pointu najdete strukturovaný dokument a v něm název webu, adresu, faviconu a hlavně seznam všech namespaces, tedy jmenných prostorů. To je podnabídka funkcí, které lze využít. Podle nich zjistíte, které pluginy na webu fungují, protože mnoho pluginů „má API“, tedy doplňuje svůj jmenný prostor (podle funkcí, které nabízejí).

Jmenné prostory

Jádro WordPressu

  • wp/v2
  • wp-block-editor/v1
  • wp-site-health/v1
  • oembed/1.0

Vybrané pluginy

  • complianz/v1, contact-form-7/v1
  • elementor-pro/v1, elementor/v1, elementskit/v1/layout-manager-api, elementskit/v1/megamenu, elementskit/v1/my-template, elementskit/v1/widget-builder, elementskit/v1/widget/mailchimp
  • jetpack/v4, kb-activecampaign/v1, kb-mailerlite/v1
  • mc4wp/v1, rankmath/v1, yoast/v1, redirection/v1, wordfence/v1

WooCommerce

  • wc-admin, wc-analytics
  • wc-facebook/v1, wc-telemetry, wc/store, wc/store/v1, wc/v1, wc/v2, wc/v3

Routy a metody

Cesta k metodám, které jsou definované v každém jmenném prostoru, vede přes route, tedy strukturu vyjádřenou pomocí URL. Potřebujete vědět, kam poslat požadavek, aby se vám vrátila data. Je to vlastně nápověda se seznamem všech možných požadavků (metod) a jejich argumentů (ty jsou uvedeny hlouběji ve struktuře).

Požadavek může být některý z typů, který shrnuje zkratka CRUD:

  • create (metoda POST nebo PUT),
  • read (metoda GET),
  • update (metoda POST)
  • delete (metoda POST)

Tím pracujete s daty uvnitř webu – získáváte výpis, upravujete data, vytváříte nová nebo je mažete. Jak jistě vyplývá ze situace, nepotřebujete k tomu žádnou grafickou aplikaci WordPressu, stačí její jádro, které umí obsloužit tyto dotazy. A již jsme u možností

  • integrace s jinými aplikacemi,
  • vytvoření vlastní mobilní aplikace,
  • spuštění headless webu (administrace je oddělená od frontendu)

Argumenty dotazu vidíte na následujícím obrázku. Je také vidět, že jde o metodu GET (tzn. získání dat za pomoci argumentů v url).

Výpis pěti článků ve stavu pro budoucí vydání už vrací chybu autorizace:

https://wp-admin.cz/wp-json/wp/v2/posts?per_page=5&status=future

Je to pochopitelné, to už je intimní informace webu, to přece nechceme. Z toho vyplývá, že přístup k datům kopíruje nastavení práv celého systému.

Data lze do systému i vkládat, k tomu slouží metoda POST. Tu ale už nemůžete simulovat v prohlížeči, potřebujete software, který to dokáže a lze ho snadno obsluhovat. Oblíbil jsem si  doplněk Postcode do VS Code, kde často pracuji. Abyste požadavky mohli posílat, potřebujete kredence, neboli autorizovaný přístup. Naštěstí už poměrně dlouho existují hesla aplikací, tedy přístup pro aplikačního uživatele, který se nemůže přihlásit do WordPressu, ale je autorizován, aby mohl nakládat s daty podle práv, které mají jednotlivé jmenné prostory (=pluginy).

Autorizace

Vytvořte si uživatele pro automatizovaný přístup (takže nějaké vtipné robotické jméno), nastavte mu obtížné heslo, to ale nebude potřeba. Nyní v jeho profilu zadejte název pro aplikační heslo a ono se vám v dalším kroku vygeneruje. Jak vám tam WordPress píše, už ho neuvidíte, takže si ho poznačte, nebo prostě vygenerujte znovu.

A nyní ten Postcode nebo jiný nástroj pro práci s dotazy (je jich víc). Pro provedení dotazu potřebujete mít route (tj. cílovou url) včetně jejích argumentů, přihlašovací jméno a aplikační heslo – ne přihlašovací, pokud máte aplikační!). Nepoužívejte přístup pro běžné uživatele, je to bezpečnostní riziko, vytvořte si aplikační heslo.

Pak zadejte jednotlivé klíče a hodnoty podle „nápovědy“, tedy výpisu získaného metodou GET v daném jmenném prostoru, viz výše. Při testování jsem narazil na problém s délkou požadavku, např. obsah příspěvku se mi vložit nepodařilo, ale to je otázka správného nastavení hlaviček.

Výsledek je pak takový, jaký očekáváme. Článek pod názvem „Pozdrav od robota“ je vydaný pod jménem odpovídajícího uživatele a je přidělen do rubriky s id 3. Nemá obsah.

K čemu využít REST API?

A teď, milá fantazie, utíkej! Co všechno s tím dobrý správce může udělat? Jaké informace nabízí SEO pluginy, co se dozvím o objednávkách ve WooCommerce? Co můžu na dálku zjišťovat ze Zdraví webu? Nebo activity logy.. to všechno používají aplikace pro správu jako MainWP. Nebo no-code platformy jako Make, Zapier. REST API používá Gutenberg a WooCommerce a mnohé další pluginy.

Vy si můžete vyexportovat data, i když nemáte vhodný plugin. Můžete si je napojit do jiné aplikace pro business logiku nebo zpracování ekonomiky e-shopu. Ne všechno je úplně ready, ale tudy teče voda!

Na co si dát pozor

Z hlediska bezpečnosti je praktické zakázat dotazy na uživatele, aby to roboti neměli tak snadné s jejich hledáním. V REST API nenajdete informace o verzích WordPressu nebo komponent. Obsah je ale k dispozici podle definovaných přístupových práv – všechny na webu zobrazené články jsou dostupné i prostřednictvím REST API. Ale to stejné nabízí také RSS kanál webu a každé rubriky.

Kontrolu bych prováděl u pluginů na míru, zda mají dobře ošetřené přístupy do členských sekcí, případně k datům formulářů nebo logů. Není to nic speciálního, logy se mohou povalovat v kdejakém adresáři a měli bychom jejich dostupnost hlídat.

Newsletter Rádce pro správce

Každou středu rozesíláme část svého know-how, které jsme pracně získali během posledních let. Zadarmo každému, kdo má zájem stát se zkušeným správcem WordPressu. Není určený našim zákazníkům, nýbrž našim kolegům v oboru. Vracíme tak komunitě to, co jsme získali od jiných. Podívejte se do jeho archivu.