Cum se creează un serviciu Web într-o chestiune de proces verbal

De două ori pe lună, revizuim câteva postări preferate ale cititorilor noștri de-a lungul istoriei Nettuts +. Acest tutorial a fost publicat pentru prima oară în iulie 2010.

Oferirea conținutului sau a logicii dvs. ca serviciu pe web este o idee minunată. Pentru început, vă permite să construiți numeroase front-end-uri pentru propriile dvs. informații fără a fi nevoie să accesați bazele de date tot timpul (și astfel făcând scalarea sistemului mult mai ușor).

Efectul și mai practic este acela că permiteți oamenilor de pe web să se joace cu informațiile dvs. și să construiască lucruri pe care niciodată nu visezi să le faci. Multe companii înțeleg că această "inovație provenită din mulțimea" este un freebie care este prea bun pentru a pierde, motiv pentru care există atât de multe API-uri grozave în jurul.

Furnizarea unui API către lume este totuși o poveste cu totul diferită. Trebuie să știți cum să vă scalați serverele, trebuie să fiți acolo pentru a răspunde la întrebări de către implementatori și trebuie să păstrați o bună documentație pentru a permite oamenilor să vă folosească conținutul. De asemenea, trebuie să vă gândiți la o strategie bună de stocare a cache-urilor pentru a vă împiedica să răsturnați serverele și trebuie să găsiți o modalitate de a limita accesul la sistemul dvs. pentru a evita abuzarea de către utilizatori. Sau tu?


Introduceți YQL

Yahoo oferă un sistem pentru persoanele care accesează API-urile lor numite Yahoo Query Language sau YQL. YQL este un limbaj în stil SQL care transformă informațiile de pe web în baze de date virtuale care pot fi interogate de utilizatorii finali. Deci, dacă doriți, de exemplu, să căutați pe web termenul "elefant", tot ce trebuie să faceți este să utilizați următoarea declarație:

selectați * din search.web unde query = "elephant"
Vedeți rezultatul ca XML în browserul dvs..

Trimiteți această declarație la un punct final de date și o primiți ca XML, JSON sau JSON-P. Puteți solicita mai multe rezultate și le puteți filtra prin definirea a ceea ce doriți să reveniți:

http://query.yahooapis.com/v1/public/yql? q = yql interogare & diagnostic = true | false & format = json | xml & callback =

Se amestecă și se potrivesc

Toate API-urile Yahoo sunt disponibile prin această interfață și puteți combina și potrivi servicii cu sub-selecții. De exemplu, ați putea rula un instrument de analiză a cuvintelor cheie peste rezumatul unei căutări pe web pentru a găsi chei cheie relevante. Utilizarea unic() funcții, puteți, de asemenea, să eliminați ușor pozițiile false.

selectați * din search.termextract unde contextul (selectați abstract din search.web (50) unde query = "elephant") | unic (câmp = „Rezultat“)

Vedeți rezultatele acestei interogări mai complexe aici.

Consola

Cel mai simplu mod de a juca cu YQL ca consumator este să utilizați consola la http://developer.yahoo.com/yql/console/. Acolo puteți face clic pe tabele diferite pentru a vedea o interogare demo cum să o utilizați și dacă faceți clic pe desc link-ul aflați care opțiuni sunt disponibile pentru dvs..

http://developer.yahoo.com/yql/console/

Limitele YQL

Utilizarea YQL are câteva limite care sunt descrise în documentație. În esență, puteți accesa punctul final de date deschis de 1.000 de ori într-o oră, pe IP. Dacă autentificați o aplicație cu oAuth, primiți 10.000 de clicuri pe oră. Fiecare aplicație are permisiunea de 100.000 hit-uri pe zi.

Acest lucru, precum și cachearea rezultatelor pe care YQL le face în mod automat înseamnă că datele sunt solicitate numai atunci când s-au schimbat. Acest lucru înseamnă că YQL este un fel de firewall pentru solicitarea datelor pe care oamenii le oferă.

Aveți grijă atunci când utilizați funcția "$ .getJSON" a lui jQuery și o funcție anonimă ca apel invers. Acest lucru poate bloca abilitățile de caching YQL și poate împiedica performanța.


Construirea serviciilor Web cu mese deschise

Lucru foarte interesant pentru dvs. ca furnizor este faptul că YQL este deschis pentru alți furnizori de date.

Dacă doriți să oferiți un API lumii (sau să aveți unul singur pentru dvs. intern), puteți face acest lucru ușor prin scrierea unei "tabele deschise" care este o schemă XML care indică un serviciu web.

Oamenii fac asta foarte mult, ceea ce înseamnă că, dacă faceți clic pe linkul "Afișați mesele comunitare" din consola YQL, veți găsi că acum există 812 în loc de 118 de tabele de jucat (de astăzi - mâine probabil va fi Mai Mult).

Pentru a vă oferi serviciul în YQL și a-i oferi lumii tot ce trebuie să faceți este să indicați YQL. Să examinăm un exemplu simplu:


Real-World Application: Craigslist ca API

Site-ul web gratuit de anunțuri clasificate Craigslist nu are un API public - ceea ce este o rușine, într-adevăr. Cu toate acestea, atunci când efectuați o căutare pe site, veți descoperi că rezultatele căutării au o ieșire RSS - care indică cel puțin funcționalitatea API. De exemplu, atunci când caut "bicicleta de munte schwinn" în San Francisco, URL-ul căutării va fi:

http://sfbay.craigslist.co.uk/search/sss?format=rss&query=schwinn+mountain+bike

Acest lucru poate fi modificat într-o adresă URL cu variabile, variabilele fiind locația, tipul de produs pe care îl căutați (care este secțiunea site-ului) și interogarea pe care ați căutat-o ​​(în acest caz am împachetat parametrii bretele):

http: // location .craigslist.co.uk / căutare / tip Format = rss & query = interogare?

Odată ce ați găsit un astfel de model, puteți începe să scrieți masa deschisă:

 Yahoo! Inc.http://craigslist.org/selectați * din table unde location = "sfbay" și type = "sss" și query = "schwinn mountain bike"Căutări Craigslist.org  

Pentru o descriere completă a ceea ce înseamnă totul, puteți verifica documentația YQL pe tabele deschise, dar aici este o scurtă prezentare:

  1. Începeți cu prologul XML și a masa element care indică schema pentru tabelele deschise YQL. Aceasta permite YQL să vă valideze tabelul.
  2. Adăugați a meta element cu informații despre tabel: autorul, adresa URL a documentației dvs. și o mostră de interogare. Interogarea eșantionului este cea mai importantă aici, deoarece acesta este ceea ce se va afișa în caseta de interogare a consolei YQL când oamenii fac clic pe numele tabelului. Acesta este primul pas în folosirea API-ului dvs. - deci faceți-l în valoare. Afișați parametrii pe care îi oferiți și modul de utilizare a acestora. masa parte va fi înlocuită cu numele tabelului.
  3. legări elementul arată ce este conectat tabelul și ce chei sunt așteptate într-o interogare.
  4. Definiți cale si tip din producția din Selectați element - valorile pentru tip sunt XML sau JSON iar calea vă permite doar să returnați o anumită secțiune a datelor returnate de la adresa URL pe care o accesați.
  5. În url-uri , definiți punctele finale ale adresei URL ale serviciului dvs. În cazul nostru, aceasta este adresa URL parametrizată anterior. YQL înlocuiește elementele din bretele curlate cu informațiile furnizate de utilizatorul YQL.
  6. În intrări , definiți toate cheile posibile pe care utilizatorii finali le pot oferi sau ar trebui să le furnizeze. Fiecare cheie are un id, A paramType care este fie cale, dacă parametrul face parte din calea URL sau întrebare, dacă trebuie adăugat la URL ca parametru. Definiți care sunt cheile obligatorii prin setarea obligatoriu atribuit lui Adevărat.

Și asta este! Prin realizarea acestui document XML, ați făcut primul din cei trei pași pentru a vă oferi serviciile web să facă parte din infrastructura YQL. Următorul pas este de a spune YQL unde este definiția serviciului web. Pur și simplu încărcați fișierul pe un server, de exemplu http://isithackday.com/craigslist.search.xml. Apoi, indicați YQL serviciului aplicând utilizare comanda:

utilizați "http://isithackday.com/craigslist.search.xml" ca cl; selectați * din cl unde locația "sfbay" și type = "sss" și query = "playstation"

Puteți încerca acest lucru și veți vedea că acum găsiți playstations de vânzare în San Francisco Bay Area. Neat, nu-i așa??


Logica ca serviciu

Uneori nu aveți niciun serviciu web și tot ce doriți să faceți este să oferiți o anumită logică lumii. M-am trezit să fac același lucru a doua zi. Ceea ce am vrut să știu este distanța dintre două locuri de pe Pământ. Pentru aceasta, trebuia să găsesc latitudinea și longitudinea locurilor și apoi să fac calcule foarte inteligente. Deoarece sunt o persoană leneșă, am construit pe munca pe care au făcut-o alte persoane pentru mine. Pentru a găsi latitudinea și longitudinea unui anumit loc pe Pământ, puteți utiliza API-urile Yahoo Geo. În YQL, puteți face acest lucru cu:

selectați * din geo.places (1) unde text = "paris"

Încearcă asta singură.

Pentru a găsi o funcție care să calculeze în mod fiabil distanța dintre două locuri de pe Pământ, am petrecut câteva minute pe Google și am descoperit implementarea de către Chris Veness a "soluției inverse Vincenty de Geodesics pe elipsoid".

YQL oferă un bloc executabil în interiorul tabelelor deschise care conține JavaScript de pe server. În loc să returnați pur și simplu datele de la serviciu, puteți să le utilizați pentru a converti informațiile înainte de ao returna. De asemenea, puteți efectua apeluri REST către alte servicii și către YQL în aceste blocuri JavaScript. Și asta am făcut:

  selectați * din table unde place1 = "london" și place2 = "paris" Christian Heilmann http://isithackday.com/hacks/geo/distance/  Vă dă distanța de două locuri pe pământ, în mile sau kilometri   
  1. meta elementul este același ca orice altă masă deschisă.
  2. În legări nu avem o adresă URL la care să ne îndreptăm, astfel încât să putem omite acel. Cu toate acestea, adăugăm acum a executa element care asigură că cheies definit va fi trimis la JavaScript definit în acest bloc.
  3. Pe măsură ce API-ul Geo al Yahoo-ului returnează XML-urile cu nume, trebuie să le spunem JavaScript care este spațiul de nume.
  4. Execută două interogări YQL din script utilizând y.query () folosind metoda place1 și place2 parametrii pentru a obține locațiile celor două locuri. .rezultate după apelul metodei mă asigur că obțin rezultatele. Le stochez res și res2 respectiv.
  5. Apoi, am obține latitudinea și longitudinea pentru fiecare dintre rezultate și apelarea distVincenty () metodă.
  6. Împărțim rezultatul cu 1000 pentru a obține kilometrii și pentru a multiplica rezultatul cu numărul corect pentru a obține mile.
  7. Finalizez partea de scenariu prin definirea unui response.object ceea ce YQL va reveni. Deoarece acest lucru este server-side JavaScript cu suport complet E4X tot ce trebuie să scriu este XML Vreau să revin cu variabilele JavaScript Vreau să render în acolate bretele.

Folosind acest serviciu și adăugând un pic de interfață la acesta, acum pot arăta cu ușurință distanța dintre Batman și Robin.

Utilizând JavaScript de pe server nu puteți doar să convertiți datele, ci și să oferiți cu ușurință un serviciu care constă doar din calcule - la fel ca Google Calculator nu.


Transformarea unui set de date editabil într-un serviciu Web

Ceea ce într-adevăr doriți să faceți în majoritatea cazurilor este, totuși, să permiteți utilizatorilor să editeze datele care conduc serviciul web într-un mod facil. În mod normal, vom construi un CMS, îi instruim pe oameni și vom petrece mult timp pentru a obține datele de pe CMS pe web pentru a le accesa prin YQL. Se poate însă face mai ușor.

Cu câteva luni în urmă, am lansat un site web numit winterolympicsmedals.com care vă prezintă toate informațiile despre Jocurile Olimpice de Iarnă de-a lungul anilor.

winterolympicsmedals.com

Datele care conduc site-ul web au fost publicate gratuit de The Guardian în Marea Britanie pe blogul lor de date ca o foaie de calcul Excel. Pentru a transforma acest lucru într-un set de date editabil, tot ce trebuia să fac este să salvez o copie în propriul depozit Google Docs. Puteți obține datele respective aici. Documente Google permite partajarea de foi de calcul de pe web. Folosind "CSV" ca format de ieșire, primesc o adresă URL pentru a accesa în YQL:

Și utilizând YQL puteți utiliza CSV ca sursă de date:

selectați * din csv unde url = "http://spreadsheets.google.com/pub? key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = en & output = csv"

Consultați rezultatul din browser-ul dvs..

După cum puteți vedea, tabelul CSV adaugă automat rânduri și coloane la ieșirea XML. Pentru a crea un serviciu web mai util și mai ușor de filtrat, puteți furniza o listă de coloane pentru a redenumi elementele XML rezultate:

selectați * din csv unde url = "http://spreadsheets.google.com/pub?key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = en & output = csv" și coloane = "an, oraș, sport, disciplină,

Consultați coloanele redenumite din browser.

Acest lucru vă permite să filtrați informațiile, ceea ce este exact ceea ce am făcut pentru a construi winterolympicsmedals.com. De exemplu, pentru a obține toate medaliile de aur din 1924, ați face următoarele:

selectați * din csv unde url = "http://spreadsheets.google.com/pub?key = 0AhphLklK1Ve4dHBXRGtJWk1abGVRYVJFZjQ5M3YxSnc & hl = en & output = csv" și coloane = "an, oraș, sport, disciplină, țară, eveniment, = "1924" și tipul = "Aur"

Vedeți medaliile de aur din 1924 în browserul dvs..

Deci, puteți utiliza stocarea gratuită a Google și infrastructura gratuită de servicii web pentru a converti datele gratuite într-un serviciu web. Tot ce trebuie să faceți este să creați o interfață frumoasă pentru aceasta.


Adăugarea serviciului dvs. la mesele comunitare ale YQL

Odată ce ați definit masa deschisă, puteți să o utilizați prin găzduirea pe propriul server sau puteți să vă plimbați prin adăugarea acesteia la depozitul de tabel YQL. Pentru a face acest lucru, tot ce are nevoie este să îl adăugați la depozitul de tabele YQL de la GitHub, care poate fi găsit la adresa http://github.com/yql/yql-tables/. Ajutorul extensiv privind modul de utilizare a Git și GitHub poate fi găsit în secțiunea de ajutor.

Dacă trimiteți o solicitare echipei YQL de a trage din depozit, ei vă vor testa masa și, dacă totul este în regulă, ei o vor muta pe http://datatables.org/, care este resursa pentru tabelul comunităților din consola YQL.

http://datatables.org/

Acest lucru nu numai că face viața altor dezvoltatori mai interesant, dar este, de asemenea, o promovare foarte bună pentru dvs. În loc să sporiți că dezvoltatorii se pot juca cu datele dvs., aduceți datele unde dezvoltatorii o caută deja.


Subiecte avansate YQL

Această introducere nu poate decât să răstoarne suprafața a ceea ce puteți face cu YQL. Dacă verificați documentația, veți observa că, în plus față de aceste tabele deschise "citiți", puteți de asemenea să configurați unele servicii la care să puteți scrie și YQL oferă și spațiu de stocare în cloud a informațiilor dvs. Verificați documentația extinsă YQL pentru mai multe informații.


rezumat

Combinând sisteme deschise cum ar fi YQL și Google Docs, precum și unele cunoștințe despre XML și JavaScript, puteți oferi un serviciu web oamenilor în câteva minute. În orice caz, mișcarea dezvoltării de la accesarea fișierelor și bazelor de date locale la accesarea serviciilor o face mult mai versatilă și vă permite să schimbați furnizorii oricând în viitor. Cu YQL, puteți înota degetele de la picioare în apa serviciilor web fără a se îneca, deoarece majoritatea muncii dure au fost deja făcute pentru dvs. Vă mulțumim pentru lectură!


Despre autor

Christian Heilmann este un evanghelist dezvoltator internațional care lucrează pentru Mozilla.

Cod