Sobes.tech
Junior

Kas yra REST?

sobes.tech AI

Atsakymas iš AI

REST (Representational State Transfer) — tai architektūros stilius, skirtas paskirstytoms sistemoms kurti, dažniausiai naudojamas kuriant žiniatinklio paslaugas. Jis grindžiamas principais ir apribojimais, kurie apibrėžia, kaip žiniatinklio ištekliai sąveikauja tarpusavyje:

REST pagrindiniai principai:

  • Klientas-serveris: aiškus atsakomybės pasidalijimas tarp kliento ir serverio.
  • Stateless (be būsenos): serveris nesaugo informacijos apie kliento būseną tarp užklausų. Kiekviena užklausa turi visą reikalingą informaciją.
  • Cacheable (kaupti galima): klientai gali kaupti serverio atsakymus, siekdami pagerinti našumą. Serveris aiškiai nurodo, ar atsakymas gali būti kaupiamas.
  • Layered System (sluoksniuota sistema): klientas gali sąveikauti su tarpiniais sluoksniais (pvz., proxy, apkrovos paskirstytoju), nesidomėdamas, kaip tai vyksta.
  • Code on Demand (kodo pagalba) - pasirenkama: serveris gali perduoti vykdomą kodą klientui (pvz., JavaScript), išplečiant kliento funkcionalumą.
  • Uniform Interface (vienodas sąsaja): svarbiausias principas, apimantis šiuos apribojimus:
    • išteklių identifikavimas (URI).
    • išteklių manipuliavimas per reprezentacijas (duomenų mainai tam tikru formatu, pvz., JSON, XML).
    • savarankiškai aprašantys pranešimai (pranešimai turi visą reikalingą informaciją jų supratimui).
    • HATEOAS (Hypermedia as the Engine of Application State): klientas pereina tarp programos būsenų naudodamas nuorodas, esančias serverio atsakymuose.

RESTful API — tai REST stiliaus įgyvendinimas žiniatinklio paslaugoms, naudojantis standartinius HTTP metodus (GET, POST, PUT, DELETE) darbui su ištekliais:

// Pavyzdys, kaip naudoti HTTP metodus RESTful API
// Gauti išteklių
// GET /api/products/1

// Kurti išteklių
// POST /api/products
// Body: { "name": "New Product", "price": 10.50 }

// Atnaujinti išteklių
// PUT /api/products/1
// Body: { "name": "Updated Product", "price": 11.00 }

// Ištrinti išteklių
// DELETE /api/products/1