Úvod do Ratpacku

1. Prehľad

Ratpack je sada JVM knižnice založené na moderných výkonných aplikáciách v reálnom čase. Je postavený na vrchu vloženého Netty event-driven networking engine a je plne v súlade s reaktívnym dizajnovým vzorom.

V tomto článku sa dozvieme, ako používať Ratpack, a pomocou neho zostavíme malú aplikáciu.

2. Prečo Ratpack?

Hlavné výhody Ratpack:

  • je veľmi ľahký, rýchly a škálovateľný
  • spotrebuje menej pamäte ako iné rámce, ako napríklad DropWizard; zaujímavý výsledok porovnania benchmarku nájdete tu
  • pretože je postavený na Netty, Ratpack je úplne založený na udalostiach a neblokuje svoju povahu
  • má podporu pre Guice riadenie závislostí
  • podobne ako Jar TopánkaRatpack má svoje vlastné testovacie knižnice na rýchle nastavenie testovacích prípadov

3. Vytvorenie aplikácie

Aby sme pochopili, ako Ratpack funguje, začnime s tým vytvorením malej aplikácie.

3.1. Maven závislosti

Najskôr do našej pridajme nasledujúce závislosti pom.xml:

 io.ratpack ratpack-core 1.4.5 io.ratpack ratpack-test 1.4.5 

Najnovšiu verziu môžete skontrolovať na serveri Maven Central.

Všimnite si, že hoci používame Maven ako náš zostavovací systém, podľa odporúčania Ratpack je lepšie ho používať Gradle ako nástroj na vytváranie, pretože Ratpack má prvotriednu podporu Gradle poskytovanú prostredníctvom pluginu Ratpack’s Gradle.

Môžeme použiť nasledujúci skript zostavenia Gradle:

buildscript {repositories {jcenter ()} závislosti {classpath "io.ratpack: ratpack-gradle: 1.4.5"}} použiť plugin: "io.ratpack.ratpack-java" repozitáre {jcenter ()} závislosti {testCompile 'junit: junit: 4.11 'runtime "org.slf4j: slf4j-simple: 1.7.21"} test {testLogging {udalosti' spustené ',' splnené '}} 

3.2. Budovanie aplikácie

Keď je nakonfigurovaná naša správa zostavenia, musíme vytvoriť triedu, ktorá spustí vložené Netty server a vytvoriť jednoduchý kontext na vybavenie predvolených požiadaviek:

public class Aplikácia {public static void main (String [] args) vyvolá Výnimku {RatpackServer.start (server -> server.handlers (chain -> chain .get (ctx -> ctx.render ("Vitajte v balíku Rathaus !!!) ")))); }}

Ako vidíme, pomocou RatpackServer teraz môžeme server spustiť (predvolený port 5050). The manipulátori () metóda preberá funkciu, ktorá prijíma reťazový objekt, ktorý mapuje všetky príslušné prichádzajúce požiadavky. Toto „Handler Chain API“ sa používa na zostavenie stratégie spracovania odpovedí.

Ak spustíme tento útržok kódu a klikneme na prehliadač na // localhost: 5050, „Vitajte v balíku Rathaus Baeldung !!!“ by sa malo zobraziť.

Podobne môžeme mapovať požiadavku HTTP POST.

3.3. Spracovanie parametrov cesty URL

V nasledujúcom príklade musíme v našej aplikácii zachytiť niektoré parametre cesty URL. V Ratpack ich používame PathTokens:

RatpackServer.start (server -> server .handlers (chain -> chain .get (": name", ctx -> ctx.render ("Hello" + ctx.getPathTokens (). Get ("name") + "!!) ! "))));

Tu mapujeme názov Parameter URL Kedykoľvek sa vám páči // localhost: 5050 / John príde, odpoveď bude „Ahoj John !!!“.

3.4. Úprava hlavičky požiadavky / odpovede s / bez filtra

Niekedy je potrebné upraviť vloženú hlavičku odpovede HTTP na základe našej potreby. Ratpack má MutableHeaders na prispôsobenie odchádzajúcich odpovedí.

Napríklad musíme v reakcii zmeniť nasledujúce hlavičky: Access-Control-Allow-Origin, Prijať jazyka Accept-Charset:

RatpackServer.start (server -> server.handlers (chain -> chain.all (ctx -> {MutableHeaders headers = ctx.getResponse (). GetHeaders (); headers.set ("Access-Control-Allow-Origin", " * "); headers.set (" Accept-Language "," en-us "); headers.set (" Accept-Charset "," UTF-8 "); ctx.next ();}). get (" : name ", ctx -> ctx .render (" Hello "+ ctx.getPathTokens (). get (" name ") +" !!! "))));

Používaním MutableHeaders nastavíme nastavenie troch hlavičiek a ich zatlačenie do Reťaz.

Rovnakým spôsobom môžeme skontrolovať aj hlavičky prichádzajúcich požiadaviek:

ctx.getRequest (). getHeaders (). get ("// TODO")

To isté sa dá dosiahnuť vytvorením filtra. Ratpack má a Psovod rozhranie, ktoré je možné implementovať na vytvorenie filtra. Má iba jednu metódu handle (), ktorý berie prúd Kontext ako parameter:

public class RequestValidatorFilter implementuje Handler {@Override public void handle (Context ctx) throws Exception {MutableHeaders headers = ctx.getResponse (). getHeaders (); headers.set ("Access-Control-Allow-Origin", "*"); ctx.next (); }}

Tento filter môžeme použiť nasledujúcim spôsobom:

RatpackServer.start (server -> server.handlers (chain -> chain .all (new RequestValidatorFilter ()) .get (ctx -> ctx.render ("Welcome to baeldung ratpack !!!")))); }

3.5. Analyzátor JSON

Ratpack interne používa rýchlejší jackson na analýzu JSON. Môžeme použiť modul Jackson na analýzu ľubovoľného objektu na JSON.

Vytvorme jednoduchú triedu POJO, ktorá sa použije na analýzu:

public class Employee {private Long id; súkromný názov reťazca; súkromné ​​meno reťazca; // zakladatelia a zakladatelia}

Tu sme vytvorili jednu jednoduchú triedu POJO s názvom Zamestnanec, ktorý má tri parametre: id, titula názov. Teraz to použijeme Zamestnanec objekt previesť na JSON a vrátiť to isté, keď dôjde k zasiahnutiu určitej adresy URL:

Zoznam zamestnancov = nový ArrayList (); zamestnanci.add (novy zamestnanec (1L, "Mr", "John Doe")); zamestnanci.add (novy zamestnanec (2 l, "pan", "biely sneh")); RatpackServer.start (server -> server.handlers (reťazec -> reťazec .get ("údaje / zamestnanci", ctx -> ctx.render (Jackson.json (zamestnanci)))));

Ako vidíme, manuálne pridávame dva Zamestnanec objekty do zoznamu a ich analýza ako JSON pomocou Jackson modul. Hneď ako / data / zamestnanci URL je zasiahnuté, objekt JSON bude vrátený.

Tu je potrebné poznamenať, že nepoužívame ObjectMapper vôbec pretože modul Jackson Ratpack urobí potrebných za chodu.

3.6. Pamäťová databáza

Ratpack má prvotriednu podporu pre databázy v pamäti. Na združovanie pripojení JDBC používa HikariCP. Aby sme ju mohli použiť, musíme do modulu pridať závislosť modulu HikariCP od Ratpacku pom.xml:

 io.ratpack ratpack-hikari 1.4.5 

Ak používame Gradle, to isté je potrebné pridať do súboru na zostavenie Gradle:

zostaviť ratpack.dependency ('hikari')

Teraz musíme vytvoriť súbor SQL s príkazmi DDL tabuľky, aby sa tabuľky vytvorili, akonáhle je server funkčný. Vytvoríme DDL.sql súbor v src / main / resources adresár a pridajte do neho niekoľko príkazov DDL.

Pretože používame databázu H2, musíme k tomu pridať aj závislosti.

Teraz pomocou HikariModule môžeme inicializovať databázu za behu:

RatpackServer.start (server -> server.registry (Guice.registry (väzby -> bindings.module (HikariModule.class, config -> {config.setDataSourceClassName ("org.h2.jdbcx.JdbcDataSource")); config.addDataSourceProperty (" URL "," jdbc: h2: mem: baeldung; INIT = RUNSCRIPT FROM 'classpath: /DDL.sql' ");}))). Handlers (...));

4. Testovanie

Ako už bolo spomenuté, Ratpack má prvotriednu podporu pre testovacie prípady jUnit. Použitím MainClassApplicationUnderTest môžeme ľahko vytvoriť testovacie prípady a otestovať koncové body:

@RunWith (JUnit4.class) verejná trieda ApplicationTest {MainClassApplicationUnderTest appUnderTest = nový MainClassApplicationUnderTest (Application.class); @Test public void givenDefaultUrl_getStaticText () {assertEquals ("Vitajte na baeldung ratpack !!!", appUnderTest.getHttpClient (). GetText ("/")); } @Test public void givenDynamicUrl_getDynamicText () {assertEquals ("Hello dummybot !!!", appUnderTest.getHttpClient (). GetText ("/ dummybot")); } @Test public void givenUrl_getListOfEmployee () vyvolá JsonProcessingException {Zoznam zamestnancov = nový ArrayList (); ObjectMapper mapovač = nový ObjectMapper (); zamestnanci.add (novy zamestnanec (1L, "Mr", "John Doe")); zamestnanci.add (novy zamestnanec (2 l, "pan", "biely sneh")); assertEquals (mapper.writeValueAsString (zamestnanci), appUnderTest.getHttpClient (). getText ("/ data / zamestnanci")); } @After public void shutdown () {appUnderTest.close (); }}

Upozorňujeme, že spustenie musíme ukončiť manuálne MainClassApplicationUnderTest napríklad zavolaním na Zavrieť() metóda, pretože to môže zbytočne blokovať zdroje JVM. Preto sme použili @ Potom anotácia na násilné ukončenie inštancie po vykonaní testovacieho prípadu.

5. Záver

V tomto článku sme videli jednoduchosť používania Ratpacku.

Celý zdrojový kód je ako vždy k dispozícii na serveri GitHub.


$config[zx-auto] not found$config[zx-overlay] not found