Technologie

Jul 24. 2018

Návod: Jak vytvořit backend bez programování s WSO2

WSO2

Projekt, na kterém jsem pracoval, měl specifický požadavek - být dlouhodobě udržovatelný méně technickými lidmi, ne - programátory. Také bylo nutné implementovat funkce jako SAP integraci, komunikaci s IDoc a analytiku.

 

WSO2 je "open-source technologie pro digitální byznys". Sestává z více individuálních komponentů ale najzaujíímavejším pro mě byl Enterprise Integrator. V podstatě dovoluje vytvořit backend propojený s jakýmkoli typem databáze. Vše jen přes webové rozhraní ("Design View"). Náročný uživatel si může některé kroky usnadnit a zrychlit neboť dostupné je také "Source View", kde se dá podívat vygenerovaný XML zápis vytvořených částí.

 

I když webové rozhraní existuje, doporučený postup je použít "WSO2 Developer Studio", což je vlastně program Eclipse s nainstalovaným rozšířením. Hlavní výhody použití tohoto přístupu je, že generuje soubory, takže se dá použít například Git jako při běžném programování. Výstup lze vyexportovat do jednoho souboru a importovat přes webové rozhraní.

 

WSO2 má rozsáhlou dokumentaci, ale je založena většinou jen na jednom specifickém příkladu, některé informace jsou vysloveně chybné (což jsem zjistil až během vývoje) a často se tam vyskytuje mix příkladů z webového rozhraní a z Developer Studia. Rozhodl jsem se proto shrnuty některé důležité kroky při tvoření REST API do návodu níže a ušetřit tak čas a nějaké problémy ostatním.

 

Návod

1. Vytvoření projektu v Eclipse

File – New – ESB Solution Project

Toto vytváří „Carbon application“, ktérá bude exportována do *.car súboru.

 

ESB solution project

 

2. Vytvoření projektu v Eclipse

File – New – Project... – WSO2 – Service Hosting – Data Service Project

Stejné umístění, pojmenovaný „NameDataServiceProject“.

 

3. Vytvoření „data service“

V kontextovém menu položky „NameDataServiceProject“ z nabídky New zvolit Data Service.

Toto je databázový konektor.

 

ESB solution project

 

4. Konfigurace databázového konektoru

data source wizard

 

Request

1. Vytvoření „query"

Je složité vytvořit „query“ přes UI, ale má velmi jednoduchý zápis v XML, takže stačí změnit na spodku z „Outline“ na „Source“.
V XML je na stejné úrovni jako <config>.

 

<query id=”GetJobDetailQuery” useConfig=”NameDataSource”>
<sql>SELECT * FROM job WHERE id=?</sql>
<result outputType=”json”>{ “entries”: { “entry”: [ { “state”: “$state_column_name” } ] }}</result>
<param name=”jobCode” sqlType=”STRING”/>
</query>

 

„id“ – jedinečný název query
„useConfig“ – hodnota „id“ atributu z prvního „config“ tagu v XML
<sql>SQL query provedené na databázi definovanou v databázovém konektoru</sql>
„?“ – vstupní parametr do query definovaný v <param> tagů na spodku zápisu (správně seřazeny)
<result> definuje jak bude vypadat odpověď query - "entries" a "entry" jsou pevné původní části ale po nich jsou definovány klíče (například "state") s hodnotami podle názvů sloupců začínajícími se znakem $ (dá se považovat za odkaz na hodnotu sloupce se stejným názvem přímo z odpovědi databáze)

 

2. Vytvoření „resource"

Opět doporučuji použít XML.

 

<resource method=”GET” path=”GetJobDetailResource/{jobCode}”>
<call-query href=”GetJobDetailQuery”>
<with-param name=”jobCode” query-param=”jobCode”/>
</call-query>
</resource>

 

„path“ – cesta v URL s parametry ve složených zátvorkách
„href“ – název definovaný v předchodzím kroku
„name“ – název parametru
„query-param“ – název parametru (tip: používat stejné názvy pro oba typy parametrů, nebude nutné pak přemýšlet, který je ten správný)

 

3. Vytvoření „endpoint"

Pravý klik na první projekt „Name“, zvolit New – Endpoint.

 

Endpoint artifact

 

„Endpoint Name“ – jedinečný název
„Endpoint Type“ – HTTP Endpoint
„URI Template“ – pozor na zápis parametrů, je nutné dodržet formát uri.var.*

 

4. Vytvoření „sequence“

Pravý klik na první projekt "Name", zvolit New - Sequence. Z levého menu lze přidávat mediátory. Pokud chceme při komunikaci použít JSON, třeba přidat Property mediator a nakonfigurovat jej.

Mediátor je zprostředkovatel byznys logiky. Je to náhrada za kód, který by se běžné psal v kontrolér například při Node.js. Je možné zprávu různými způsoby zpracovávat: upravit, uložit, zahodit, klonovat, logovat, ... Je mnoho dostupných hotových mediátorů a nedoporučuje se programovat vlastní, i když je to možné - v Javě.

 

sequence - property

 

Důležité je přidat Send madiator a přidat mu vhodný endpoint z menu "Defined Endpoints".

 

endpoint artifact

 

Když budou requestu volané z JavaScriptu někde na front-endu přes webový prohlížeč (nebo cokoli, co podléhá pravidlům Corsa), je možné, že bude nutné vytvořit OUT sequence podobnou této IN sequence (stačí vynechat přidání endpontu a nechat Send mediator prázdný). Na obrázku jsou potřeba nastavení Vlastnosti mediátora. Sequence jsem nazval "OutOriginSequence".

 

property

 

5. Vytvoření „REST API“

Pravý klik na první projekt „Name“, zvolit New – REST API.

 

synapse api artifcat

 

„Name“ – unikátní název
„Context“ – část URL po čísle portu nebo nejvyšší doméně (http://192.168.1.1:8280/apiv1/...)

 

Z levého menu třeba přidat "APIResource", potom IN sequence a OUT sequence. Tyto části tvoří kompletní request.

 

api resource

 


Export/Import Carbon Application

 

Pravý klik na „NameCompositeApplication“ a zvolit „Export Composite Application Project“. Zkontrolovat „Name“ z menu „Artifacts“. Někdy je zaškrtávací pole v neurčitém stavu, což znamená, že něktoré části projektu nejsou zvoleny na export a je jich třeba zvolit. Proces se ukončí klikem na „Finish“ a uložením *.car súboru.

 

Ve webovém rozhraní třeba odstranit dosud nahrané aplikace (pokud existují). V ľevém menu stačí zvolit Carbon Application – List – Delete. Následně je možné přidat novou přes možnost „Add“ v menu, zvolit soubor a klik na „Upload“.

 

wso2

 


Export/Import Data Service

 

Neexportuje sa neboť je možné použít přímo jeho soubor *.dbs umístěn na „location“.

 

name data service

 

Ve webovém rozhraní třeba smazat nahrané služby přes menu Services – List – Delete. Následně přidat nové přes Data Service – Upload.

 

upload data service

 

david

Dávid

Android Developer

Štítky: