„8. REST (2012)” változatai közötti eltérés
Ugrás a navigációhoz
Ugrás a kereséshez
(Új oldal, tartalma: „{{Csonk}} ==HTTP== * HTTP GET Fájl:HTTP_GET.png * HTTP POST Fájl:HTTP_POST.png ==REST== REST = Representational State Transfer ===RESTful HTTP=== * HTTP pr…”) |
a |
||
(29 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]] |
A lap jelenlegi, 2020. augusztus 3., 22:05-kori változata
Tartalomjegyzék
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 |