Nastavení Web API
Konfigurace Web API spočívá v úpravách souboru APIServer.yaml. Popis jednotlivyých parametrů, které jsou k dispozici, naleznete v sekci Konfigurace WebAPI. Kromě toho může být pro provoz Web API zapotřebí upravit také nastavení prostředí na úrovni operačního systému. V případě potřeby můžete zapnout a nakonfigurovat logování. K dispozici je i tip, jak otestovat funkčnost. Věnujte též, prosím, pozornost pokynům v sekcích Upozornění, zejména, pokud přecházíte ze starších verzí.
V hostitelském OS je nutno nastavit bránu firewall tak, aby byl volný port, na kterém Web API server naslouchá, viz dále konfigurace Web API.
V kořenové instalační složce IS FLORES nalezneme šablonu konfiguračního souboru. Šablonu si zazálohujeme a přejmenujeme (odstraníme příponu .tmpl):
APIServer.yaml.tmpl → APIServer.yaml
Web API je možné spustit i bez tohoto kroku, pak poběží s defaultním nastavením (které odpovídá obsahu šablony), ale bez konfiguračního souboru nebudete mít možnost nastavení změnit.
Znak # uvozuje řádkový komentář. Pokud řádek začíná tímto znakem, hodnota uvedená v řádku se při zpracování konfiguračního souboru ignoruje a Web API použije hodnotu výchozí.
Ve formátu yaml jsou signifikantní mezery, konkrétně úroveň odsazení určuje příslušnost položky do určitého bloku. Z tohoto důvodu je důležité na začátku řádků s parametry nějaké mezery ponechat, aby bylo zřejmé, do kterého bloku patří. Pokud nastavujete hodnotu parametru, odmažte pouze samotný znak # a nechte řádek uvozený dvojicí mezer.
Konfigurační soubor obsahuje několik sekcí s parametry, které si v dalším textu probereme.
Adresa, na které Web API naslouchá. Související parametr: port
Výchozí hodnota: 0.0.0.0
Výchozí hodnota "0.0.0.0" znamená, že aplikace bude dostupná na libovolné IPv4 adrese, kterou má daný počítač přidělenou.
Pokud používáte webovou aplikaci Úkoly a ponecháte parametry host a port ve výchozím nastavení, adresa 0.0.0.0 může způsobit, že se "autokonfiguračnímu mechanismu" nepodaří navázat spojení. Viz Poznámky k umístění aplikace a připojení k datům v popisu webové aplikace Úkoly. V takovém případě si je zapotřebí vynutit přetížení hodnoty parametrů host a port specifikovaných v souboru APIServer.yaml nastavením parametru URL v sekci Tasks v souboru Nexus.cfg.
Port, na kterém Web API naslouchá. Související parametr: host
Výchozí hodnota: 80
Pokud používáte webovou aplikaci Úkoly a ponecháte parametry host a port ve výchozím nastavení, adresa 0.0.0.0 může způsobit, že se "autokonfiguračnímu mechanismu" nepodaří navázat spojení. Viz Poznámky k umístění aplikace a připojení k datům v popisu webové aplikace Úkoly. V takovém případě si je zapotřebí vynutit přetížení hodnoty parametrů host a port specifikovaných v souboru APIServer.yaml nastavením parametru URL v sekci Tasks v souboru Nexus.cfg.
Cesta k souboru ApiLib.dll.
Výchozí hodnota:
Výchozí hodnota null předpokládá, že se soubory APIServer.jar a ApiLib.dll nacházejí ve stejné složce. Pokud tomu tak není, je zapotřebí tímto parametrem specifikovat cestu k souboru ApiLib.dll, aby API server knihovnu nalezl.
Minimální počet současných připojení k serveru (vláken).
Výchozí hodnota: 16
Maximální počet současných připojení k serveru (vláken).
Výchozí hodnota: 250
Cesta k certifikátu ve formátu PKCS #12 (typicky soubor s příponou .pfx) nebo do Java keystore. Související parametr:
Výchozí hodnota:
Příklad nastavení:
server:
cert_pfx: "C:\\mnt\\datashareone\\flores\\tslssl\\cert\\MyPKCS12Certificate.pkcs12"
cert_password: "fk45235#!@41324zfaABCD"
Pokud není certifikát zadaný, server komunikuje přes http.
Pokud je cesta k certifikátu neplatná nebo nesouhlasí heslo, server se nespustí.
Pokud jsou oba parametry zadané správně, server komunikuje přes https.
Pokud máte certifikát ve formátu PEM a soukromý klíč v samostatném souboru, můžete je "zkombinovat" do certifikátu ve formátu PKCS #12 pomocí nástroje OpenSSL:
openssl pkcs12 -inkey MyPrivateKey.key -in MyPEMCertificate.crt -export -out MyPKCS12Certificate.pkcs12
Při převodu je nutné znát heslo k soukromému klíči MyPrivateKey.key, rovněž je možné zadat heslo k vytvářenému MyPKCS12Certificate.pkcs12. Toto heslo následně nastavíte jako hodnotu parametru cert_password.
Zapnutí (true) nebo vypnutí (false) zohledňování obecné ochrany dat.
Výchozí hodnota:
Kombinuje se s nastavením položky Obejít ochranu dat ve vlastnostech uživatele, který se pro přístup k API využívá. Výchozí hodnota je false.
| APIServer.yaml, parametr dataProtection | Agenda Uživatelé, položka Obejít ochranu dat | Web API zohledňuje ochranu dat |
|---|---|---|
|
|
|
ne |
|
|
|
ne |
|
|
|
ano |
|
|
|
ne |
|
|
|
ne |
|
|
|
ne |
Zohledňování ochrany dat může mít (v závislosti na konkrétní implementaci) výrazný negativní dopad na výkon - před nastavením tohoto parametru na hodnotu true v produkčním prostředí je zapotřebí provoz aplikací využívajících Web API důkladně otestovat.
Maximální počet vláken, které mohou souběžně zpracovávat požadavky.
Výchozí hodnota: 16
Doba, po které jsou vlákna určená pro zpracování požadavků ukončena.
Výchozí hodnota: 3600000
Jedná se o vlákna, jejichž maximální počet je určen výše uvedeným parametrem threadPoolSize. V případě potřeby jsou operativně vytvářena vlákna nová.
Doba (v milisekundách), po které je vlákno ukončeno, pokud se během ní požadavek nepodaří zpracovat (vyřídit). Počítá se pouze doba samotného zpracování požadavku, nikoli čas, kdy požadavek čeká ve frontě. Po ukončení vlákna vrátí server chybu 500 Internal Server Error.
Výchozí hodnota: 600000
Požadavky jsou zařazovány do fronty v případě, kdy je vyčerpán maximální počet aktivních vláken daný hodnotou parametru threadPoolSize.
Doba (v milisekundách), po kterou požadavek čeká ve frontě, než se uvolní vlákno, které by ho mohlo začít zpracovávat. Po uplynutí této doby vrátí server chybu 503 Service Unavailable, požadavek je z fronty vyřazen a je nutné jej zaslat znovu.
Výchozí hodnota: 30000
Parametr byl ve verzi 21.3.4 odstraněn.
Parametr ovlivňoval, zda se má s každým požadavkem provádět nové přihlášení.
V současné době je každý požadavek autorizován novým přihlášením automaticky. Pokud je uživatel se stejnými přihlašovacími údaji uložen v cache, provede se přihlášení jen v případě, pokud mezitím došlo ke změně (např. nastavení nového hesla).
Díky tomuto chování se změna přihlašovacích údajů uživatele provádějícího požadavky projeví okamžitě. Změnami se může rozumět:
- změna přihlašovacího hesla
- změna dalších vlastností uživatele (např. příznaku Přihlášení nevizuálního uživatele API)
- změna oprávnění (přístupových práv)
Přecházíte-li na verzi 21.3.4 z předchozí verze 21.3.1, zkontrolujte, zda váš konfigurační soubor APIServer.yaml neobsahuje již nepodporovaný parametr authorizeEachRequest, případně ho odstraňte.
Pokud konfigurační server obsahuje nepodporované parametry, Web API server se nespustí. Toto chování bude v budoucích verzích systému upraveno.
Adresářová cesta, do které jsou logy ukládány.
Výchozí hodnota:
Úroveň podrobnosti logování (čím vyšší číslo, tím detailnější logování). Více informací viz popis v sekci Konfigurace logování.
Výchozí hodnota: 1
Aktivuje logování. Pokud chcete logování používat, změňte výchozí hodnotu false na hodnotu true.
Výchozí hodnota:
Maximální velikost logu v bajtech. Výchozí hodnota 0 znamená, že je velikost logu neomezená
Výchozí hodnota: 0
Počet logů zařazených do rotace. Více informací viz popis v sekci Konfigurace logování.
Výchozí hodnota: 1
Logování Web API má dvě "úrovně".
Úpravami sekce logs v konfiguračním souboru APIServer.yaml je možné ovlivňovat logování činnosti samotného Web API serveru (APIServer.jar). Pokud chcete změnit výchozí hodnotu některého z parametrů, odstraňte znak # na začátku příslušného řádku (dvojici mezer za znakem # ponechte).
# log configuration
logs:
# path where logs are stored, when empty then it is a directory where API server is
# path: ""
#
# number of details increase with this number(max. level is 6)
# level: 1
# enable/disable log
# enabled: false
# max size of log in bytes (0 is unlimited)
# maxsize: 0
# number of rotated logs when maxsize is set
# maxcount: 1
Prostřednictvím souboru APIServer.yaml je možné konfigurovat následující parametry týkající se logování:
Adresářová cesta, do které jsou logy ukládány.
Výchozí hodnota:
Výchozí hodnotou je prázdný řetězec; pokud tuto výchozí hodnotu nezměníte, budou se logy ukládat do stejné složky, ve které se nachází Web API server (soubor APIServer.jar).
Pokud v cestě používáte zpětná lomítka a zároveň cestu uzavřete do uvozovek, z technických důvodů musíte každé lomítko uvodit dalším zpětným lomítkem, tedy zdvojit:
- path: C:\IS FLORES\Logs - správně
- path: C:/IS FLORES/Logs - rovněž správně; standardní lomítka lze použít i na platformě Windows
-
path: "C:\IS FLORES\Logs" - nelze použít, pokus o spuštění Web API skončí chybou:
Exception in thread "main" java.lang.RuntimeException: unable to read configuration file APIServer.yaml - path: "C:\\IS FLORES\\Logs" - správně
Nejjednodušším řešením je cesty do uvozovek neuzavírat - ve skutečnosti uvozovky nejsou zapotřebí, a to ani v případě, kdy cesta obsahuje mezery.
Určuje, jaké informace a v jaké podrobnosti se do logu zapisují. Čím vyšší číslo, tím detailnější logování.
Možnosti:
-
-
0 (severe) - do logu se zapisují pouze následující události:
- chyby, kvůli kterým se Web API server nepodařilo inicializovat/spustit
-
1 (warning) - Výchozí hodnota. Události úrovně 0 + navíc:
-
chyby při inicializaci logování
-
-
2 (info) - Události úrovní 0 a 1 + navíc:
- informace o (úspěšném) spuštění Web API serveru
- informace o aktuální konfiguraci
- informace o adrese a portu, na kterých naslouchá Javalin
- 3 (config) - v současné době se nevyužívá
-
4 (fine) - Události úrovní 0, 1, 2 a 3 + navíc:
- použitá cesta k ApiLib.dll
- veškeré zasílané požadavky (pouze metoda a URL)
- veškeré obdržené odpovědi (pouze metoda a URL)
-
5 (finer) - Události úrovní 0, 1, 2, 3 a 4 + navíc:
- veškeré zasílané požadavky (včetně hlavičky a těla)
- veškeré obdržené odpovědi (včetně hlavičky a těla)
-
6 (finest) - v současné době se nevyužívá
-
Aktivuje logování. Pokud chcete logování používat, změňte výchozí hodnotu false na hodnotu true.
Maximální velikost logu v bajtech. Výchozí hodnota 0 znamená, že je velikost logu neomezená (do logu se zapisuje, dokud se nezaplní disk). Výchozí hodnotu je vhodné změnit.
Skutečná velikost logu může být nepatrně vyšší o délku jednoho záznamu. Hodnota parametru se kontroluje před zápisem - pokud je log menší než maxsize, přidá se do něj další záznam (bez ohledu na délku záznamu), v opačném případě se log uzavře a založí se nový.
Počet logů zařazených do rotace.
Web API server vždy aktuálně zapisuje do logu "0".
Pokud je zapotřebí do logu zapsat něco dalšího a velikost logu "0" přesáhla nastavenou velikost maxsize, log "0" se uzavře, přejmenuje se na "1", založí se nový prázdný log "0" a nové záznamy se zapisují do něj. Pokud se opět zaplní, log "1" se přejmenuje na "2", log "0" se uzavře a přejmenuje na "1" a založí se nový prázdný log "0".
Toto pokračuje, dokud se nedosáhne maximálního počtu logů (maxcount). Pokud je např. maxcount: 5 a již existují logy "0", "1", "2", "3" a "4", při zaplnění logu "0" se log "4" smaže, "3" se přejmenuje na "4", "2" se přejmenuje na "3", "1" se přejmenuje na "2", "0" se uzavře a přejmenuje na "1" a založí se nový prázdný log "0".
Výchozí hodnotu 1 je vhodné změnit zejména v případě, že máte nastavenou nenulovou hodnotu parametru maxsize. Pokud si např. nastavíte maxsize na 10485760 a maxcount ponecháte na výchozí hodnotě 1, jakmile dosáhne velikost logu 10 MB (1024 x 1024 x 10), celý log se smaže a začne se vytvářet nový a v tu chvíli máte v logu jenom jeden záznam z poslední logované akce, veškeré předchozí záznamy jsou ztraceny.
Logování zpracování požadavků Web API (na úrovni business logiky - tj. co se děje poté, co Web API server předá požadavek knihovně ApiLib.dll) se konfiguruje jako jakékoli jiné logování činnosti IS FLORES. Tj. do souboru Nexus.cfg zadáte sekci Logs např. následovně:
[Logs]
Level=2
Enabled=1
LogsDirectory=C:\IS FLORES\logs\
Podrobnější informace o logování naleznete v samostatné kapitole Logování běhu aplikace.
Pro zapnutí HTTPS je třeba do konfiguračního souboru zadat hodnoty parametrů cert_pfx a cert_password. Protokol HTTPS se začne používat automaticky.
Zabezpečená komunikace vyžaduje použití protokolu TLS 1.2.
Zda jsou všechny komponenty Web API správně nastavené a funkční, je možné jednoduše vyzkoušet zadáním nastavené adresy a portu do internetového prohlížeče, např.
http://localhost:80/
V případě úspěchu se zobrazí HTML tabulka obsahující informace o verzi, seznam databázových spojení a odkaz na online nápovědu k systému IS FLORES. Viz také příklad Základní zdroj (informace o systému) v kapitole Struktura URI.
Web API je možné provozovat popsaným způsobem, tj. zasílat požadavky přímo Web API serveru (adresu a port lze nastavit v souboru APIServer.yaml) a dostávat odpovědi přímo od něj. Nicméně zejména při nasazení do produkčního prostředí doporučujeme do architektury doplnit další vrstvu - reverzní proxy server (například NGINX).
Reverzní proxy server je obecně služba, která převezme požadavek klienta a na základě nadefinovaných pravidel jej předá dalšímu serveru (nebo několika serverům). Obdrženou odpověď vrátí zpátky klientovi.
Výhody (proč reverzní proxy používat):
-
zvýšení bezpečnosti (skrytí identity Web API serveru před externími uživateli)
-
celkové zpřehlednění architektury (reverzní proxy může zpracovávat veškeré příchozí HTTP požadavky a pomocí pravidel část požadavků přesměrovávat na Web API server, část na veřejné webové stránky společnosti atd.)
-
zvýšení výkonu, pokud je proxy server využitý jako load balancer a rozděluje požadavky na několik Web API serverů nainstalovaných na několika fyzických strojích
Pro zákazníky bude k dispozici jednoduchá vzorová konfigurace (pro NGINX Open Source) umožňující přeposílání požadavků na Web API server. Pro podrobnosti kontaktujte dodavatele systému.