CodeGym/Java blog/Véletlen/A REST áttekintése. 2. rész: Kommunikáció kliens és szerv...
John Squirrels
Szint
San Francisco

A REST áttekintése. 2. rész: Kommunikáció kliens és szerver között

Megjelent a csoportban
A REST áttekintése. 1. rész: Mi az a REST? Ebben a részben mélyen belemerülünk abba, hogyan zajlik a kommunikáció az ügyfél és a szerver között. Útközben új kifejezéseket fogunk feltárni és elmagyarázni. A REST áttekintése.  2. rész: Kommunikáció a kliens és a szerver között – 1Annak érdekében, hogy minden világos legyen, elemezzük a kliens-szerver kommunikációt példaként egy RESTful alkalmazás segítségével. Tegyük fel, hogy egy webalkalmazást fejlesztünk, amely információkat tárol az ügyfelekről és rendeléseikről. Más szóval, rendszerünk képes bizonyos entitásokon műveleteket végrehajtani: létrehozni, szerkeszteni és törölni, valamint információkat megjeleníteni róluk. Ezek az entitások a következők lesznek:
  • ügyfelek (vevők)
  • megrendelések (vásárlói rendelések)
  • cikkek (termékek)
A RESTful architektúrában az ügyfelek kéréseket küldenek a szervernek az adatok lekérésére vagy módosítására, majd a szerverek válaszokat küldenek az ügyfeleknek a kéréseikre.

Kérések

Az ügyfelek kérései szinte mindig a HTTP protokoll használatával történnek. Általában a HTTP kérések több összetevőből állnak:
  • HTTP módszer
  • fejléc
  • URI
  • kérelmező szerv
Az alábbiakban részletesebben megvizsgáljuk az egyes összetevőket.

URI-k és erőforrások

Azokat az adatokat, amelyeket az ügyfelek kéréseken keresztül kapnak vagy módosítanak, erőforrásoknak nevezzük. Az ügyfél-szerver kommunikáció az erőforrások manipulálásáról szól. A REST-ben az erőforrások bármit jelentenek, aminek nevet adhatsz. Bizonyos értelemben olyanok, mint a Java osztályai. Java-ban bármihez létrehozhatunk osztályt. Tehát a REST-ben az erőforrás bármi lehet: felhasználó, dokumentum, jelentés, megrendelés. Ez lehet valamilyen entitás absztrakciója, vagy valami konkrét, például kép, videó, animáció vagy PDF-fájl. Példánkban 3 forrásunk van:
  • ügyfelek (vevők)
  • megrendelések (vásárlói rendelések)
  • cikkek (termékek)
Az ügyfelek kéréseket küldenek a végpontoknak nevezett erőforrás-helyekre. Egyszerűen fogalmazva, a végpont olyan, mint egy cím a hálózaton. Ha mélyebbre merülünk, azt mondhatjuk, hogy egy végpont egy URI, azaz egy absztrakt vagy fizikai erőforrást azonosító karaktersorozat. Egységes erőforrás-azonosító (URI) Néha egy végpontot vagy URI-t útvonalnak neveznek, ami az erőforrás elérési útját jelenti. Ebben a cikkben az URI kifejezést használjuk. Minden egyes erőforrásnak egyedi URI-vel kell rendelkeznie. A kiszolgáló fejlesztője felelős azért, hogy minden erőforrás mindig saját URI-val rendelkezzen. Példánkban mi vagyunk a fejlesztők, tehát úgy fogjuk csinálni, ahogy tudjuk. Ahogyan a relációs adatbázisokban gyakran szokás numerikus azonosítókat rendelni elsődleges kulcsként, a REST-ben minden erőforrásnak saját azonosítója van. A REST erőforrás-azonosítója gyakran megegyezik az erőforrással kapcsolatos információkat tároló adatbázis rekordjának azonosítójával. A REST URI-k általában valamely erőforrást leíró főnév többes számú alakjával kezdődnek. Például, "
  • /customers — az összes elérhető ügyfél URI-je
  • /customers/23 — egy adott ügyfél URI-je, azaz a 23-as azonosítójú ügyfél
  • /customers/4 — egy adott ügyfél URI-je, azaz az ID=4-es ügyfél.
De ez még nem minden. Az URI-t rendelések hozzáadásával bővíthetjük:
  • /customers/4/orders — A 4. számú ügyfél által leadott összes megrendelés URI-ja
  • /customers/1/orders/12 — Az 1. számú ügyfél által készített 12. számú rendelés URI-je.
Ha további termékek hozzáadásával folytatjuk a bővítést, a következőket kapjuk:
  • /customers/1/orders/12/items — A 12. számú rendelés összes termék listájának URI-je, amelyet az 1. számú ügyfél készített.
Ahogy hozzáadjuk a beágyazási szinteket, az a fontos, hogy az URI-k intuitívak legyenek.

HTTP módszer

A HTTP metódus egy tetszőleges karaktersorozat (kivéve a vezérlőkaraktereket és a határolókat), amely az erőforráson végrehajtott fő műveletet jelzi. Számos általános HTTP-módszer létezik. Felsoroljuk azokat, amelyeket a RESTful szolgáltatásokban leggyakrabban használnak:
  • GET — Információt kaphat egy adott erőforrásról (az azonosítóján keresztül) vagy egy erőforrásgyűjteményről
  • POST – Hozzon létre egy új erőforrást
  • PUT – Erőforrás módosítása (azonosítójával)
  • TÖRLÉS – Erőforrás törlése (az azonosítójával)

Fejlécek

A kérések és a válaszok HTTP-fejléceket tartalmaznak. További információkat közölnek a kérelemről (vagy válaszról). A fejlécek kulcs-érték párok. Megtekintheti a Wikipédián a leggyakoribb fejlécek listáját . Ami a REST-et illeti, az ügyfelek gyakran küldenek "Accept" fejlécet a kiszolgálónak küldött kérésekben. Ez a fejléc azért szükséges, hogy megmondja a szervernek, hogy az ügyfél milyen formátumban várja a választ. A MIME-típusok listája különféle formátumokat tartalmaz. A MIME (Multipurpose Internet Mail Extensions) egy specifikáció az információk kódolására és az üzenetek formázására, hogy azokat az interneten keresztül el lehessen küldeni. Minden MIME-típus két perjellel elválasztott részből áll – egy típusból és egy altípusból. Példák MIME-típusokra különböző típusú fájlokhoz:
  • szöveg — text/plain, text/css, text/html
  • kép — kép/png, kép/jpeg, kép/gif
  • audio – audio/wav, audio/mpeg
  • videó — video/mp4, video/ogg
  • alkalmazás – application/json, application/pdf, application/xml, application/octet-stream
Például egy kérésnek ilyen fejléce lehet:
Accept:application/json
Ez a fejléc közli a kiszolgálóval, hogy az ügyfél JSON-formátumban vár választ.

Kérelem szerve

Ezt az üzenetet küldi a kliens a szervernek. Az, hogy a kérésnek van-e törzse, a HTTP-kérés típusától függ. Például a GET és DELETE kérések általában nem tartalmaznak kéréstörzset. De a PUT és POST kérések igen – ez csak a kérés céljától függ. Végül is az adatok fogadásához és/vagy törléséhez egy azonosítóval (amely az URL-ben van átadva), nem kell további adatokat küldenie a szervernek. De egy új erőforrás létrehozásához (POST-kéréssel) el kell küldenie az erőforrást. Ugyanez igaz egy meglévő erőforrás módosítására is. A REST-ben a kérés törzsét leggyakrabban XML vagy JSON formátumban küldik el. A JSON formátum a leggyakoribb. Tegyük fel, hogy egy kérést szeretnénk küldeni a szervernek egy új erőforrás létrehozása érdekében. Ha nem felejtetted el, a vevői rendeléseket kezelő alkalmazás példáját vettük figyelembe. Tegyük fel, hogy új ügyfelet szeretnénk létrehozni. Esetünkben a következő ügyféladatokat tároljuk: Név, email cím, telefonszám. Ekkor a kérés törzse a következő JSON lehet:
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+1 (222) 333-4444"
}

A kérések összeállítása

Tehát megvizsgáltuk, hogy mi lehet az ügyfél kérésében. Most néhány példát mutatunk be a kérésekre a leírásokkal együtt
Kérés Leírás
GET /customers/23
Accept : application/json, application/xml
Információkat kaphat a 23. számú ügyfélről JSON vagy XML formátumban
POST /customers
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+1 (222) 333-4444"
}
Hozzon létre új ügyfelet a következő mezőkkel:
Név — Amigo
Email — amigo@jr.com
Telefonszám — +1 (222) 333-4444
PUT /customers/1
{
  "name" : "Ben",
  "email" : "bigben@jr.com",
  "phone" : "+86 (868) 686-8686"
}
Szerkessze az 1. számú vásárlót a következőképpen:
Név — Ben
Email — bigben@jr.com
Telefonszám — +86 (868) 686-8686
DELETE /customers/12/orders/6
Törölje a rendszerből a 12. számú ügyfél 6. számú megrendelését

Válaszok

Mondjunk néhány szót a szerver válaszairól. A válasz általában a következő részekből áll:
  • válaszkód
  • fejlécek
  • választest
Általában a válaszfejlécek nem sokban különböznek a kérésfejlécektől. Ezenkívül néhány fejléc mind a válaszokban, mind a kérésekben használatos. Szerintem a kérelmező szervvel kapcsolatban is minden világos. A szerv gyakran visszaküldi az ügyfél által kért információkat. A GET-kérésekre válaszul visszaküldött információk JSON-formátumúak is lehetnek. De az utolsó rész egy kicsit érdekesebb.

HTTP válaszkódok

Tekintsük részletesebben a HTTP válaszkódokat. A HTTP állapotkód a HTTP protokollon keresztül küldött kérésekre adott szerverválasz első sorának része. Ez egy egész szám, amely három tizedesjegyből áll. Az első számjegy a válasz állapotkód osztályát jelzi. A válaszkódot általában egy magyarázó kifejezés követi angolul, szóközzel elválasztva. Ez a kifejezés a válasz ember által olvasható oka. Példák:
  • 201 Létrehozva
  • 401 Jogosulatlan
  • 507 Elégtelen tárhely
A válaszkód közli az ügyféllel a kérés eredményét, és lehetővé teszi a következő lépések meghatározását. A válaszkódok több osztályra vagy csoportra oszthatók:
  • 1XX – Tájékoztató
  • 2XX — Ezek a kódok azt jelzik, hogy az ügyfél kérelmét sikeresen fogadták és feldolgozták
  • 3XX — Ezek a kódok tájékoztatják az ügyfelet arról, hogy a művelet sikeres befejezéséhez további kérést kell benyújtani, általában egy másik URI-ra.
  • 4XX — Ügyfél hiba. Az ilyen kódok helytelenül összeállított kérésből származhatnak. Egy másik példa a jól ismert "404 Not Found" kód, amely akkor fordulhat elő, amikor egy kliens nem létező erőforrást kér.
  • 5XX — Szerverhiba. Ezeket a kódokat a rendszer visszaküldi a kliensnek, ha a szerver felelős a művelet meghibásodásáért
A REST áttekintése. 3. rész: RESTful szolgáltatás kiépítése a Spring Booton
Hozzászólások
  • Népszerű
  • Új
  • Régi
Hozzászólás írásához be kell jelentkeznie
Ennek az oldalnak még nincsenek megjegyzései