„8. REST (2012)” változatai közötti eltérés

A VIK Wikiből
Ugrás a navigációhoz Ugrás a kereséshez
a (autoedit v2: fájlhivatkozások egységesítése, az új közvetlenül az adott fájlra mutat)
3. sor: 3. sor:
 
=HTTP=
 
=HTTP=
 
* HTTP GET
 
* HTTP GET
[[Fájl:HTTP_GET.png]]
+
[[File:HTTP_GET.png]]
 
* HTTP POST
 
* HTTP POST
[[Fájl:HTTP_POST.png]]
+
[[File:HTTP_POST.png]]
  
 
=REST=
 
=REST=
33. sor: 33. sor:
  
 
==Műveletek erőforrásokon==
 
==Műveletek erőforrásokon==
[[Fájl:muv_eroforr.png]]
+
[[File:muv_eroforr.png]]
 
* '''safe:''' a kliens olyan műveletet hajt végre, ami csak lekérdez, és nem tehető felelőssé az okozott mellékhatásokért
 
* '''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
 
* '''idempotent''': a művelet ismételt végrehajtása ugyanazt az eredményt produkálja

A lap 2017. július 12., 14:14-kori változata

Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni
Az oldal még csonk. Segíts a szerkesztésében
Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni

Ha nem tudod, hogy állj neki, olvasd el a tutorialt.

HTTP

  • HTTP GET
Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni
  • HTTP POST
Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni

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

Hiba a bélyegkép létrehozásakor: Nem lehet a bélyegképet a célhelyre menteni
  • 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