Java EE 6 ja RESTful Web Services Osa 1

Java EE 6 päivitys toi mukanaan hurjan kasan uutta työtä helpottavaa asiaa. Olen pelaillut Web Services tekniikoilla jo pitkän aikaa – itse asiassa kauan ennen kuin edes termiä Web Service oli olemassa. Nykypäivän Web Serviceksi on muotoutunut WS-I mukaan yhdistelmä HTTP protokollaa, SOAP kuoria, WSDL rajapintakuvauksia jne. Ongelmana SOAP:n kanssa on kuitenkin, että se on hurjan monimutkainen ratkaisu monimutkaisiin ongelmiin. Kuitenkin monissa tilanteissa olisi käyttöä yksinkertaisemmalle ja tehokkaammalle ratkaisulle.

REST on noussut esiin vastarintaliikkeenä massiiviselle SOAP pinolle. Representational State Transfer eli REST on yksinkertaisempi versio jossa käytetään HTTP protokollan moodeja kuten GET, POST, PUT, DELETE ja ajattelutapa on enemmän resurssin manipuloimista kuin muuta. REST nojaa tietoturvan suhteen HTTP protokollan olemassaoleviin ratkaisuihin, ja tämä puolestaan avaa uusia mahdollisuuksia tehdä asiakasohjelmia esim. Android kännykkään tai AJAX-sovelluksiin – tai vaikkapa Windows 7 Gadgetteihin kuten olen itse tehnyt.

Java EE 6 alusta päivitti olemassaolevan JAX-WS standardin rinnalle uuden JAX-RS 1.1 rajapinnan ja toteutuksen. Näin kaikista EE 6 yhteensopivista palvelimista tulee löytymään tarvittava tuki ja kirjastot samantien.

REST käyttöönottoon on muutama keino, esittelen tässä niistä java-kehittäjän kannalta tutuimman. Rekisteröidään web.xml tiedostossa JERSEY-toteutuksen REST handler servlet käsittelemään tietyt osoitteet, esim. tähän tapaan:

<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>

Ja näin meillä on REST endpoint käytössä. Tämän jälkeen tehdään tavallinen Java-luokka, ja koristellaan sitä hieman. Tässä esimerkki REST pohjaisesta Hello World:stä

@Path(”items”)

@Produces(MediaType.APPLICATION_XML)

public class HelloService {

@GET

public String getHelloGreeting() {

return ”<a>Hello, it’s ” + new Date()+”</a>”;

}

}

Tässä näkyy muutama tärkeimmistä annotaatiosta. @Path määrittää mistä osoitteesta palvelu on tarjolla, tässä esimerkissä siis /resources/items. @Produces määrittää millaista content typeä ulos tarjoillaan. @GET liittää metodin HTTP GET metodiin, kun sitä kutsutaan, metodi suoritetaan ja sen tuottama tulos palautetaan kutsujalle. Tässä esimerkissä on palautettu yksinkertainen XML pätkä ihan puhtaasti merkkijonona, joka on yksi mahdollisuus. Nämä uudet annotaatiot löytyvät pääosin paketista javax.ws.rs – joka on siis Java EE 6 alustan standardipaketti.

Entäpä jos haluamme ottaa GET metodissa jotain parametreja? Helpointa on ottaa ne Query Param tyyppisinä, eli resurssi-url osoitteen perässä. Tähän tapaan:

http://localhost:21136/RESTDemo/resources/items?name=Arto

Eli muutamme lähdekoodia siten että se ottaa yhden name-nimisen query parameterin, näin:

@GET

public String getHelloGreeting(@QueryParam(value=”name”) String name) {

return ”<a>Hello, ” + name + ”, it’s ” + new Date()+”</a>”;

}

Kätevää, eikö? Eikä siinä vielä kaikki.. Mutta palaamme mielenkiintoisimpiin piirteisiin tulevissa jaksoissa, jahka intoudun taas kirjailemaan 😉

Mainokset

Vastaa

Täytä tietosi alle tai klikkaa kuvaketta kirjautuaksesi sisään:

WordPress.com-logo

Olet kommentoimassa WordPress.com -tilin nimissä. Log Out / Muuta )

Twitter-kuva

Olet kommentoimassa Twitter -tilin nimissä. Log Out / Muuta )

Facebook-kuva

Olet kommentoimassa Facebook -tilin nimissä. Log Out / Muuta )

Google+ photo

Olet kommentoimassa Google+ -tilin nimissä. Log Out / Muuta )

Muodostetaan yhteyttä palveluun %s