Vytváranie mikroslužieb REST s Javalinom

1. Úvod

Javalin je ľahký webový rámec napísaný pre Java a Kotlin. Je napísaný na vrchole webového servera Jetty, vďaka čomu je veľmi výkonný. Javalin je modelovaný úzko zo súboru koa.js, čo znamená, že je napísaný od základu tak, aby bol ľahko pochopiteľný a využiteľný.

V tomto výučbe sa oboznámime s krokmi vytvorenia základnej mikroslužby REST pomocou tohto ľahkého rámca.

2. Sčítanie závislostí

Na vytvorenie základnej aplikácie potrebujeme iba jednu závislosť - samotný Javalin:

 io.javalin javalin 1.6.1 

Aktuálnu verziu nájdete tu.

3. Nastavenie Javalinu

Javalin uľahčuje nastavenie základnej aplikácie. Začneme definovaním našej hlavnej triedy a nastavením jednoduchej aplikácie „Hello World“.

Vytvorme nový súbor v našom základnom balíku s názvom JavalinApp.java.

V tomto súbore vytvoríme hlavnú metódu a pridáme nasledujúce na nastavenie základnej aplikácie:

Aplikácia Javalin = Javalin.create () .port (7000) .start (); app.get ("/ ahoj", ctx -> ctx.html ("Dobrý deň, Javalin!"));

Vytvárame novú inštanciu Javalinu, aby sme ju počuli na porte 7000, a potom spustíme aplikáciu.

Nastavujeme tiež náš prvý koncový bod počúvania a ZÍSKAJTE žiadosť na /Ahoj koncový bod.

Spustíme túto aplikáciu a navštívime // localhost: 7000 / hello, aby sme videli výsledky.

4. Vytvorenie a UserController

Príklad „Hello World“ je vhodný na predstavenie témy, ale pre skutočnú aplikáciu nie je prospešný. Pozrime sa teraz na realistickejší prípad použitia Javalinu.

Najskôr musíme vytvoriť model objektu, s ktorým pracujeme. Začíname vytvorením balíčka s názvom používateľ v rámci koreňového projektu.

Potom pridáme nový Používateľ trieda:

public class User {public final int id; verejné konečné meno reťazca; // konštruktory}

Musíme tiež nastaviť náš objekt prístupu k údajom (DAO). Na uloženie našich používateľov v tomto príklade použijeme objekt v pamäti.

Vytvárame novú triedu v používateľ zabalený tzv UserDao.java:

trieda UserDao {private List users = Arrays.asList (nový užívateľ (0, "Steve Rogers"), nový užívateľ (1, "Tony Stark"), nový užívateľ (2, "Carol Danvers")); private static UserDao userDao = null; private UserDao () {} statická UserDao inštancia () {if (userDao == null) {userDao = nový UserDao (); } návrat userDao; } Voliteľné getUserById (int id) {návrat users.stream () .filter (u -> u.id == id) .findAny (); } Iterable getAllUsernames () {return users.stream () .map (user -> user.name) .collect (Collectors.toList ()); }}

Implementácia nášho DAO ako jediného singla uľahčuje použitie v príklade. Mohli by sme to tiež vyhlásiť za statického člena našej hlavnej triedy alebo použiť injekciu závislostí z knižnice ako Guice, ak by sme chceli.

Nakoniec chceme vytvoriť našu triedu ovládačov. Javalin nám umožňuje byť veľmi flexibilný, keď deklarujeme svoje obslužné rutiny trás, takže je to iba jeden spôsob, ako ich definovať.

Vytvárame novú triedu s názvom UserController.java v používateľ balenie:

verejná trieda UserController {public static Handler fetchAllUsernames = ctx -> {UserDao dao = UserDao.instance (); Iterovateľné allUsers = dao.getAllUsernames (); ctx.json (všetci používatelia); }; public static Handler fetchById = ctx -> {int id = Integer.parseInt (Objects.requireNonNull (ctx.param ("id"))); UserDao dao = UserDao.instance (); Používateľ user = dao.getUserById (id); if (user == null) {ctx.html ("Nenašiel sa"); } else {ctx.json (užívateľ); }}; }

Deklarovaním obslužných rutín ako statických zaistíme, že samotný radič nebude mať žiadny stav. Ale v zložitejších aplikáciách môžeme chcieť uložiť stav medzi požiadavkami, v takom prípade by sme museli odstrániť statický modifikátor.

Upozorňujeme tiež, že testovanie jednotiek je pri statických metódach ťažšie, takže ak chceme túto úroveň testovania, budeme musieť použiť nestatické metódy.

5. Pridávanie smerov

Teraz máme niekoľko spôsobov načítania údajov z nášho modelu. Posledným krokom je vystavenie týchto údajov prostredníctvom koncových bodov REST. V našej hlavnej aplikácii musíme zaregistrovať dve nové trasy.

Pridajme ich do našej hlavnej triedy aplikácií:

app.get ("/ users", UserController.fetchAllUsernames); app.get ("/ users /: id", UserController.fetchById);

Po zostavení a spustení aplikácie môžeme vytvoriť požiadavku na každý z týchto nových koncových bodov. Volaním // localhost: 7000 / users uvedieme všetkých používateľov a volaním // localhost: 7000 / users / 0 dostaneme jeden objekt JSON User s id 0. Teraz máme mikroslužbu, ktorá nám umožňuje načítať Používateľ údaje.

6. Predĺženie trasy

Načítanie údajov je dôležitou úlohou väčšiny mikroslužieb.

Musíme však tiež byť schopní ukladať údaje do nášho dátového skladu. Javalin poskytuje celú sadu obslužných programov ciest, ktoré sú potrebné na vytváranie služieb.

Videli sme príklad ZÍSKAJTE vyššie, ale PATCH, POST, DELETE, a PUT sú tiež možné.

Ak zahrnieme aj Jacksona ako závislosť, môžeme automaticky analyzovať telá požiadaviek JSON do našich modelových tried. Napríklad:

app.post ("/") {ctx -> User user = ctx.bodyAsClass (User.class); }

by nám umožnilo chytiť JSON Používateľ objekt z tela žiadosti a preložiť do Používateľ modelový objekt.

7. Záver

Všetky tieto techniky môžeme kombinovať, aby sme vytvorili našu mikroslužbu.

V tomto článku sme videli, ako nastaviť Javalin a vytvoriť jednoduchú aplikáciu. Hovorili sme tiež o tom, ako používať rôzne typy metód HTTP na to, aby klienti mohli komunikovať s našou službou.

Pokročilejšie príklady použitia Javalinu nájdete v dokumentácii.

Ako vždy, kód možno nájsť na GitHub.


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