Ratpack s Groovy

1. Prehľad

Ratpack je sada ľahkých knižníc Java pre vytváranie škálovateľných aplikácií HTTP s reaktívnymi, asynchrónnymi a neblokujúcimi funkciami.

Ratpack navyše poskytuje integráciu s technológiami a rámcami ako Google Guice, Spring Boot, RxJava a Hystrix.

V tomto výučbe to preskúmame ako používať Ratpack s Groovy.

2. Prečo Groovy?

Groovy je výkonný a dynamický jazyk, ktorý beží v prostredí JVM.

Vďaka Groovy je teda skriptovanie a jazyky špecifické pre doménu skutočne jednoduché. S balíkom Ratpack to umožňuje rýchly vývoj webových aplikácií.

Ratpack poskytuje ľahkú integráciu s Groovy prostredníctvom ratpack-groovy a ratpack-grovovy-test knižnice.

3. Aplikácia Ratpack pomocou Groovy Script

Ratpack Groovy API sú postavené v Jave, takže sa dajú ľahko integrovať s Java aj Groovy aplikáciami. Sú k dispozícii v ratpack.groovy balíček.

V skutočnosti v kombinácii so skriptovacími schopnosťami Groovy a správou závislostí Grape môžeme rýchlo vytvoriť webovú aplikáciu využívajúcu Ratpack, a to len v niekoľkých riadkoch:

@Grab ('io.ratpack: ratpack-groovy: 1.6.1') import statického ratpack.groovy.Groovy.ratpack ratpack {handlers {get {render 'Hello World from Ratpack with Groovy !!' }}}

Toto je náš prvý obsluhujúci pracovník, vybavenie žiadosti GET. Všetko, čo sme museli urobiť, bolo pridať nejaké základné DSL, aby sme povolili server Ratpack.

Teraz to spustíme ako Groovy skript na spustenie aplikácie. Aplikácia bude v predvolenom nastavení k dispozícii dňa // localhost: 5050:

$ curl -s localhost: 5050 Hello World od Ratpack s Groovy !!

Port môžeme tiež nakonfigurovať pomocou ServerConfig:

ratpack {serverConfig {port (5056)}}

Ratpack tiež poskytuje funkciu horúceho načítania, čo znamená, že sa môžeme zmeniť Ratpack.groovya potom uvidíte zmeny v okamihu, keď aplikácia uspokojí našu ďalšiu požiadavku HTTP.

4. Ratpack-Groovy Dependency Management

Existuje niekoľko spôsobov, ako povoliť ratpack-groovy podpora.

4.1. Hrozno

Môžeme použiť zabudovaný manažér závislostí Groovy Grape.

Je to také jednoduché ako pridať anotáciu do našej Ratpack.groovy scenár:

@Grab ('io.ratpack: ratpack-groovy: 1.6.1') import statického ratpack.groovy.Groovy.ratpack

4.2. Maven závislosť

Pri stavbe v Mavene potrebujeme len pridať závislosť pre ratpack-groovy knižnica:

 io.ratpack ratpack-groovy $ {ratpack.version} 

4.3. Gradle

Môžeme povoliť ratpack-groovy integráciu pridaním doplnku Ratpack Gradle pre Groovy build.gradle:

doplnky {id 'io.ratpack.ratpack-groovy' verzia '1.6.1'}

5. Ratpack Handlers in Groovy

Obslužné programy poskytujú spôsob vybavovania webových požiadaviek a odpovedí. K objektom žiadosti a odpovede je možné pristupovať v tomto uzávere.

Webové žiadosti môžeme vybaviť pomocou metód HTTP, ako sú GET a POST:

obsluhovači {get ("greet /: name") {ctx -> render "Hello" + ctx.getPathTokens (). get ("name") + "!!!" }} 

Túto webovú požiadavku môžeme otestovať prostredníctvom // localhost: 5050 / greet /:

$ curl -s localhost: 5050 / pozdrav / Norman Dobrý deň Norman !!!

V kóde obsluhy ctx je Kontext objekt registra, ktorý poskytuje prístup k premenným cesty, objektom požiadavky a odozve.

Pracovníci majú tiež podporu pre prácu s JSON prostredníctvom Jacksona.

Vráťme JSON prevedený z mapy Groovy:

get ("data") {render Jackson.json ([názov: "pán", meno: "Norman", krajina: "USA"])} 
$ curl -s localhost: 5050 / data {"title": "Mr", "name": "Norman", "country": "USA"}

Tu, Jackson.json sa používa na uskutočnenie konverzie.

6. Ratpack sľubuje v Groovy

Ako vieme, Ratpack umožňuje asynchrónne a neblokujúce funkcie aplikácie. To je implementované pomocou Ratpack Promises.

Sľuby sú podobné tým, ktoré sa používajú v JavaScripte, a sú trochu ako Java Budúcnosť. Môžeme myslieť na a Sľub ako vyjadrenie hodnoty, ktorá bude k dispozícii v budúcnosti:

post ("user") {Promise user = parse (Jackson.fromJson (User)) user.then {u -> render u.name}}

Poslednou akciou je potom akcia, ktorá určuje, čo s konečnou hodnotou. V takom prípade ho vrátime ako odpoveď na POST.

Pochopme tento kód podrobnejšie. Tu, Jackson.zJsona analyzuje JSON tela žiadosti pomocou ObjectMapperPoužívateľ. Potom, zabudovaný Kontext.analyzovať metóda ho viaže na Sľub objekt.

Sľub funguje asynchrónne. Keď potom operácia sa nakoniec vykoná, vráti sa odpoveď:

curl -X POST -H 'Content-type: application / json' --data \ '{"id": 3, "title": "Mrs", "name": "Jiney Weiber", "country": "UK "} '\ // localhost: 5050 / zamestnanec Jiney Weiber

Mali by sme poznamenať, že knižnica Promise je dosť bohatá a umožňuje nám reťaziť akcie pomocou funkcií ako mapa a flatMap.

7. Integrácia s databázou

Mať asynchrónne obslužné programy je najdôležitejšou výhodou, keď naši obsluhovatelia musia čakať na služby. Ukážme si to integráciou našej aplikácie Ratpack s databázou H2.

Môžeme použiť buď Ratpack Modul Hikari triedy, ktorá je rozšírením fondu pripojení HikariCP JDBC, alebo Groovy S.ql pre integráciu databázy.

7.1. Modul Hikari

Ak chcete pridať podporu HikariCP, najskôr do našej pridajme nasledujúce závislosti Hikari a H2 maven pom.xml:

 io.ratpack ratpack-hikari $ {ratpack.version} com.h2database h2 $ {h2.version} 

Alebo do našej môžeme pridať nasledujúce závislosti build.gradle:

závislosti {compile ratpack.dependency ('hikari') compile "com.h2database: h2: $ h2.version"}

Teraz to vyhlásime Modul Hikari pod väzby uzávierka pripojovacieho bazéna:

import ratpack.hikari.HikariModule ratpack {väzby {modul (HikariModule) {config -> config.dataSourceClassName = 'org.h2.jdbcx.JdbcDataSource' config.addDataSourceProperty ('URL', "jdbc: h2: mem: devDB; INIT = BEZPLATNÝ ODPIS Z 'classpath: /User.sql' ")}}} 

Nakoniec sme všetci pripravení na použitie pre jednoduché databázové operácie pomocou Java Pripojenie a Pripravené vyhlásenie:

get ('fetchUserName /: id') {Context ctx -> Connection connection = ctx.get (DataSource.class) .getConnection () PreparedStatement queryStatement = connection.prepareStatement ("VYBERTE NÁZOV OD POUŽÍVATEĽA KDE ID =?") queryStatement.setInt (1, Integer.parseInt (ctx.getPathTokens (). Get ("id"))) ResultSet resultSet = queryStatement.executeQuery () resultSet.next () vykresliť resultSet.getString (1)} 

Poďme skontrolovať, či obslužná rutina funguje podľa očakávania:

$ curl -s localhost: 5050 / fetchUserName / 1 Norman Potter

7.2. Groovy Sql Trieda

Môžeme použiť Groovy Sql pre rýchle databázové operácie prostredníctvom metód ako riadkov a executeInsert:

get ('fetchUsers') {def db = [url: 'jdbc: h2: mem: devDB'] def sql = Sql.newInstance (db.url, db.user, db.password) def users = sql.rows (" VYBERTE * OD UŽÍVATEĽA "); render (Jackson.json (používatelia))} 
$ curl -s localhost: 5050 / fetchUsers [{"ID": 1, "TITLE": "Mr", "NAME": "Norman Potter", "COUNTRY": "USA"}, {"ID": 2, "TITLE": "Miss", "NAME": "Ketty Smith", "COUNTRY": "FRANCE"}]

Napíšeme príklad HTTP POST s Sql:

post ('addUser') {parse (Jackson.fromJson (User)) .hen {u -> def db = [url: 'jdbc: h2: mem: devDB'] Sql sql = Sql.newInstance (db.url, db .user, db.password) sql.executeInsert ("INSERT INTO USER VALUES (?,?,?,?)", [u.id, u.title, u.name, u.country]) render "Užívateľ $ u Vložené meno.}}
$ curl -X POST -H 'Content-type: application / json' --data \ '{"id": 3, "title": "Mrs", "name": "Jiney Weiber", "country": " UK "} '\ // localhost: 5050 / addUser Používateľ Jiney Weiber vložený

8. Testovanie jednotky

8.1. Príprava testov

Ako už bolo uvedené, Ratpack tiež poskytuje ratpack-grovovy-test knižnica pre testovanie a ratpack-groovy žiadosť.

Aby sme ho mohli použiť, môžeme ho pridať ako závislosť Maven v našom pom.xml:

 io.ratpack ratpack-groovy-test 1.6.1 

Prípadne môžeme pridať závislosť Gradle do našej build.gradle:

testCompile ratpack.dependency ('groovy-test')

Potom musíme vytvoriť hlavnú triedu Groovy RatpackGroovyApp.groovy necháme nás otestovať Ratpack.groovy scenár.

verejná trieda RatpackGroovyApp {public static void main (String [] args) {File file = new File ("src / main / groovy / com / baeldung / Ratpack.groovy"); def shell = nový GroovyShell () shell.evaluate (súbor)}}

Keď spúšťate Groovy testy ako testy JUnit, trieda vyvolá Ratpack.groovy skript pomocou GroovyShell. Na druhej strane spustí server Ratpack na testovanie.

Poďme teraz napísať našu triedu Groovy Test RatpackGroovySpec.groovy spolu s kódom na spustenie servera Ratpack cez server RatpackGroovyApp:

trieda RatpackGroovySpec {ServerBackedApplicationUnderTest ratpackGroovyApp = nový MainClassApplicationUnderTest (RatpackGroovyApp.class) @Delegate TestHttpClient client = TestHttpClient.testHttpClient (ratpackGroovyApp)}

Ratpack poskytuje MainClassApplicationUnderTest na zosmiešnenie triedy aplikácie pre spustenie servera.

8.2. Písanie našich testov

Poďme napísať naše testy, počnúc veľmi základným testom, aby sme skontrolovali, či je možné aplikáciu spustiť:

@Test void "test, či je aplikácia spustená" () {when: get ("") then: assert response.statusCode == 200 assert response.body.text == "Hello World from Ratpack with Groovy !!" }

Poďme teraz napísať ďalší test na overenie odpovede súboru fetchUsers získať obsluhu:

@Test void "test fetchUsers" () {when: get ("fetchUsers") then: assert response.statusCode == 200 assert response.body.text == '[{"ID": 1, "TITLE": "pán "," NAME ":" Norman Potter "," COUNTRY ":" USA "}, {" ID ": 2," TITLE ":" Miss "," NAME ":" Ketty Smith "," COUNTRY ":" FRANCÚZSKO " "}] '}

O spustenie a zastavenie servera sa za nás postará testovací rámec Ratpack.

9. Záver

V tomto článku sme videli niekoľko spôsobov, ako napísať obslužné rutiny HTTP pre Ratpack pomocou programu Groovy. Preskúmali sme tiež prísľuby a integráciu databáz.

Videli sme, ako fungujú uzávery Groovy, DSL a Groovy Sql aby bol náš kód stručný, efektívny a čitateľný. Vďaka podpore testov Groovy je testovanie jednotiek a integrácií jednoduché.

Pomocou týchto techník môžeme pomocou funkcií dynamického jazyka Groovy a expresívnych rozhraní API rýchlo rozvíjať vysoko výkonné a škálovateľné aplikácie HTTP s balíkom Ratpack.

Ako obvykle nájdete ukážkový kód na GitHub.


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