Využití API v rámci Sofa

Základní informace

Co je to API – je to zkratka označení Application Programming Interface, kterou se v informatice označuje rozhraní pro programování aplikací. Úkolem API bude v našem případě zprostředkovat komunikaci dvou aplikací – tedy nějaké vaší aplikace s aplikací Sofa – a umožnit jejich vzájemnou výměnu dat.

Co je externí informační systém – jedná se vlastně o nějakou vaši aplikaci, která potřebuje komunikovat se Sofa, aniž byste museli zajišťovat návaznost v průběhu práce ručně. K tomu využívá rozhraní API.

Co je GraphQL – jedná se dotazovací jazyk pro tvorbu API vytvořený v roce 2012 společností Facebook. Od roku 2015 je GraphQL k dispozici jako open-source.

Co jsou dotazy – v GraphQL je nutné rozlišovat dva základní typy dotazů.

  • Prvním je query, obdoba SELECT z SQL. Jedná se typ dotazu, který se čistě dotazuje na uložená data a tato data žádným způsobem nemění. Spouštění query je tedy bezpečné, protože nemůže data žádným způsobem poškodit.

  • Druhým typem je mutation, což je obdoba SQL operací pro změnu dat a jejich struktury (INSERT, ALTER, DELETE, UPDATE…​). U provádění mutací je tedy nutné dbát na zvýšenou opatrnost a vědět, jak se daná mutace zachová. V případě spuštění špatné mutace lze nenávratně rozbít data.

Co je to JSON – jedná se o zkratku JavaScript Object Notation a jde o formát pro vzájemnou komunikaci a výměnu dat aplikací prostřednictvím rozhraní API. Proměnné, které budeme používat v GraphQL dotazech budou předávány právě ve tvaru objektů JSON.

Proměnné jsou definované v kulatých závorkách za názvem dotaz a značí se symbolem $. Je nutné uvést název proměnné a její typ. Povinné proměnné jsou označené vykřičníkem.
Příklad dotazu s definovanou povinnou proměnnou typu string: query findUserById($userIdent: String!). Příklady konkrétních dotazů i s proměnnými jsou uvedeny v kapitole Příklady jednoduchých GraphQL dotazů.

V GraphQL dotazu lze používat aliasy, je tedy možné si část příchozího JSON objektu pojmenovat podle potřeb. Toto může být velmi praktické například u vyhodnocování výsledku v rámci PAJS. Konkrétní příklad využití v Sofa bude popsán níže.

Externí informační systém

Vytvoření nového externího informačního systému

Nejprve je nutno ve vaší organizaci v Sofa vytvořit externí informační systém. Jde vlastně o systém přístupu k nějaké vaší aplikaci, která potřebuje komunikovat se Sofa, aniž byste museli zajišťovat vzájemný kontakt v průběhu práce ručně. K tomu se právě využívá rozhraní API.

  • V okně Administrace klepněte na tlačítko API.

    Pokud tlačítko API nevidíte, klepněte na pravém konci lišty na tlačítko se třemi tečkami; zbytek ovladačů se zobrazí ve svislé nabídce.
  • Na nástrojové liště okna API klepněte na tlačítko +Přidat externí IS.

    vytvoreni1
  • Otevře se okno Nový externí IS se dvěma kartami – Nastavení a Oprávnění.

  • Na kartě Nastavení vyplňte základní údaje o systému, tj. pole Název a Popis (zobrazují se pouze v rámci Sofa). Údaj v poli Identifikátor se vytvoří automaticky z řetězce zadaného do pole Název, lze ho ale v případě potřeby upravit.

    vytvoreni2
  • Důležité je heslo zapsané do pole Heslo. To použijete při úpravách tohoto externího informačního systému, ale poslouží i při vygenerování tokenu pro přístup pomocí vytvořeného externího systému.

    Heslo musí být nejméně 8 znaků a nejvíce 64 znaků dlouhé, musí obsahovat minimálně jedno velké písmeno, jedno malé písmeno a jednu číslici. Povolené znaky jsou malá a velká písmena (a-z, A-Z), číslice (0-9) a speciální znaky (mezera ! # $ % & ( ) * + , - . : = ? @ [ ] _ { | } ~).
  • Heslo pro kontrolu zopakujte zápisem do pole Heslo znovu.

  • Úroveň zápisu informací o průběhu činnosti ExtIS nastavte pomocí voliče Úroveň logování nabízejícího možnosti Informace a Debug. Pro ladění problémů a chyb je vhodné nastavit si úroveň logování na Debug.

Tlačítkem Následující: Oprávnění > přejděte na kartu Oprávnění.

Pomocí zaškrtávacích políček nastavte oprávnění, která chcete externímu informačnímu systému přiznat. Budete-li chtít třeba externí IS využívat k dálkové správě uživatelů v Sofa, zaškrtněte políčko Může spravovat uživatele, skupiny a role.

Po vyplnění všech údajů klepněte na tlačítko Uložit externí IS.

vytvoreni3

Položka vytvořeného externího informačního systému se zobrazí v okně API spolu se zeleným pruhem se zprávou o úspěšném vytvoření.

vytvoreni4

Zjištění ID uživatele

ID uživatele je údaj, který budeme velmi často potřebovat v dalších částech výkladu.

V okně API klepněte na položku externího informačního systému, čímž ji označíte za vybranou a vytvoří se nástrojová lišta se skupinou tlačítek.

vytvoreni5

Klepněte na tlačítko Upravit externí IS. V okně s popisem externího informačního systému je na kartě Nastavení v poli Uživatelské jméno vygenerovaný needitovatelný údaj, který v kombinaci s heslem zadaným při založení externího informačního systému poslouží k autentizaci uživatele.

vytvoreni6

Úpravy údajů o externím IS

Na nástrojové liště jsou i další tlačítka pro servisní úkony nad položkou seznamu externích informačních systémů.

extis uprava
  • Po vytvoření je externí IS aktivní, o čemž svědčí zelené zatržítko ve sloupci Stav. Tlačítkem Deaktivovat externí IS se systém deaktivuje a symbol ve sloupci Stav se změní v červený křížek. Nápis na tlačítku se po potvrzení bezpečnostního dotazu změní na Aktivovat externí IS – pomocí tohoto tlačítka lze systém opět aktivovat.

  • Tlačítkem Změnit heslo můžete kdykoliv změnit přístupové heslo k externímu IS.

  • Pokud byste chtěli záznam o externím IS zrušit, klepněte na tlačítko Smazat externí IS.

  • Tlačítkem Logy se zobrazí seznam všech záznamů o systémových událostech.

Komunikace s externími IS pomocí webhooků

Sofa od verze 5.5 umožňuje při komunikaci s externími informačními systémy využívat tzv. webhooky. Jedná se o metodu, umožňující v reálném čase nechat jednu webovou aplikaci (u nás v Sofa) automaticky informovat druhou aplikaci (u nás v externím informačním systému), že bylo dosaženo určité události (nebo třeba určitého stavu). Tím pro externí aplikaci odpadá nutnosti neustálého opakování kontrol týkající se změn v Sofa.

Užití webhooků je v Sofa ve verzi 5.5 implementováno do procesní aplikace s využitím pro agendy, které při svém běhu postupně prochází určité stavy. To mohou být agendy typu SignPoint nebo třeba agendy pro hromadné podepisování.

Mějme například aplikaci v nějakém externím informačním systému (označme ji ExtAp), která spolupracuje s určitou aplikací v Sofa. Aplikace ExtAp například pošle do Sofa dokument k podpisu agendě SignPoint a potřebuje být informována, kdy bude podepisovací proces dokončen. Pokud by stále posílala dotazy na zjištění stavu procesu, působilo by to jí samé i aplikaci Sofa neustálou a nadbytečnou zátěž. Proto se situace řeší opačně – jakmile dojde k požadované události (třeba k podpisu dokumentu všemi podepisujícími), Sofa sama o tom ExtAp informuje. Proces je asynchronní – Sofa informaci odešle, ale nečeká na odpověď.

Teprve pak se aplikace ExtAp může do Sofa zaregistrovat a sama poslat konkrétní požadavek.

Konfigurace webhooků

Webhooků lze v rámci organizace v Sofa vytvořit libovolné množství. Předpokládáme, že administrátor dostane informace o „protějších“ aplikacích ExtAp, které jsou již hotové (systémové nebo je vytvořil na míru nějaký návrhář), takže již může využít známou hodnotu TdId. Napojení administrátor konfiguruje mimo procesní aplikaci, přímo v administraci aplikace Sofa, kde zadá příslušné parametry (tedy především URL externí aplikace a přihlašovací údaje).

webhook8

Pro práci s webhooky se nastavují jednak přihlašovací údaje a jednak popisy způsobu připojení k ExtAp. Východiskem je okno Administrace a tlačítko API, kterým se otevře příkazová nabídka pro upřesnění požadované akce.

  • Příkazem Přihlášení otevřete okno vytváření sad přihlašovacích údajů.

  • Příkazem Webhooky otevřete okno pro popisnou specifikaci napojení na jednotlivé ExtAp pomocí webhooků (URL, přihlašovací jména a další).

Specifikace přihlašovacích údajů

Příkaz Přihlášení otevře pohled Přihlašovací údaje.

webhook9

Po stisku tlačítka +Přidat přihlašovací údaje se otevře dialog Nové přihlašovací údaje, ve kterém vytvoříte přihlašovací údaje, pro autentizaci aplikace Sofa směrem k volanému externímu informačnímu systému.

Do polí Identifikátor, Název a Popis zapíšete obvyklé popisné údaje pro identifikaci vytvářeného přihlášení.

Identifikátor (což je hodnota označovaná jako TdId) musí začínat písmenem a smí obsahovat pouze písmena anglické abecedy (malá i velká), číslice a podtržítka.

webhook10

K dispozici jsou dvě možnosti typu přihlášení – Basic a Bearer Token.

  • Pokud nastavíte přihlášení typu Basic, je pro přihlášení potřeba zadat uživatelské jméno a k němu příslušející heslo.

  • Při nastavení typu přihlášení Bearer Token je zapotřebí do stejnojmenného pole zadat řetězec s autentizačním tokenem.

webhook11

Přihlašovací údaje se po stisku tlačítka OK uloží a zobrazí v okně Přihlašovací údaje. Úspěšné vytvoření je rovněž oznámeno zprávou v zeleném informačním pruhu.

webhook12

Údaje lze pak dodatečně měnit i upravit co do obsahu i typu.

Klepnutím do kroužku na začátku řádku vyberte položku s přihlašovacími údaji. Zpřístupní se nástrojová lišta s trojicí tlačítek.

webhook13
  • Tlačítkem Upravit přihlašovací údaje budete moci změnit název a popis přihlášení.

  • Tlačítkem Nastavit přihlašovací údaje budete moci změnit typ přihlášení a s ním spojené údaje.

  • Tlačítkem Smazat přihlašovací údaje lze celou položku přihlášení odebrat.

Specifikace nového webhooku

Webhooky se vytvářejí a upravují v pohledu Webhooky. Nový webhook vytvoříte po klepnutí na tlačítko +Přidat webhook. Otevře se okno Nový webhook, které se skládá ze tří karet – Nastavení, URL argumenty a Header argumenty.

Údaje na kartě Nastavení

V poli Přístupové údaje vyberte jednu položku z výčtu připravených přihlašovacích údajů (vytvořených postupem popsaným v předchozí kapitole).

webhook14

Doplňte údaje do polí Název, Identifikátor a Popis – i zde musí Identifikátor začínat písmenem a smí obsahovat pouze písmena anglické abecedy (malá i velká), číslice a podtržítka.

Do pole URL zkopírujte URL adresu externí aplikace ExtAp.

V poli HTTP metoda vyberte metodu GET, PUT nebo POST.

  • U metody GET nelze posílat část body.

  • U metod PUT a POST část body posílat lze a je nutné vyplnit buď reálnou hodnotu Content-Type (nikoliv nějakou testovací hodnotu) nebo specifikaci souboru typu JSON s potřebnými údaji.

webhook15

Políčko Povolit neznámé argumenty se týká dále popsaných URL argumentů a Header argumentů.

Maximální počet pokusů o provedení akce lze nastavit v rozmezí 1 až 3. Hodnota Timeout se nastavuje v rozmezí 1 až 5 sekund.

Údaje nastavované na kartě URL argumenty

Na kartě URL argumenty lze vkládat dodatkové argumenty. Tlačítkem +Přidat argument otevřete dialog, ve kterém argument pojmenujete, můžete připojit jeho popis a pomocí políčka Povinný rozhodnout, zda hodnota tohoto argumentu bude povinná. To se testuje při posílání procesů z aplikace nebo agendy.

webhook16

Po stisku tlačítka Přidat argument jsou zadané hodnoty zařazeny do seznamu na kartě URL argumenty.

webhook17

Pro argument vybraný pomocí políčka před jeho položkou se zobrazí nástrojová lišta s tlačítky pro úpravu a smazání argumentu.

Údaje nastavované na kartě Header argumenty

Na kartě Header argumenty lze vkládat dodatkové argumenty headeru. Tlačítkem +Přidat argument otevřete dialog, ve kterém argument pojmenujete. Dále platí totéž, co bylo uvedeno v předchozí kapitole.

webhook18

V obou případech se uplatňuje vliv zaškrtnutí políčka Povolit neznámé argumenty.

  • Pokud na výše popsaných kartách nespecifikujete žádné argumenty a přesto pak z agendy nějaký argument dorazí (a není na seznamu), pak při zaškrtnutí políčka bude proces pokračovat.

  • Pokud políčko zaškrtnuté není a argument dorazí, bude další proces ukončen s tím, že argument není znám.

Po stisku tlačítka Uložit webhook se údaje uloží a v okně Webhooky se zobrazí nová položka. O tom je zobrazena zpráva v zeleném informačním pruhu.

webhook19

Úpravy a testování existujících webhooků

Pokud v okně Webhooky vyberete některou z položek, zpřístupní se nástrojová lišta. Pomocí trojice tlačítek můžete webhook nejen upravit a vymazat, ale také otestovat.

webhook20
  • Tlačítkem Upravit webhook se otevře okno Webhooky, ve kterém jsou načteny údaje o vybraném webhooku. Kromě hodnoty identifikátoru lze upravit všechny údaje, včetně změny http metody.

  • Tlačítkem Smazat webhook celý vybraný webhook po potvrzení bezpečnostního dotazu nevratně ze seznamu odeberete.

  • Tlačítko Testovat webhook umožní nastavený webhook otestovat – viz následující odstavce.

Tlačítkem Testovat webhook se otevře stejnojmenné okno určeno k otestování webhooku při aktuálním nastavení. Pokud máte v konfiguraci webhooku nastavený URL argument a/nebo Header argument, můžete zde zadat na zkoušku jejich hodnoty. Nemáte-li argumenty nastavené, pole pro jejich zadání v okně chybí.

webhook21

Klepnutím na tlačítko Testovat webhook se funkce webhooku otestuje a výsledek zobrazí ve stejném okně. Úspěšný test oznamuje zelený informační pruh. Výsledek testu je vypsán v polích Stav, Stavový kód a Odpověď.

webhook22

V případě neúspěšného vyhodnocení se zobrazí červený informační pruh se zprávou o chybě.

webhook23

Chyba může být způsobena třeba chybným zadáním URL adresy nebo souboru JSON, případně může být chybná i celá aplikace ExtAp.