„8. REST (2012)” változatai közötti eltérés
a Ferrero átnevezte a(z) OotWebREST2012 lapot a következő névre: 8. REST (2012) |
aNincs szerkesztési összefoglaló |
||
| (28 közbenső módosítás, amit 5 másik szerkesztő végzett, nincs mutatva) | |||
| 1. sor: | 1. sor: | ||
=HTTP= | |||
* HTTP GET | * HTTP GET | ||
[[ | [[File:HTTP_GET.png]] | ||
* HTTP POST | * HTTP POST | ||
[[ | [[File:HTTP_POST.png]] | ||
=REST= | |||
REST = Representational State Transfer | REST = Representational State Transfer | ||
==RESTful HTTP== | |||
* HTTP protokoll kibövítése: GET, POST, PUT, DELETE | * HTTP protokoll kibövítése: GET, POST, PUT, DELETE | ||
* Bemenö paraméterek: URL része, URL query string, POST paraméter, HTTP body | * Bemenö paraméterek: URL része, URL query string, POST paraméter, HTTP body | ||
| 16. sor: | 15. sor: | ||
* nagyon egyszerü: böngészőből is tesztelhetö | * nagyon egyszerü: böngészőből is tesztelhetö | ||
==REST alapelvei== | |||
* Minden eröforráshoz azonosító rendelése | * 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) | ||
* Dolgok összekapcsolása | * Erőforrások lehetnek: doksik, adatok (szamitas eredmenye), szolgáltatások (SOAP, metaadatok, stb), fogalmak | ||
* CRUD müveletek használata | * Dolgok összekapcsolása (jó URL cimet kell választani) | ||
* CRUD müveletek használata (Create, Read, Update, Delete) | |||
* Állapotmentes kommunikáció | * Á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== | |||
[[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 | |||
* '''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'''<br /> | |||
<code> | |||
@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; } | |||
} | |||
</code> | |||
'''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<br /> | |||
'''HTTP content-type annotációk:''' @Consumes, @Produces | |||
= Elosztott technológiák összefoglaló = | |||
{|class="wikitable" | |||
! | |||
!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 | |||
[[Kategória:Infoszak]] | |||