Așa că am nevoie de odihnă pentru aplicații web

Ce este REST?

Așa că am nevoie de odihnă pentru aplicații web

Usual aplicație web medie gestionează două tipuri de cereri: GET sau POST, precum și pentru primirea și transmiterea de date, respectiv. Dar arhitectura REST presupune utiliza întreaga gamă de cereri: GET - obține datele, POST - trimite date noi, PUT - trimite datele editate, DELETE - șterge datele. Există PATCH, care prin ideile sale PUT repetate, singura diferență este că PUT implică înlocuirea complet înregistrarea și PATCH doar parțial actualizarea datelor. Ce este de opinii interesante cu privire la utilizarea POST și PUT sunt divergente. Dezvoltatorii vorbitori de limbă engleză preferă să utilizeze UPT pentru a adăuga noi date, POST pentru editare.

Folosind exemplul GML REST

În primul rând trebuie să definim resursele la care utilizatorul poate interacționa. În GML am primit: link-uri (link-uri către resurse web), colecții (containere pentru înregistrări), utilizatori și etichete. Acestea sunt cele patru unități principale, care lucrează are loc.

Notăm domeniul rădăcină ca gml.link/

Am obținut următoarele cereri de date:

  • GET gml.link/links/ - lista completă de link-uri
  • GET gml.link/links/125 - obține o legătură sută douăzeci și cinci
  • GET gml.link/collections/ - o listă a tuturor colecțiilor
  • GET gml.link/collection/34 - obține o listă de link-uri de treizeci și patra colectare
  • GET gml.link/tags/ - obține o listă cu toate etichetele
  • GET gml.link/tags/animal - obține o listă de link-uri etichetate cu „animal“ (pentru actele de etichete ca un identificator al numelui său, nu este un număr.)

Cererile pentru a adăuga date (în paranteze indică datele transmise în corpul cererii)

  • POST gml.link/users/ (nume de utilizator: 'Alex', parola: 'sdf7665 $ 6', e-mail: 'alex@mail.ru') - se adaugă un nou utilizator
  • POST gml.link/users/23 (nume de utilizator: „Alex“, parola: „sdf7665 $ 6“, e-mail: „alex@mail.ru“) - în acest caz, întoarce eroarea, așa cum am arătat în cererea pentru un anumit ID de utilizator
  • POST gml.link/collections/ (titlu: „Colecție nouă“, „tip“: „privat“) - va crea o nouă colecție privată

Cereri de editare

  • PUT gml.link/collections/ (titlu: „Numele modificat al colecției“) - returnează o eroare, deoarece nu este specificat ID-ul de colectare
  • PUT gml.link/collections/12 (titlu: „Titlul modificat al colecției“) - schimba numele colecției în al doisprezecelea
  • PUT gml.link/links/117 (titlu: „Un alt nume de legătură“) - schimbarea în numele de o sută și al XVII-lea link-

Solicitări de eliminare

  • DELETE gml.link/collection/32 - eliminați colecția de treizeci de secunde
  • ȘTERGE gml.link/links/43 - îndepărtați patruzeci și treia verigă

Așa că am nevoie de odihnă pentru aplicații web

Destul de un pic de implementare tehnică

(Notă citirea acestui paragraf, viața ta se poate schimba pentru totdeauna)

Din moment ce nu suntem Habrahabr, așa că voi atinge cu privire la punerea în aplicare tehnică a probațiune.

Toate procesarea interogărilor este împărțit în mai multe etape:

  1. Determinarea resurselor la care cererea este direcționată (link-uri, colecții, utilizatori și etichete, și ID-ul de resurse)
  2. Determinarea tipului de cerere de acțiune (obținerea, adăugarea, editarea și ștergerea)
  3. Colectarea de parametri suplimentari de interogare (pentru a adăuga \ edita - este direct datele de resurse pentru a produce - acestea sunt filtre diferite)

Care sunt avantajele acestei abordări arhitecturale?

Aplicarea REST pe proiectul dumneavoastră, pentru mine, am observat următoarele:

Ce urmează? (În general)

Așa cum am spus, voi scrie articolul ca punerea în aplicare a unei părți a serviciului. În acest moment, înregistrarea gata / autentificare, pe deplin susținută de arhitectura REST, implementat „încărcare leneș“ link-uri la încărcare, adăugați / crea o colecție.

-- Salvarea pagina de stare prin istorie HTML5 API (ca bonus)
Din nou, foarte indirect legate de API-ul REST

-- Nici o confuzie cu mai mulți parametri de transmisie în cereri și să le procesarea pe server
Doar începe confuzia. Care trec prin parametrii GET, ceva prin POST, în același handler.

-- logica aplicației transparent client-side
-- În caz de necesitate, pentru a oferi cu ușurință API-ul REST pentru aplicații de la terți
Și celelalte protocoale nu oferă această oportunitate?

În REST există multe incertitudini și de acest lucru, deoarece fiecare vine cu propriile sale de punere în aplicare, pe care au considerat un punct de referință.

Fără specificații mai puțin clare. Cum ar fi răspuns de eroare:
Codul 1. HTTP
2. Întotdeauna 200, eroare de informații ca răspuns
1 și 3. Opțiunea 2

Format Răspuns. Să numim metoda de obținere a utilizatorului:
1. []
2. ]>
3. ]>
Cineva îl iubește și face. Un mare minus, dacă trebuie să se integreze cu mai multe servicii.

Distracția începe atunci când nevoile merge dincolo de simpla plus, pentru a primi o listă, eliminați (un CRUD tipic), adică merge dincolo /: colectare /: id

Aici există orice suschnost care au proprietăți și metode. Pe măsură ce aceste acțiuni pentru a efectua?
1. POST /: colectare /: id / pe
2. Se transferă „acțiunea“ în organism POST
3. Sau, în uz general, PUT, PATCH

O mică problemă apare atunci când există o cerere cross-browser (CORS) pentru API-ul nostru. Fiecare adresă URL (/: colectare /: id) va trimite o solicitare OPTIUNI preliminară, o întârziere suplimentară.

Adăugat GET / PATCH / DELETE handler /: colectare /: id. Si vrem sa aplicatii bazate pe browser ispolzvat JSONP, pentru a scapa de politici CORS. Va trebui să adăugați un alt procesor (3-în-1), pentru a sprijini JSONP (el este GET numai).

Nici o descriere serviciu unelte standratyh de tip WSDL. Mai precis, mai mult sau mai puțin decât utilizate pe scară largă.

Într-un API tipic REST, documentația și parametrii sunt descrise manual. Documentația va rămâne mereu în urmă.

articole similare