Budovanie API pomocou Spark Java Framework

1. Úvod

V tomto článku budeme mať rýchly úvod do rámca Spark. Rámec Spark je webový rámec rýchleho vývoja inšpirovaný rámcom Sinatra pre Ruby a je založený na filozofii Java 8 Lambda Expression, vďaka čomu je menej verný ako väčšina aplikácií napísaných v iných rámcoch Java.

Je to dobrá voľba, ak chcete mať Node.js ako skúsenosti pri vývoji webového API alebo mikroslužieb v Jave. So Sparkom môžete mať API REST pripravené na poskytovanie JSON v menej ako desiatich riadkoch kódu.

Krátko začneme príkladom „Hello World“, po ktorom bude nasledovať jednoduché rozhranie REST API.

2. Maven závislosti

2.1. Spark Framework

Zahrňte do svojho súboru nasledujúcu závislosť Maven pom.xml:

 com.sparkjava spark-core 2.5.4 

Najnovšiu verziu programu Spark nájdete na serveri Maven Central.

2.2. Gsonova knižnica

Na rôznych miestach v príklade budeme na operácie JSON používať knižnicu Gson. Ak chcete zahrnúť Gson do svojho projektu, zahrňte túto závislosť do svojho pom.xml:

 com.google.code.gson gson 2.8.0 

Najnovšiu verziu aplikácie Gson nájdete na serveri Maven Central.

3. Začíname so Spark Framework

Poďme sa pozrieť na základné stavebné prvky aplikácie Spark a ukážeme si rýchlu webovú službu.

3.1. Trasy

Webové služby v prostredí Spark Java sú postavené na trasách a ich spracovateľoch. Trasy sú základnými prvkami programu Spark. Podľa dokumentácie je každá trasa zložená z troch jednoduchých častí - a sloveso, a cestaa zavolaj späť.

  1. The sloveso je metóda zodpovedajúca metóde HTTP. Metódy slovesa zahŕňajú: dostať, zverejniť, vložiť, odstrániť, hlava, vystopovať, pripojiť sa, a možnosti
  2. The cesta (nazýva sa tiež vzor trasy) určuje, ktoré identifikátory URI má trasa počúvať, a poskytnúť na ne odpoveď
  3. The zavolaj späť je obslužná funkcia, ktorá je vyvolaná pre dané sloveso a cestu za účelom vygenerovania a vrátenia odpovede na zodpovedajúcu požiadavku HTTP. Pri spätnom volaní sa objekt žiadosti a objekt odpovede považujú za argumenty

Tu ukážeme základnú štruktúru trasy, ktorá používa dostať sloveso:

get ("/ your-route-path /", (request, response) -> {// your callback code});

3.2. Hello World API

Vytvorme jednoduchú webovú službu, ktorá má dve cesty pre požiadavky GET a ako odpoveď vráti správy „Hello“. Tieto trasy používajú: dostať metóda, čo je statický import z triedy iskra. Spark:

import statickej iskry. Spark. *; public class HelloWorldService {public static void main (String [] args) {get ("/ hello", (req, res) -> "Hello, world"); get ("/ hello /: name", (req, res) -> {return "Hello," + req.params (": name");}); }}

Prvý argument k dostať metóda je cesta k trase. Prvá trasa obsahuje statickú cestu predstavujúcu iba jeden URI ("/Ahoj").

Cesta druhej trasy („/ Ahoj /: meno“) obsahuje zástupný symbol pre "názov" parameter, ktorý je označený predbežnou úpravou parametra dvojbodkou („:“). Táto trasa bude vyvolaná ako odpoveď na GET požiadavky na URI, ako napr „/ Ahoj / Joe“ a „/ Ahoj / Mary“.

Druhým argumentom dostať metóda je výraz lambda, ktorý dáva tomuto rámcu príchuť funkčného programovania.

Výraz lambda má ako argument požiadavku a odpoveď a pomáha vrátiť odpoveď. Našu logiku radiča vložíme do výrazu lambda pre cesty REST API, ako uvidíme ďalej v tomto tutoriále.

3.3. Testovanie rozhrania Hello World API

Po vedení triedy HelloWorldService ako normálna trieda Java budete mať prístup k službe na jej predvolenom porte 4567 pomocou trás definovaných v dostať vyššie.

Pozrime sa na požiadavku a odpoveď na prvú trasu:

Požiadavka:

ZÍSKAŤ // localhost: 4567 / ahoj

Odpoveď:

Ahoj svet

Vyskúšajme druhú cestu a prejdime názov parameter v jeho ceste:

Požiadavka:

ZÍSKAŤ // localhost: 4567 / ahoj / baeldung

Odpoveď:

Dobrý deň, baeldung

Pozrite sa, ako je umiestnené text „Baeldung“ v URI bol použitý na zosúladenie vzoru trasy „/ Ahoj /: meno“ - spôsobenie vyvolania funkcie obsluhy spätného volania druhej trasy.

4. Návrh služby RESTful

V tejto časti navrhneme jednoduchú webovú službu REST pre nasledujúce položky Používateľ subjekt:

verejná trieda Používateľ {private String id; private String meno; private String priezvisko; súkromný reťazcový e-mail; // konštruktory, getre a setre}

4.1. Trasy

Vymenujme trasy, ktoré tvoria naše API:

  • GET / users - získa zoznam všetkých používateľov
  • GET / users /: id - získa používateľa s daným id
  • POST / users /: id - pridať používateľa
  • PUT / users /: id - úprava konkrétneho používateľa
  • MOŽNOSTI / users /: id - skontrolujte, či existuje užívateľ s daným id
  • DELETE / users /: id - odstránenie konkrétneho používateľa

4.2. Užívateľská služba

Nižšie je UserService rozhranie deklarujúce operácie CRUD pre Windows Používateľ subjekt:

verejné rozhranie UserService {public void addUser (užívateľský užívateľ); verejná zbierka getUsers (); public User getUser (ID reťazca); public User editUser (User user) hodí UserException; public void deleteUser (ID reťazca); public boolean userExist (reťazec id); }

Na demonštračné účely poskytujeme a Mapa implementácie tohto UserService rozhranie v kóde GitHub na simuláciu vytrvalosti. Môžete dodať svoju vlastnú implementáciu s databázou a vrstvou vytrvalosti podľa vášho výberu.

4.3. Štruktúra odpovede JSON

Ďalej uvádzame štruktúru JSON odpovedí použitých v našej službe REST:

{status: message: data:}

The postavenie hodnota poľa môže byť buď ÚSPECH alebo CHYBA. The údaje pole bude obsahovať JSON reprezentáciu návratových údajov, napríklad a Používateľ alebo zbierka Používatelia.

Ak sa nevracajú žiadne údaje, alebo ak postavenie je CHYBA, naplníme správa pole na vyjadrenie dôvodu chyby alebo nedostatku návratových údajov.

Predstavme si vyššie uvedenú štruktúru JSON pomocou triedy Java:

public class StandardResponse {private StatusResponse status; súkromná reťazcová správa; súkromné ​​údaje JsonElement; public StandardResponse (StatusResponse status) {// ...} public StandardResponse (StatusResponse status, String message) {// ...} public StandardResponse (StatusResponse status, JsonElement data) {// ...} // zakladatelia a zakladatelia }

kde StatusResponse je enum definované nižšie:

public enum StatusResponse {SUCCESS ("Úspech"), CHYBA ("Chyba"); stav súkromného reťazca; // konštruktory, getre}

5. Implementácia RESTful služieb

Teraz poďme implementovať trasy a obslužné rutiny pre naše REST API.

5.1. Vytváranie radičov

Nasledujúca trieda Java obsahuje trasy pre naše API vrátane slovies a ciest a obrys manipulátorov pre každú cestu:

public class SparkRestExample {public static void main (String [] args) {post ("/ users", (request, response) -> {// ...}); get ("/ users", (request, response) -> {// ...}); get ("/ users /: id", (request, response) -> {// ...}); put ("/ users /: id", (request, response) -> {// ...}); delete ("/ users /: id", (request, response) -> {// ...}); options ("/ users /: id", (request, response) -> {// ...}); }}

V nasledujúcich pododdieloch si ukážeme úplnú implementáciu každého obslužného programu trasy.

5.2. Pridať používateľa

Nižšie je príspevok obslužná rutina odpovede na metódu, ktorá pridá a Používateľ:

post ("/ users", (request, response) -> {response.type ("application / json"); User user = new Gson (). fromJson (request.body (), User.class); userService.addUser (užívateľ); vrátiť nový Gson () .toJson (nový StandardResponse (StatusResponse.SUCCESS));});

Poznámka: V tomto príklade reprezentácia JSON súboru Používateľ objekt je odovzdaný ako nespracované telo požiadavky POST.

Vyskúšajme trasu:

Požiadavka:

POST // localhost: 4567 / users {"id": "1012", "email": "[chránený e-mailom]", "meno": "Mac", "priezvisko": "Mason1"}

Odpoveď:

{"status": "ÚSPECH"}

5.3. Získajte všetkých používateľov

Nižšie je dostať obslužná rutina odpovede na metódu, ktorá vráti všetkých používateľov z UserService:

get ("/ users", (request, response) -> {response.type ("application / json"); return new Gson (). toJson (new StandardResponse (StatusResponse.SUCCESS, new Gson () .toJsonTree (userService. getUsers ())));});

Teraz otestujme trasu:

Požiadavka:

ZÍSKAŤ // localhost: 4567 / používateľov

Odpoveď:

{"status": "SUCCESS", "data": [{"id": "1014", "meno": "John", "priezvisko": "Miller", "email": "[chránený e-mailom]"} , {"id": "1012", "firstName": "Mac", "lastName": "Mason1", "email": "[chránený e-mailom]"}]}

5.4. Získajte používateľa podľa ID

Nižšie je dostať obslužná rutina odpovede na metódu, ktorá vráti a Používateľ s daným id:

get ("/ users /: id", (request, response) -> {response.type ("application / json"); return new Gson (). toJson (new StandardResponse (StatusResponse.SUCCESS, new Gson () .toJsonTree (userService.getUser (request.params (": id"))))))}}};

Teraz otestujme trasu:

Požiadavka:

ZÍSKAŤ // localhost: 4567 / používateľov / 1012

Odpoveď:

{"status": "SUCCESS", "data": {"id": "1012", "firstName": "Mac", "lastName": "Mason1", "email": "[chránený e-mailom]"}}

5.5. Upraviť používateľa

Nižšie je dať obslužná rutina odpovede na metódu, ktorá upravuje používateľa, ktorý má id dodané vo vzore trasy:

put ("/ users /: id", (request, response) -> {response.type ("application / json"); User toEdit = new Gson (). fromJson (request.body (), User.class); Používateľ editedUser = userService.editUser (toEdit); if (editedUser! = Null) {return new Gson (). ToJson (new StandardResponse (StatusResponse.SUCCESS, new Gson () .toJsonTree (editedUser)));} else {return new Gson (). ToJson (nový StandardResponse (StatusResponse.ERROR, nový Gson () .toJson ("Používateľ nebol nájdený alebo došlo k chybe pri úprave"))))}}));

Poznámka: V tomto príklade sa údaje odovzdávajú v nespracovanom tele požiadavky POST ako objekt JSON, ktorého názvy vlastností sa zhodujú s poľami Používateľ objekt, ktorý sa má upraviť.

Vyskúšajme trasu:

Požiadavka:

PUT // localhost: 4567 / users / 1012 {"lastName": "Mason"}

Odpoveď:

{"status": "SUCCESS", "data": {"id": "1012", "firstName": "Mac", "lastName": "Mason", "email": "[chránený e-mailom]}}}

5.6. Odstrániť používateľa

Nižšie je vymazať obslužná rutina odpovede na metódu, ktorá vymaže Používateľ s daným id:

delete ("/ users /: id", (request, response) -> {response.type ("application / json"); userService.deleteUser (request.params (": id")); vrátiť nový Gson (). toJson (nový StandardResponse (StatusResponse.SUCCESS, „užívateľ vymazaný“)));});

Teraz otestujme trasu:

Požiadavka:

DELETE // localhost: 4567 / users / 1012

Odpoveď:

{"status": "ÚSPECH", "správa": "používateľ odstránený"}

5.7. Skontrolujte, či používateľ existuje

The možnosti metóda je dobrou voľbou pre podmienenú kontrolu. Nižšie je možnosti obslužný program odozvy metódy, ktorý skontroluje, či Používateľ s daným id existuje:

options ("/ users /: id", (request, response) -> {response.type ("application / json"); return new Gson (). toJson (new StandardResponse (StatusResponse.SUCCESS, (userService.userExist (request) .params (": id")))? "Používateľ existuje": "Používateľ neexistuje"));});

Teraz otestujme trasu:

Požiadavka:

MOŽNOSTI // localhost: 4567 / users / 1012

Odpoveď:

{"status": "SUCCESS", "message": "Používateľ existuje"}

6. Záver

V tomto článku sme mali rýchly úvod do rámca Spark pre rýchly vývoj webu.

Tento rámec je podporovaný hlavne na generovanie mikroslužieb v Jave. Node.js vývojári so znalosťou Java, ktorí chcú využiť knižnice postavené na knižniciach JVM, by sa pri použití tohto rámca mali cítiť ako doma.

A ako vždy, všetky zdroje tohto tutoriálu nájdete v projekte Github.


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