Tipărire
Părinte: Resurse Profesionale
Categorie: Know-How
Accesări: 6293

Dragi colegi,

Vă  ofer o prezentare într-o formă diferită și amuzantă a felului cum funcționează fundamentul comunicațiilor pe web: HTTP și în particular a descrierii arhitecturii REST - Representational State Transfer. Textul a fost scris de Ryan Tomayko, maintainer și contribuitor la mai multe proiecte open source.

 

Soția: Cine e „Roy Fielding”?
Ryan: Un tip deștept.
Soția: Aha! Și ce-a făcut?
Ryan: A contribuit la scrierea primelor servere web și apoi s-a apucat de cercetat serios explicând de ce funcționează web-ul în modul în care o face. Numele lui e scris pe specificațiile protocolului care este utilizat pentru a trimite paginile de la server către browserul tău.
Soția: Și cum funcționează?
Ryan: Web-ul?
Soția: Daaa.
Ryan: Hmmm. Chiar e uluitor, iar ceea ce e haios este că totul nu este prețuit la adevărata valoare. Protocolul de care-ți spun, HTTP-ul, este capabil de tot felul de chestii faine pe care oamenii le ignoră. 
Soția: Http, adică chestia de la început când scriu în browser?
Ryan: Mda, acea parte spune browserului ce protocol folosești. Chestia aia pe care o tastezi acolo este una dintre cele mai mari descoperiri din istoria computerului.
Soția: De ce?
Ryan: Pentru că e capabilă să descrie locația a ceva care se poate afla de oriunde oriunde din lume. Este fundamentul webului. Te poți gândi ca la coordonatele GPS pentru cunoaștere și informație.
Soția: Pentru paginile web?
Ryan: Tipul ăla, Roy Fielding, vorbește foarte mult către ce lucruri se poate adresa în lucrarea aia de cercetare de care ți-am spus. Webul este construit pe un stil arhitectural care se numește „REST”. REST oferă o definiție a unei „resurse”, care este chestia la care poți să ajungi.
Soția: O pagină web este o resursă?
Ryan: Într-un fel. O pagină web este o „reprezentare” a unei resurse. Resursele sunt doar concepte. URL-urile - chestia pe care le introduci la adresă în browser...
Soția: Știu ce este un URL..
Ryan: Bine. Ele spun browserului faptul că există pe undeva un concept. Apoi browserul poate merge să întrebe după o reprezentare specifică a conceptului. Mai exact, browserul caută o repezentare a paginii web a conceptului.
Soția: Ce alte tipuri de reprezentări mai sunt?
Ryan: De fapt, reprezentările sunt lucruri care nu sunt folosite prea des. În cele mai multe cazuri, o resursă are doar o singură reprezentare. Dar sperăm ca reprezentările să fie utilizate mai mult în viitor deoarece sunt o grămadă de noi formate care răsar de peste tot.
Soția: Cum ar fi?
Ryan: Ei bine, există acest concept pe care oamenii îl numesc „Servicii Web”. Acesta poate însemna foarte multe lucruri pentru foarte mulți oameni, dar conceptul de bază este că mașinile ar putea utiliza web-ul așa cum o fac și oamenii.
Soția: Chestia asta e ca un fel de robot?
Ryan: Nu zic că mașinile se vor așeza la masă să navigheze web-ul. Dar computerele pot utiliza aceleași protocoale pentru a trimite mesaje înainte și-napoi unele altora. Facem asta de foarte multă vreme dar niciuna din tehnicile pe care le utilizăm astăzi funcționează prea bine atunci când ai nevoie să vorbești tuturor mașinilor din întreaga lume.
Soția: De ce nu?
Ryan: Deoarece nu sunt proiectate să funcționeze astfel. Atunci când Fielding și prietenii săi au pornit să construiască web-ul, posibilitatea de a vorbi oricărei mașini din întreaga lume a fost o preocupare de frunte. Majoritatea tehnicilor pe care le utilizăm la muncă pentru a face computerele să vorbească unele cu celelalte, nu aveau aceste specificații. Trebuie doar să vorbești doar cu un grup mic de mașini.
Soția: Și acum ai nevoie să vorbești cu toate mașinile?
Ryan: Da, mai mult decât atât. Trebuie să putem vorbi cu toate mașinile despre lucrurile care se găsesc pe alte mașini. Deci, avem nevoie de o modalitate de a face o mașină să-i spună alteia despre resursele care s-ar putea găsi pe o a treia.
Soția: Ceee?
Ryan: Să zicem că tu vorbești cu sora ta și ea vrea să împrumute aspiratorul sau ceva, dar tu nu-l ai, ci mama ta îl are. Astfel, ai să-i spui sorei tale că mama ta îl are. Chestiile astea se întâmplă mereu atunci când mașinile încep să vorbească și ele.
Soția: Deci, mașinile îți spun unde sunt lucrurile?
Ryan: Dacă tot ce au nevoie mașinile să comunice are un URL corespondent, ai creat echivalentul unui substantiv pentru mașini. Astfel, tu și cu mine și împreună cu toată lumea trebuie să cădem de acord să vorbim despre substantive într-un anumit fel în care este foarte important, nu?
Soția: Daaaa.
Ryan: Mașinile nu au un substantiv universal, așa că e cam nasol. Toate limbajele de programare, bazele de date sau oricare alte sisteme au un mod diferit de a vorbi despre substantive. Din acest motiv URL-ul este important. Acesta permite ca toate aceste sisteme vorbesc unele cu celelalte despre substantivele celorlalte.
Soția: Dar atunci când privesc la o pagină web, nu mă gândesc la ea din punctul ăsta de vedere.
Ryan: Nimeni nu o face cu excepția lui Fielding și o mână de alți oameni.
Soția: Dar verbele și pronumele și adjectivele?
Ryan: Ciudat că mă întrebi pentru că ăsta e un alt aspect important pentru REST.
Soția: Hai că glumeam.
Ryan: A fost o glumă bună dar chiar nu este o glumă deloc. Verbele sunt importante. În programare există un concept puternic iar teoria ȘC (Științei Computerelor) îl numește „polimorfism”. Ăsta e modul tocilarilor de a zice că diferite substantive pot avea același verb.
Soția: Nu-nțeleg.
Ryan: Ei bine, ia uită-te la măsuța de cafea. Care sunt substantivele? Ceașcă, tavă, ziar, telecomadă. Acum, ce poți face cu aceste lucruri?
Soția: Tot nu-nțeleg...
Ryan: Poți să le iei, nu? Poți să le apuci. Poți să le răstorni, Poți să le arzi. Poți să le aplici acelați verb oricărora dintre acele obiecte.
Soția: Așa, și?
Ryan: Păi treaba asta e importantă. Ce-ar fi dacă în loc ca eu să-ți pot spune „ia ceașca” și „ia ziarul” și „ia telecomanda” ar trebui să inventăm alte verbe pentru fiecare dintre substantive? Nu aș putea folosi cuvântul „ia” la modul general, ci ar trebui să mă gândesc la un nou cuvânt pentru fiecare pereche verb/substantiv.
Soția: Oau! Asta-i ciudat.
Ryan: Da, este. Mintea noastră este îndeajuns de ascuțită pentru a aplica aceleași verbe diferitelor substantive. Unele verbe sunt mai specializate decât altele și se aplică doar la un set redus de substantive. De exemplu, nu pot conduce o ceașcă și nu pot bea o mașină. Dar unele verbe aproape că sunt universale precum GET, PUT și DELETE.
Soția: Nu poți da DELETE la o ceașcă.
Ryan: Ei bine, ai putea să o arunci. Asta a fost altă glumiță, nu?
Soția: Mda.
Ryan: Oricum HTTP - protocolul creat de Fieldng și prietenii săi - este despre aplicarea verbelor la substantive. Astfel, atunci când ajungi la o pagină web, browserul inițiază un HTTP GET asupra unui URL introdus și întoarce o pagină web.
Paginile web conțin, de regulă imagini, nu? Acestea sunt resurse separate. Pagina web specifică URL-urile către imagini iar browserul se duce și face HTTP GET-uri pe ele până când toate resursele sunt aduse în pagina afișată. Dar cel mai important lucru este că oricare tip de substantive pot fi tratate la fel. Fie că substantivul este o imagine, text, video, un mp3, o prezentare, indiferent ce. Poți obține cu GET toate acele lucruri în același fel atâta vreme cât există un URL.
Soția: Se pare că GET este un verb important.
Ryan: Este. Mai ales când folosești un browser web pentru că browserele se folosesc de GET. Acestea nu fac alte tipuri de operațiuni cu resursele. Aceasta este o problemă deoarece mulți oameni au crezut că HTTP-ul este doar pentru utilizarea cu GET. Dar HTTP este de fapt un protocol de uz general pentru aplicarea verbelor și a substantivelor.
Soția: Fain. Dar nu văd cum schimbă aceasta ceva.
Ryan: Ei bine substantivele sunt acolo dat nu în formatul corespunzător.
Gândește-te la momentul când navighezi pe amazon.com căutând cadouri de Crăciun pentru mine. Imaginează-ți fiecare produs ca un substantiv. Acum, dacă sunt disponibile într-o reprezentare pe care o mașină o poate înțelege, ai putea face o grămadă de lucruri interesante cu ele.
Soția: De ce nu poate înțelege o mașină o pagină web normală?
Ryan: Pentru că paginile web sunt proiectate pentru a fi înțelese de oameni. Unei mașini nu-i pasă de aspect sau de arnajamentul paginii. Atunci când obține resursele prin GET, va cere una care să o poată citi. Atunci când un browser obține o resursă pentru un om, va cere una care să poată fi citită de oameni.
Soția: Deci oamenii ar trebui să facă formate citibile de mașină pentru toate paginile?
Ryan: Dacă au valoare.
Ascultă, vorbim despre asta la un nivel foarte abstract. Ce-ai spune să vedem un exemplu real. Tu ești profesoară și pun pariu că la școală ai un computer sau trei sau patru computere mai degrabă care te ajută în evidența studenților: la ce cursuri s-au înscris, care sunt notele și în ce ani sunt, contacte, informații despre manualele după care predai, etc. Dacă sistemele se bazează pe web, atunci probabil că este un URL pentru fiecare dintre substantivele implicate aici: student, profesor, curs, carte, sală, etc. Acum, introducând un URL în browser vei obține o pagină web. Dacă ar fi câte o reprezentare interpetabilă de mașină pentru fiecare URL, atunci ar fi ușor de a atașa noi instrumente în sistem pentru că toată informația ar putea fi consumată într-un mod convențional. Ar putea fi foarte ușor astfel de a face fiecare sistem să vorbească cu un altul. Sau ai putea să construiești un sistem la nivel statal sau federal pentru a colecta notele studenților. Posibilitățile sunt nelimitate.
Fiecare dintre sisteme ar prelua informații de la celelalte utilizând HTTP GET. Dacă un sistem are nevoie să adauge ceva în alt sistem, folosește HTTP POST. Dacă un sistem trebuie să actualizeze ceva pe alt sistem folosește HTTP PUT. Singurul lucru care trebuie să-l rezolvi este cum ar trebui să arate datele.
Soția: Deci, asta este traba la care tu și ceilalți specialiști în computere lucrați acum? Decideți cum trebuie să arate datele?
Ryan: Din nefericire, nu! În loc, marea majoritate sunt ocupați cu elaborarea unor niveluri de specificații complexe pentru a face acest lucru într-un mod diferit, care nu este nici pe aproape util sau elocvent. Substantivele nu sunt universale iar verbele nu sunt polimorfice. Aruncăm pe fereastră zeci de ani de utilizare concretă a unei tehnici verificate și o luăm de la capăt cu ceva care seamăna cu veva cu care au eșuat sistemele anterioare. Folosim HTTP doar pentru că ne ajută să vorbim cu rețeaua cu o securizare precară a utilizatorilor. Pășim peste simplicitate pentru instrumente arătoase și asistență.
Soția: De ce?
Ryan: Nu am nicio idee.
Soția: De ce nu zici nimic?
Ryan: Poate că am s-o fac.