8. REST (2012)

A VIK Wikiből
(OotWebREST2012 szócikkből átirányítva)

HTTP

  • HTTP GET

  • HTTP POST

REST

REST = Representational State Transfer

RESTful HTTP

  • HTTP protokoll kibövítése: GET, POST, PUT, DELETE
  • Bemenö paraméterek: URL része, URL query string, POST paraméter, HTTP body
  • Visszatérési érték: HTTP body
  • nagyon egyszerü: böngészőből is tesztelhetö

REST alapelvei

  • Minden eröforráshoz azonosító rendelése (URI, URN, URL a jó, mert egyértelmű, könnyű feloldani, független a mögöttes technológiától)
  • Erőforrások lehetnek: doksik, adatok (szamitas eredmenye), szolgáltatások (SOAP, metaadatok, stb), fogalmak
  • Dolgok összekapcsolása (jó URL cimet kell választani)
  • CRUD müveletek használata (Create, Read, Update, Delete)
  • Állapotmentes kommunikáció

Többféle adatreprezentáció

  • HTML (emberek szamara) vagy XML, JSON, stb. gépek számára
  • változhat a struktúra

Állapotmentes kommunikáció

A REST önmagában állapotmentes

  • De az alkalmazásnak lehet állapota (kliens oldalon, erőforrásban tárolva)
  • Skálázhatósági előnyök emiatt (nincs session, felcserélhető szerverek)

Műveletek erőforrásokon

  • safe: a kliens olyan műveletet hajt végre, ami csak lekérdez, és nem tehető felelőssé az okozott mellékhatásokért
  • idempotent: a művelet ismételt végrehajtása ugyanazt az eredményt produkálja
  • cacheable: akár a proxy vagy a gateway is cachelheti a szerver kapcsolódása nélkül. Képek esetén ajánlatos a long live beállitása.

REST kritikák

  • CRUD műveleteken kívül másra nem alkalmas
  • Nincs interfészleíró (ami leírja a műveleteket és a paraméterek típusát (szemantikát nem, azaz kliens stub -> szerver skeleton generálás))
  • Túl sok belső részletet elárul (igen, mert szemlélet más: műveletközpontú helyett adatközpontú)
  • Tervezési guideline-ok hiánya
  • Middleware funkciók hiánya (nincs tranzakció kezelés, meg nem biztos hogy jönn a HTTP 200 OK válasz)
  • Nincs publish-subscribe (pl egy RSS proginak) ill. aszinkron kommunikáció (ha a szerver hosszú müveletet végez, megoldásként HTTP 202 Accepted)

JAX-RS

  • JAX-RS: Java API for RESTful Web Services
  • Java osztályok leképzése REST erőforrásokra (annotációk)

Számológép példa revisited
@Path("calculator") public class Calculator{

    @GET
    @Path("add")
    @Produces("text/plain")
    public double add(@QueryParam("left") double left, @QueryParam("right") double right) { return left+right; }

}

Lehetséges visszatérési értékek

  • void, null (204 no content status code)
  • Response
  • GenericEntity
  • egyébb
  • Stringet támogat, double-t nem
    • double-re a megoldás a "MessageBodyWriter" implementálása

HTTP method annotációk: @GET, @POST, @PUT, @DELETE, @HEAD
HTTP content-type annotációk: @Consumes, @Produces

Elosztott technológiák összefoglaló

  REST RMI WS CORBA
Különbözö programnyelvek között müködik igen nem igen igen
Kommunikációs protokoll HTTP RMI SOAP IIOP
Interfészleíró nincs/WADL Java Interface WSDL IDL
Katalógus - JNDI UDDI Naming service
Elosztott igen igen igen igen
Szakványos igen nem igen igen
Széles körü támogatás igen nem igen igen
Egyszerü igen igen nem nem
Egyszerü API igen igen igen nem
Gyors igen igen nem igen
Biztonság, tranzakciók nem nem igen nem