JAX-RS je iba API!

1. Prehľad

Paradigma REST existuje už pekných pár rokov a stále si získava veľkú pozornosť.

Rozhranie RESTful API je možné v Jave implementovať rôznymi spôsobmi: môžete použiť Spring, JAX-RS alebo môžete napísať iba svoje vlastné holé servlety, ak ste dobrí a odvážni. Všetko, čo potrebujete, je schopnosť odhaliť metódy HTTP - zvyšok je o tom, ako ich usporiadate a ako usmerňujete klienta pri volaní na vaše API.

Ako je zrejmé z názvu, tento článok sa bude týkať JAX-RS. Čo však znamená „iba API“? To znamená, že sa tu zameriavame na objasnenie nejasností medzi JAX-RS a jeho implementáciami a na ponúknutie príkladu toho, ako vyzerá správny webový server JAX-RS.

2. Zahrnutie do Java EE

JAX-RS nie je nič iné ako špecifikácia, sada rozhraní a anotácií, ktoré ponúka Java EE. A potom, samozrejme, máme implementácie; niektoré zo známejších sú RESTEasy a Jersey.

Tiež, ak sa niekedy rozhodnete postaviť aplikačný server kompatibilný s JEE, chlapci z Oracle vám povedia, že okrem iných vecí by váš server mal poskytovať implementáciu JAX-RS pre nasadené aplikácie. Preto sa volá Java Enterprise Edition Plošina.

Ďalším dobrým príkladom špecifikácie a implementácie sú JPA a Hibernate.

2.1. Ľahké vojny

Ako teda toto všetko pomáha nám, vývojárom? Pomoc spočíva v tom, že naše nasaditeľné komponenty môžu a majú byť veľmi tenké, čo umožňuje aplikačnému serveru poskytnúť potrebné knižnice. To platí aj pri vývoji RESTful API: konečný artefakt by nemal obsahovať žiadne informácie o použitej implementácii JAX-RS.

Iste, môžeme poskytnúť implementáciu (tu je návod pre RESTeasy). Ale potom už nemôžeme našu aplikáciu nazývať „Java EE app“. Ak zajtra niekto príde a povie „Dobre, je čas prejsť na Glassfish alebo Payara, JBoss bol príliš drahý!„, Možno by sme to dokázali, ale nebude to ľahká práca.

Ak poskytujeme našu vlastnú implementáciu, musíme sa ubezpečiť, že server vie, že má vylúčiť svoju vlastnú - to sa zvyčajne deje tak, že v nasaditeľnom súbore je vlastný súbor XML. Nie je potrebné pripomínať, že takýto súbor by mal obsahovať najrôznejšie značky a pokyny, o ktorých nikto nič nevie, okrem vývojárov, ktorí zo spoločnosti odišli pred tromi rokmi.

2.2. Vždy poznajte svoj server

Povedali sme si, že by sme mali využiť platformu, ktorú ponúkame.

Pred rozhodnutím o použití servera by sme mali zistiť, akú implementáciu JAX-RS (meno, dodávateľa, verziu a známe chyby) poskytuje, prinajmenšom pre produkčné prostredia. Napríklad Glassfish sa dodáva s Jersey, zatiaľ čo Wildfly alebo Jboss s RESTEasy.

To samozrejme znamená trochu času stráveného výskumom, ale má sa to vykonať iba raz, na začiatku projektu alebo pri jeho migrácii na iný server.

3. Príklad

Ak chcete začať hrať s JAX-RS, najkratšia cesta je: mať projekt Maven webapp s nasledujúcou závislosťou v pom.xml:

 poskytnutý javax javaee-api 7.0 

Používame JavaEE 7, pretože už existuje veľa aplikačných serverov, ktoré ho implementujú. Táto jar API obsahuje poznámky, ktoré musíte použiť, umiestnené v balíku javax.ws.rs. Prečo je rozsah „poskytovaný“? Pretože tento jar nemusí byť ani vo finálnej zostave - potrebujeme ho v čase kompilácie a je poskytovaný serverom za behu.

Po pridaní závislosti musíme najskôr napísať vstupnú triedu: prázdnu triedu, ktorá sa rozširuje javax.ws.rs.core.Application a je označený poznámkou javax.ws.rs.ApplicationPath:

@ApplicationPath ("/ api") verejná trieda RestApplication rozširuje aplikáciu {} 

Vstupnú cestu sme definovali ako bytosť / api. Bez ohľadu na ďalšie cesty, ktoré deklarujeme pre svoje zdroje, budú mať predponu / api.

Ďalej sa pozrime na zdroj:

@Path ("/ notifications") verejná trieda NotificationsResource {@GET @Path ("/ ping") public Response ping () {return Response.ok (). Entity ("Service online"). Build (); } @GET @Path ("/ get / {id}") @Produces (MediaType.APPLICATION_JSON) public Response getNotification (@PathParam ("id") int id) {return Response.ok () .entity (new Notification (id) , "john", "upozornenie na test")) .build (); } @POST @Path ("/ post /") @Consumes (MediaType.APPLICATION_JSON) @Produces (MediaType.APPLICATION_JSON) verejná odpoveď postNotification (oznámenie) {návrat Response.status (201) .entity (oznámenie) .build () ; }}

Máme jednoduchý ping koncový bod, ktorý môžeme zavolať a skontrolovať, či je naša aplikácia spustená, GET a POST pre upozornenie (toto je iba POJO s atribútmi plus getre a settery).

Nasadiť túto vojnu na ľubovoľný aplikačný server implementujúci JEE7 a nasledujúce príkazy budú fungovať:

curl // localhost: 8080 / simple-jaxrs-ex / api / notifications / ping / curl // localhost: 8080 / simple-jaxrs-ex / api / notifications / get / 1 curl -X POST -d '{"id" : 23, "text": "lorem ipsum", "používateľské meno": "johana"} '// localhost: 8080 / simple-jaxrs-ex / api / notifications / post / --header "Typ obsahu: aplikácia / json „

Kde simple-jaxrs-ex je koreň kontextu webapp.

Toto bolo testované s programami Glassfish 4.1.0 a Wildfly 9.0.1.Final. Upozorňujeme, že posledné dva príkazy nebudú s programom Glassfish 4.1.1 kvôli tejto chybe fungovať. Je zrejmé, že v tejto verzii Glassfish je to známy problém, pokiaľ ide o serializáciu JSON (ak musíte použiť túto verziu servera, budete musieť spravovať zaraďovanie JSON sami)

4. Záver

Na konci tohto článku nezabúdajte, že JAX-RS je výkonné API a väčšina (ak nie všetky) vecí, ktoré potrebujete, je už implementovaná vaším webovým serverom. Nie je potrebné meniť svoje nasaditeľné na nezvládnuteľnú hromadu knižníc.

Tento dokument predstavuje jednoduchý príklad a veci sa môžu komplikovať. Napríklad budete možno chcieť napísať svojich vlastných zoraditeľov. Ak je to potrebné, vyhľadajte návody, ktoré váš problém vyriešia pomocou JAX-RS, nie pomocou Jersey, Resteasy alebo inej konkrétnej implementácie. Je veľmi pravdepodobné, že váš problém možno vyriešiť jednou alebo dvoma anotáciami.


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