API za web aplikaciju
Da li je neko do sada pravio API za web aplikaciju? Iskustva?
Cilj: jasan API za aplikaciju koja ima brdo asinhronih zahteva. Kad se već pravi nek bude napravljeno tako da može da se koristi i spolja, po potrebama. |
Nisam pravio, al kad bi pravio, REST all the way :1074:
|
Ilija, da li mislis na API u nekom skript jeziku ili bas API u smislu neko kompletno okruzenje?
|
Citat:
mozda sam ja glup, ali ja sam ziveo u ubedjenju da je API naprosto unapred definisani interfejs koji aplikacija implementira (odnosno spisak funkcija koje mozes pozvati)... o kakvom kompletnom okruzenju pricate i kakve ima veze u kom jeziku je API implementiran ? Poenta API-ja je da nije bitno u kom je jezikupravljen, nego samo da znas kako da ga pozoves.. |
Upravo tako, API je jasno definisan interfejs kojim spoljni programi mogu da komuniciraju sa samom aplikacijom. Jednostavno. Pravio sam gomile skripti koje imaju javan API - osoba koji radi Flash deo kaže koji podaci mu trebaju, ja kažem kako da formira upit i dobije te podatke kao XML iz PHP skripte. Samo što to nikad nisam zvao APIjem :)
Mada, ima tu i kvaka: autentifikacija, najbolje prakse itd. To je ono što me je zanimalo. Čisto ćeretanje na temu, dosta se nauči iz toga :D -- Ono što je mene najviše zanimla je upravo autentifikacija. Generiše se API key koji je vezan za klijentovi IP adresu. Za JS same aplikacije on se generiše i dodeljuje automatski, za spoljne aplikacije genriše se na zahtev. Na osnovu ključa se određuje ko je korisnik i šta sme da radi. Sama razmena je klasika: na XML zahtev dobija se XML odgovor s tom razlikom što JS aplikacije može da traži i neke dodatne informacije kao što je recimo sažvakan template koji samo umetne u stranicu itd. Neko radio nešto slično? |
A što ne pogledaš SOAP? To je baš pravljeno za tu svrhu i radi manje-više kako treba. Doduše, koristio sam ga samo iz C++a i C#a ali sam siguran da postoji neka biblioteka i za PHP.
|
postoji preko PEAR ako se ne varam ....
|
Po tekstovima na koje sam nailazio čujem da je SOAP kabast, nepraktičan, preglomazan i sve što ga drži su velike firme i njihova PR mašinerija. Nikad ga nisam koristio niti sam se nešto udubljivao, ali previše pametnih ljudi (nemam linkove, na te tvrdnje sam nailazio povremeno) kaže da je smeće što je meni dovoljan razlog da ga obiđem.
Uglavnom, videh jedno krajnje jednostavno rešenje: XML zahtev - XML odgovor (možeš zatražiti i neki drugi format, YAML, JSON, bilo šta...). Za autentifikaciju se koristi najprostija HTTP autentifikacija (ili se može zakomplikovati ukoliko je potrebno). Jednostavno, radi posao i široko je podržano. |
Citat:
|
Ja preporucujem da se pogleda na koji nacin to rade 'veliki', pa da se na osnovu toga formira API. Izuzetno popularan je Flickrov api ( http://www.flickr.com/services/api/ ), ja sam ga koristio dosta puta, radi bez greske (ali sa namerno ogranicenom brzinom).
Za authentikaciju: sve zavisi do kojeg nivoa hoces da ides, uobicajeno je da se generise secret key koji se vezuje za unapred definisan user ID. |
paypal i ebay koriste soap za njihove API-je i meni je to bilo super za rad, vrlo je jednostavno za upotrebu i ima dosta gotovog koda za rad sa soap-om..
naravno kao i svaki xml i soap pati od toga da treba poslati puno texta svaki put za prenos relativno male kolicine podataka. Sto prenosis krace poruke to je izrazeniji ovaj problem.. Authentifikacija se kod gore pomenutih API-ja radi tako sto uz svaki soap upit saljes i username i password (odnosno secret key) i to je to.. |
Za SOAP se obicno koristi nuSOAP biblioteka kod PHP-a...
Sad sam se bas igrao sa API-ima velikih igraca (Google, Yahoo,MSN posto sam pravio neki SEO script) i moram reci da mi je REST najprostiji.. GET, POST (il mozda PUT, DELETE) HTTP request koji vraca XML i kraj... www.devprotalk.com/api/vesti vrati XML sa spiskom vesti npr.. Najprostije resenje, koje cu svakako primenjivati kad se za to nadje potreba.. Gledam, Flickr, Yahoo i gomila drugih vecih igraca nudi i REST API, a autorizacija ide preko tajnog kljuca koji se veze za username.. |
nuSOAP
Radio sam SOAP API za http://www.tiketservis.com/affiliate i to radi fino (kada se ulogujes kao partner, mozes preuzeti kod sa primjerima i WSDL fajl)...
Koristen je nuSOAP koji mozes preuzeti sa http://sourceforge.net/projects/nusoap/ i nisu potrebni nikakve dodatne biblioteke. Ako vise volis PEAR, imas http://pear.php.net/package/SOAP U principu nije nista komplikovano, samo treba fino planirati sta sve da ponudis u API-ju. |
Citat:
Citat:
|
pa SOAP je obican xml, nema tu neke toliko velike misterije, a xml koji se salje je uvek manje vise isti samo se par podataka menja, tako da nije veliki problem napraviti shablon XML-a koji se salje i onda samo zamenjivati promenjive pomocu javascripta pre slanja upita...
ja sam tako radio iz php za PayPal jer me mrzelo da koristim gotove velike klase za nesto toliko jednostavno..ovo je php varijanta, ali moze slicno i u javasriptu, bilo da ubacis promenjive direktno u string, bilo da koristis regExp da naknadno zamenis vrednosti: PHP kôd:
|
OK, evo ga jednostavan primer. Hoćeš da imaš paginaciju gde se klikom na stranicu asihrono traže unosi za selektovanu stranicu i prikazuju. Kako bi to odradio pomoću web servisa koji koristi SOAP? Ili pak situacija gde se submituje forma i na osnovu odgovara (success ili error) prikazuje se ili poruka o grešci ili novokreirani objekat u listi.
Nikad nisam koristio SOAP tako da bi me zanimalo na šta ovakavi primeri liče i kako se realzuju. Btw, što volim taj "enterprise" XML. Totalno je offtopic, ali sam uvek izbegao slična rešenje. Čim moraš da napišeš nešto takvo to je znak da treba da se počešeš po glavi i razmisliš da li si siguran da ti to treba... Šta fali nečem ovakvom: Kôd:
<request key="..." reply_with="application/json"> Kôd:
<response error="0" format="application/json"> |
Citat:
Uzgred, jesi li siguran da paginaciju treba da trpaš u API? |
Zasto ne bi paginaciju stavio u API? Kako inace dobiti npr. objekte sa indeksom od 12.000 do 12.500 ?
Kao sto vec rekoh, pogledajte kako to rade veliki, ljudi se navikavaju da rade na taj nacin, a i ima razloga zasto su popularni. |
Kad omogućiš da ograničiš skup objekata koje program vraća lako je realizovati paginaciju. Prateći efekat koji se lepo da iskoristiti. Zamisli da nemaš mogućnost ograničavanja, treba ti prvih 10, a u bazi imaš 15000 slogova (traćenje resursa).
@zigor: Pogledao sam Flickr API i Basecamp API. Više mi se sviđa Flickr zbog autentifikacije i zato što ne izgleda previše generički (kao Basecamp API). Da li imaš još neki API koji bi vredelo pogledati? |
Hm, vredi videti SXIP identity protocol, api je trivijalan, ali ideja o identitetu nije. O tome je vec bilo reci u drugom topicu. Sve zavisi u kojem ti se pravcu siri projekat. Ako dodje do toga da treba povezivati vise servisa, da bi bilo dobro da ti servisi budu povezani u jednu veliku celinu, a da korisnik bude identifikovan na svima od njih, onda mislim da SXIP itekako ima smisla.
Takodje vredi videti Google maps API, to je druga prica, posto je to javascript, ali dobro je da se vidi kako to izgleda kada se implementira u browseru. Interesantno je videti kako su presli sa verzije jedan na verziju dva protokola, ja bih rekao bezbolno, barem je nama bilo :) Zasto ponavljam da API treba da lici na API koje rade veliki? Zato sto se onda programer koji povezuje servise lakse navikne, jer su velike sanse da je vec radio sa slicnim API-jem. Govorim iz licnog iskustva, objasnjavao sam na vise od 10 mesta kako se koristi API koji smo pravili, interesantno je kada ti se javi neko iz Izraela kome je znanje engleskog recimo na nivou da ga pozoves za Novu Godinu da ti prica, a tebi to sve smesno :) Na kraju je veza proradila, sto je najvaznije. |
Postavio sam jedno polu teorijsko, polu praktično pitanje na SitePoint, ali ništa od odgovora. Uglavnom:
Citat:
|
ako sam dobro shvatio ti uzmes frob sa njihovog servera, i tim frobom mozes da generises veci broj zahteva tokom narednog minuta... ako bi sa zahtevima slao direktno frob onda bi neko mogao to da snifuje i da iskoristi u narednih minut taj frob da izda npr. zahtev koji kaze obrisi nesto i to bi proslo bez pardona...
ovako ti na osnovu frob-a generises token za svaki zahtev, i svaki put imas drugaciji token, ali oni tamo na serveru mogu da provere da su oni generisani pomocu njihovog frob-a, znaci mogu da te autentifikuju. Takodje (mada to nije nigde jasno objasnjeno) mora da postoji zastita da token moze da se koristi samo jednom, inace ne bi imalo smisla. Generisanje novog tokena za svaki zahtev (ali svaki put na osnovu istog froba) je uslov da to sve ima smisla... |
Citat:
Citat:
Citat:
-- Po meni cela priča baš i nema previše smisla kad oba ističu. Razumeo bih situaciju kada API key ne bi isticao. Dođeš, generišeš API key, remote aplikacija to sačuva i kasnije se pomoću njega "loguje" na sistem, dobija token (session ID) i na osnovu ranije podešenih dozola za API key ima određene opcije na raspolaganju. Suma sumarum: implementiraću kako smatram da je najbolje (pasus iznad) pa ako se nađe neko sa kvalitetnim predlogom za unapređenje samog sistema (a nadam se da hoće), uvek možemo da ga popeglamo. API mi treba jer će svi asinhroni zahtevi iz skripte ići kroz njega i njegovo odsustvo je jedini razlog zašto activeCollab nema NI JEDAN asinhroni zahtev u sebi (za sada). |
Vreme je GMT +2. Trenutno vreme je 09:17. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.