Kas yra „RESTful“ programavimas?

Kas yra „RESTful“ programavimas?

3758
22 марта '09 в 17:45 2009-03-22 17:45 hasen yra nustatytas kovo 22 d . 09: 17:45 2009-03-22 17:45
@ 34 atsakymai
  • 1
  • 2

Architektūrinis stilius, vadinamas „ REST“ (valstybinės valstybės perdavimas), apsaugo žiniatinklio programas nuo HTTP naudojimo, kaip buvo numatyta iš pradžių . Paieška turi naudoti GET užklausas. PUT , POST ir DELETE užklausos turėtų būti naudojamos atitinkamai mutacijai, kūrimui ir ištrynimui .

REST palaikytojai renkasi URL, pvz.,

 http://myserver.com/catalog/item/1729 

tačiau REST architektūra nereikalauja šių „gerų URL“. GET užklausą su parametru

 http://myserver.com/catalog?item=1729 

kiekvieną kartą kaip RESTful.

Atminkite, kad GET užklausos niekada neturėtų būti naudojamos informacijai atnaujinti. Pavyzdžiui, GET prašymas pridėti elementą į krepšelį.

 http://myserver.com/addToCart?cart=314159> 

būtų netinkama. GET užklausos turi būti idempotentinės . Tai reiškia, kad prašymo pateikimas du kartus neturėtų skirtis nuo jo išdavimo. Dėl to užklausos bus saugomos. Prašymas „pridėti į krepšelį“ nėra idempotentas - išleidimas du kartus į krepšelį įkelia dvi elemento kopijas. Šiame kontekste POST prašymas yra aiškiai tinkamas. Taigi netgi „RESTful“ žiniatinklio programai reikalinga POST užklausų dalis.

Tai paimta iš puikios knygos „Core JavaServer“, su kuria susiduria David M. Giri knyga.

609
15 апр. Shirgill Farhan atsakymas, pateiktas balandžio 15 d 2015-04-15 14:26 '15, 14:26 PM 2015-04-15 14:26

REST - pagrindinis tinklo architektūros principas. Nuostabus dalykas internete yra tai, kad klientai (naršyklės) ir serveriai gali bendrauti sudėtingais būdais be kliento iš anksto žinodami apie serverį ir resursus, kuriuos jis naudoja. Svarbiausias apribojimas yra tas, kad serveris ir klientas turi sutikti su naudojama medija, kuri tinklalapio atveju yra HTML.

API, kuri atitinka „REST“ principus, nereikalauja, kad klientas nieko žinotų apie API struktūrą. Vietoj to serveris turėtų pateikti bet kokią informaciją, kurią klientas turėtų bendrauti su paslauga. Šio pavyzdys yra HTML forma: serveris nustato išteklių ir reikiamų laukų vietą. Naršyklė iš anksto nežino, kur siųsti informaciją, ir iš anksto nežino, kokią informaciją siųsti. Abi informacijos formas pilnai teikia serveris. (Šis principas vadinamas „ HATEOAS: Hipermedija kaip taikymo valstybės mechanizmas .“

Taigi, kaip tai susiję su HTTP ir kaip jis gali būti įgyvendintas praktikoje? HTTP yra orientuotas į veiksmažodžius ir išteklius. Šie du veiksmažodžiai dažniausiai naudojami GET ir POST, kurie, manau, visi pripažins. Tačiau HTTP standartas apibrėžia keletą kitų, pvz., PUT ir DELETE. Tada šie veiksmažodžiai taikomi ištekliams pagal serverio pateiktas instrukcijas.

Pavyzdžiui, tarkime, kad mes turime vartotojo duomenų bazę, kurią valdo žiniatinklio paslauga. Mūsų paslauga naudoja pasirinktinį JSON pagrindu sukurtą hipermediją, kuriai mes priskiriame programą mimetype / json + userdb (taip pat gali būti programų / xml + userdb ir taikomoji programa / kokia + userdb - gali būti palaikomi daugelis medijos tipų). Klientas ir serveris buvo suprojektuoti suprasti šį formatą, tačiau jie nieko nežino. Kaip nurodo Roy Fielding :

„REST“ API turėtų išleisti beveik visus aprašomuosius medijų tipų (-ų) apibrėžimus, naudojamus reprezentuoti išteklius ir vairavimo taikomąją būseną, arba išplėsti ryšių pavadinimus ir (arba) hiperteksto žymėjimą esamiems standartiniams laikmenų tipams.

Pagrindinis išteklių prašymas / gali grąžinti kažką panašaus:

Prašymas

 GET / Accept: application/json+userdb 

atsakymas

 200 OK Content-Type: application/json+userdb { "version": "1.0", "links": [ { "href": "/user", "rel": "list", "method": "GET" }, { "href": "/user", "rel": "create", "method": "POST" } ] } 

Iš žiniasklaidos aprašymo žinome, kad galime rasti informacijos apie susijusius išteklius skyriuose, pavadintuose „nuorodos“. Tai vadinama „Hypermedia Controls“. Tokiu atveju iš šios dalies galime pasakyti, kad galime rasti naudotojų sąrašą, pateikdami kitą užklausą /user :

Prašymas

 GET /user Accept: application/json+userdb 

atsakymas

 200 OK Content-Type: application/json+userdb { "users": [ { "id": 1, "name": "Emil", "country: "Sweden", "links": [ { "href": "/user/1", "rel": "self", "method": "GET" }, { "href": "/user/1", "rel": "edit", "method": "PUT" }, { "href": "/user/1", "rel": "delete", "method": "DELETE" } ] }, { "id": 2, "name": "Adam", "country: "Scotland", "links": [ { "href": "/user/2", "rel": "self", "method": "GET" }, { "href": "/user/2", "rel": "edit", "method": "PUT" }, { "href": "/user/2", "rel": "delete", "method": "DELETE" } ] } ], "links": [ { "href": "/user", "rel": "create", "method": "POST" } ] } 
border=0

Iš šio atsakymo mes galime daug pasakyti. Pavyzdžiui, dabar žinome, kad galime sukurti naują naudotoją, naudodami POSTing prieš /user :

Prašymas

 POST /user Accept: application/json+userdb Content-Type: application/json+userdb { "name": "Karl", "country": "Austria" } 

atsakymas

 201 Created Content-Type: application/json+userdb { "user": { "id": 3, "name": "Karl", "country": "Austria", "links": [ { "href": "/user/3", "rel": "self", "method": "GET" }, { "href": "/user/3", "rel": "edit", "method": "PUT" }, { "href": "/user/3", "rel": "delete", "method": "DELETE" } ] }, "links": { "href": "/user", "rel": "list", "method": "GET" } } 

Taip pat žinome, kad galime pakeisti esamus duomenis:

Prašymas

 PUT /user/1 Accept: application/json+userdb Content-Type: application/json+userdb { "name": "Emil", "country": "Bhutan" } 

atsakymas

 200 OK Content-Type: application/json+userdb { "user": { "id": 1, "name": "Emil", "country": "Bhutan", "links": [ { "href": "/user/1", "rel": "self", "method": "GET" }, { "href": "/user/1", "rel": "edit", "method": "PUT" }, { "href": "/user/1", "rel": "delete", "method": "DELETE" } ] }, "links": { "href": "/user", "rel": "list", "method": "GET" } } 

Atkreipkite dėmesį, kad mes naudojame įvairius HTTP veiksmažodžius (GET, PUT, POST, DELETE ir kt.), Kad valdytume šiuos išteklius ir kad vienintelės žinios, kurias mes manome kliento pusėje, yra mūsų žiniasklaidos apibrėžimas.

Tolesnis skaitymas:

(Šis atsakymas buvo labai kritikuojamas dėl šio elemento trūkumo. Daugiausia tai buvo teisinga kritika. Ką aš iš pradžių aprašiau, labiau atitiko tai, kaip REST paprastai buvo atlikta prieš kelerius metus, kai pirmą kartą rašė, o ne tikroji prasmė, aš atsakiau, kad geriau pateikčiau tikrąją prasmę.)

2831
22 марта '09 в 17:53 2009-03-22 17:53 atsakymą pateikė Emil H kovo 22 d., 09:17, 2009-03-22 17:53

Atnaujinamas programavimas:

  • ištekliai identifikuojami pagal nuolatinį identifikatorių: šios dienos URI yra visuotinis identifikatoriaus pasirinkimas
  • valdomas bendrų veiksmažodžių rinkiniu: HTTP metodai - tai bendras atvejis - garbingas „ Create , „ Retrieve , „ Update , „ Delete tampa POST , GET , PUT ir Delete . Tačiau „REST“ neapsiriboja „HTTP“, tai tik labiausiai paplitęs transportas dabar.
  • faktinis vaizdas, gautas iš išteklių, priklauso nuo užklausos, o ne nuo identifikatoriaus: naudokite „Priimti antraštes“, kad galėtumėte kontroliuoti, ar norite XML, HTTP ar net „Java“ objekto, atstovaujančio ištekliui
  • būklės atkaklumas objekte ir būsenos reprezentacijoje vaizde
  • atstovavimas tarp išteklių išteklių išteklių vaizde: sąsajos tarp objektų yra įterptos tiesiai į vaizdą
  • išteklių vaizduose aprašoma, kaip galima naudoti vaizdą ir kokiomis aplinkybėmis jis turi būti atmestas / kartojamas: naudokite HTTP talpyklos valdymo antraštes

Pastarasis tikriausiai yra svarbiausias REST poveikis ir bendras veiksmingumas. Apskritai atrodo, kad dauguma „RESTful“ diskusijų sutelktos į HTTP ir jo naudojimą naršyklėje, o kas ne. Suprantu, kad R. Fielding sukūrė terminą, apibūdindamas architektūrą ir sprendimus, vedančius į HTTP. Jo darbas yra labiau susijęs su išteklių architektūros ir talpyklos galimybėmis nei su HTTP.

Jei tikrai domitės RESTful architektūra ir kodėl jis veikia, perskaitykite savo disertaciją kelis kartus ir perskaitykite visą dalyką, o ne tik 5 skyrių! Tada pažiūrėkite, kodėl DNS veikia . Skaitykite apie hierarchinę DNS struktūrą ir tai, kaip veikia perdavimas. Tada perskaitykite ir apsvarstykite, kaip veikia DNS talpykla. Galiausiai perskaitykite HTTP specifikacijas (ypač RFC2616 ir RFC3040 ) ir pažiūrėkite, kaip ir kodėl talpinimas veikia taip, kaip jis veikia. Galų gale, tai tiesiog paspaudžia. Paskutinis apreiškimas man buvo, kai pamačiau DNS ir HTTP panašumus. Po to pradeda spustelėti supratimą, kad SOA ir pranešimų perdavimo sąsajos yra skalės.

Manau, kad svarbiausias triukas, skirtas suprasti, koks yra „RESTful“ ir „ Shared Nothing “ architektūros svarbumas ir poveikis, nėra pakabinti ant technologijos detalių ir įgyvendinimo. Sutelkti dėmesį į tai, kam priklauso ištekliai, kuris yra atsakingas už jų kūrimą / priežiūrą ir tt Tada pagalvokite apie nuomones, protokolus ir technologijas.

512
22 марта '09 в 22:37 2009-03-22 22:37 Atsakymą pateikė D.Shawley , kovo 22 d., 22:37, 2009-03-22 22:37

Štai kaip jis gali atrodyti.

Sukurkite vartotoją, turintį tris savybes:

 POST /user fname=John> 

Serveris atsako:

 200 OK Location: /user/123 

Ateityje galite gauti informaciją apie vartotoją:

 GET /user/123 

Serveris atsako:

 200 OK <fname>John</fname><lname>Doe</lname><age>25</age> 

Norėdami pakeisti įrašą ( lname ir age lieka nepakitęs):

 PATCH /user/123 fname=Johnny 

Jei norite atnaujinti įrašą (ir todėl lname ir age bus NULL):

 PUT /user/123 fname=Johnny 
399
04 июля '09 в 8:47 2009-07-04 08:47 atsakymas pateikiamas pbreitenbach liepos 4 d., 09:47 , 2009-07-04 08:47

Puiki knyga „REST REST“ praktikoje .

Turi perskaityti atstovo būsenos perdavimo (REST) ​​ir REST API su hipertekstu

Žr. „Martin Fowlers“ straipsnį „ Richardson “ brandos modelis (RMM), kad paaiškintumėte, kokia yra „RESTful“ paslauga.

2019

174
17 окт. Atsakymas suteiktas 17 val. 2010-10-17 00:24 '10, 0:24, 2010-10-17 00:24

Kas yra REST?

REST - reprezentacinės valstybės vertimas. (Kartais „ReST“.) Jis remiasi be serverio serverio, talpyklos ryšio protokolu - ir beveik visais HTTP protokolais naudojamas protokolas.

„REST“ - tai architektūros stilius, skirtas kurti tinklo programas. Idėja yra ta, kad vietoj sudėtingų mechanizmų, tokių kaip CORBA, RPC arba SOAP, norint prisijungti tarp mašinų, paprastas HTTP yra naudojamas skambučiams tarp mašinų sukurti.

Daugeliu būdų galite naršyti „HTTP Wide World Wide Web“ svetainę. kaip REST pagrįsta architektūra. Atnaujintos programos naudoja HTTP užklausas skelbti duomenis (kurti ir (arba) atnaujinti), skaityti duomenis (pvz., Prašymus) ir ištrinti duomenis. Taigi, REST naudoja HTTP visiems keturiems CRUD (Create / Read / Update / Delete).

REST yra lengva alternatyva tokiems mechanizmams kaip RPC (nuotoliniai procedūriniai skambučiai) ir žiniatinklio paslaugos (SOAP, WSDL ir tt). Vėliau pamatysime, kiek paprastesnis yra REST.

Nepaisant savo paprastumo, REST yra visiškai funkcionalus; iš esmės jūs negalite nieko daryti žiniatinklio paslaugose, kurios negali būti vykdomos naudojant RESTful architektūrą. REST nėra „standartinis“. Pavyzdžiui, niekada nebus W3C rekomendacijos REST. Ir nors yra REST programavimo sistema, darbas su REST yra toks paprastas, kad dažnai galite „sulenkti“ su standartinėmis bibliotekos funkcijomis tokiomis kalbomis kaip „Perl“, „Java“ arba „C #“.

Vienas iš geriausių nuorodų, kuriuos rado bandydamas rasti paprastą, tikrą atsipalaidavimo jausmą.

http://rest.elkstein.org/

131
18 нояб. Atsakymą pateikė Ravi lapkričio 18 d. 2012-11-18 23:46 '12 11:46 2012-11-18 23:46

REST naudoja įvairius HTTP metodus (daugiausia GET / PUT / DELETE) duomenų valdymui.

Užuot naudoję konkretų URL, kad pašalintumėte metodą (pvz., /user/123/delete ), turėtumėte išsiųsti užklausą DELETE į URL /user/[id] kad galėtumėte redaguoti naudotoją, kad gautumėte informaciją apie naudotoją, kurį siunčiate GET užklausą /user/[id]

Pavyzdžiui, vietoj URL rinkinių, kurie gali atrodyti kaip kai kurie iš toliau išvardytų.

 GET /delete_user.x?id=123 GET /user/delete GET /new_user.x GET /user/new GET /user?id=1 GET /user/id/1 

Jūs naudojate HTTP veiksmažodžius ir turite ..

 GET /user/2 DELETE /user/2 PUT /user 
88
22 марта '09 в 18:20 2009-03-22 18:20 atsakymas dbr kovo 22 d., 09:18 , 18:20 2009-03-22 18:20

Tai yra programavimas, kuriame jūsų sistemos architektūra atitinka Roy Fielding pasiūlytą savo REST stilių . Kadangi tai yra architektūrinis stilius, apibūdinantis žiniatinklį (daugiau ar mažiau), daugelis žmonių domina tai.

Premija Atsakymas: Nėra. Jei nenorite studijuoti programinės įrangos architektūros kaip akademinio ar interneto paslaugų kūrėjo, nėra jokios priežasties klausytis šio termino.

67
22 марта '09 в 17:53 2009-03-22 17:53 atsakymą pateikė „ Hank Gay“ kovo 22 d., 17:53, 2009-03-22 17:53

Atsiprašome, jei neatsakysiu į klausimą tiesiogiai, bet tai lengviau suprasti, pateikiant išsamesnius pavyzdžius. „Fielding“ nėra lengva suprasti dėl abstrakcijos ir terminologijos.

Yra gana geras pavyzdys:

„REST“ ir „Hypertext“ paaiškinimas: „Spam-E“ šlamšto valymo robotas

Ir dar geriau, yra aiškus paaiškinimas su paprastais pavyzdžiais („PowerPoint“ yra sudėtingesnis, bet didžiąją dalį galite gauti html versijoje):

http://www.xfront.com/REST.ppt arba http://www.xfront.com/REST.html

Perskaitę pavyzdžius, supratau, kodėl Ken sakė, jog REST kontroliuoja hipertekstas. Nesu tikras, ar jis turi teisę, nes šis / naudotojas / 123 yra URI, rodantis išteklių, ir man neaišku, kad jis neleidžiamas tik todėl, kad klientas žino apie „ribų“.

Šis xfront dokumentas paaiškina skirtumą tarp REST ir SOAP, ir tai taip pat labai naudinga. Kai Fielding sako: „ Tai RPC, jis šaukia RPC“. Tai aiškiai parodo, kad RPC nėra atkurta, todėl naudinga pamatyti tikslią šio sprendimo priežastį. (SOAP yra RPC tipas.)

45
23 марта '09 в 20:11 2009-03-23 20:11 atsakymas duotas tompark kovo 23 d., 09:11, 2009-03-23 ​​20:11

Sakyčiau, kad „RESTful“ programavimas apims pastatų sistemas (API), kurios atitinka REST architektūros stilių.

Radau šį fantastinį, trumpą ir lengvai suprantamą „REST“ pamoką iš Dr. M. Elkstein ir cituodamas didelę dalį, kuri labiausiai atsakytų į jūsų klausimą:

Sužinokite REST: Tutorial

„REST“ - tai architektūros stilius, skirtas kurti tinklo programas. Idėja yra ta, kad vietoj sudėtingų mechanizmų, tokių kaip CORBA, RPC arba SOAP, norint prisijungti tarp mašinų, paprastas HTTP yra naudojamas skambučiams tarp mašinų sukurti.

  • Daugeliu atvejų pats „HTTP“ pagrįstas „World Wide Web“ gali būti laikomas REST pagrindu sukurta architektūra.

Atnaujintos programos naudoja HTTP užklausas skelbti duomenis (kurti ir (arba) atnaujinti), skaityti duomenis (pavyzdžiui, kurti prašymus) ir ištrinti duomenis. Taigi, REST naudoja HTTP visiems keturiems CRUD operacijoms (Create / Read / Update / Delete).

Nemanau, kad jūs turėtumėte jaustis kvailai, nes jūs negirdėjote apie REST už Stack Overflow ... Aš būčiau toje pačioje situacijoje !; SO atsakymai į šį kitą klausimą Kodėl „REST“ dabar didėja, gali palengvinti kai kuriuos jausmus.

44
12 июля '13 в 19:33 2013-07-12 19:33 atsakymas pateiktas tik 12 liepa, 13 val. 7:33 2013-07-12 19:33

Kas yra REST?

„REST“ oficialiais žodžiais, REST yra architektūrinis stilius, pagrįstas konkrečiais principais, naudojant dabartinius pagrindinius „Web“ principus. REST paslaugoms kurti naudojami 5 pagrindiniai tinklo pagrindai.

  • 1 principas: viskas turi išteklių Iš REST architektūrinio stiliaus duomenys ir funkcionalumas laikomi ištekliais ir yra prieinami naudojant vienodus išteklių identifikatorius (URI), paprastai, nuorodas internete.
  • 2 principas: Kiekvienas išteklius identifikuojamas pagal unikalų identifikatorių (URI).
  • 3 principas. Naudokite paprastas ir vieningas sąsajas.
  • 4 principas: komunikacija teikiama
  • 5 principas: Būk civilinis
37
25 июля '13 в 12:05 2013-07-25 12:05 atsakymą pateikė Suresh Gupta liepos 13 d. 12:05 2013-07-25 12:05

Matau daugybę atsakymų, kuriuose teigiama, kad „/ user / 123“ ištekliaus turinys yra susijęs su vartotoju 123.

Roy Fielding, kuris sukūrė terminą, sako, kad REST API turėtų būti pagrįsta hipertekstu . Visų pirma „REST API neturi apibrėžti fiksuotų išteklių pavadinimų ar hierarchijų“.

Taigi, jei jūsų kelias "/ user / 123" yra užkoduotas klientui, tai nėra tikrai atsipalaidavęs. Galbūt naudokite HTTP, o gal ne. Bet ne atsipalaidavęs. Jis turi būti iš hiperteksto.

34
22 марта '09 в 19:36 2009-03-22 19:36 Ken atsakymą davė Kenija kovo 22 d., 19:36, 2009-03-22 19:36

Atsakymas labai paprastas, yra disertacija, parašyta Roy Fielding.] 1 Disertacijoje jis apibrėžia REST principus. Jei paraiška atitinka visus šiuos principus, tai yra „REST“ programa.

Terminas RESTful buvo sukurtas, nes ppl išnaudojo žodį REST, skambindamas ne REST programa kaip REST. Po to terminas „RESTful“ taip pat buvo išnaudotas. Šiuo metu kalbame apie API API ir Hypermedia API , nes dauguma vadinamųjų REST programų neatitiko vienodos sąsajos apribojimo HATEOAS dalies.

REST apribojimai yra tokie:

  • kliento-serverio architektūra

    Taigi, jis neveikia, pavyzdžiui, PUB / SUB lizdai, jis grindžiamas REQ / REP.

  • santykiai be pilietybės

    Taigi serveris neužtikrina kliento statuso. Tai reiškia, kad negalite naudoti serverio trečiųjų šalių sesijų saugojimui ir turite patvirtinti kiekvieną užklausą. Klientai gali siųsti pagrindines auth antraštes per užšifruotą ryšį. (Didelėse programose sunku išlaikyti daug sesijų.)

  • naudokite talpyklą, jei galite

    Todėl jums nereikia vėl ir vėl atlikti tų pačių užklausų.

  • bendra sąsaja kaip bendra kliento ir serverio sutartis

    Serveris nepalaiko sutarties tarp kliento ir serverio. Kitaip tariant, klientas turi būti atskirtas nuo paslaugų įgyvendinimo. Вы можете достичь этого состояния, используя стандартные решения, такие как стандарт IRI (URI) для идентификации ресурсов, стандарт HTTP для обмена сообщениями, стандартные типы MIME для описания формата сериализации тела, метаданные (возможно, словари RDF, микроформаты и т.д.) До описывают семантику различных частей тела сообщения. Чтобы отделить структуру IRI от клиента, вы должны отправлять гиперссылки клиентам в форматах гипермедиа, таких как (HTML, JSON-LD, HAL и т.д.). Таким образом, клиент может использовать метаданные (возможно, отношения ссылок, словари RDF), назначенные гиперссылкам, для навигации по конечному автомату приложения через соответствующие переходы состояния для достижения своей текущей цели.

    Например, когда клиент хочет отправить заказ в интернет-магазин, он должен проверить гиперссылки в ответах, отправленных веб-магазином. Проверяя ссылки, они обнаруживают один, описанный с http://schema.org/OrderAction . Клиент знает словаря schema.org, поэтому он понимает, что, активировав эту гиперссылку, он отправит заказ. Таким образом, он активирует гиперссылку и отправляет сообщение POST https://example.com/api/v1/order с правильным телом. После этого служба обрабатывает сообщение и отвечает результатом с соответствующим заголовком HTTP-заголовка, например 201 - created по успеху. Чтобы комментировать сообщения с подробными метаданными, стандартное решение использовать формат RDF, например JSON-LD с помощью словарного кода REST, например Hydra и такие слова, как schema.org или любые другие связанный data vocab и, возможно, специальный пользовательский словарь, если необходимо. Теперь это непросто, поэтому большинство ppl используют HAL и другие простые форматы, которые обычно предоставляют только ВОЕННЫЙ ВОЕН, но не поддерживают связанные данные.