SlideShare une entreprise Scribd logo
1  sur  17
Dizajn REST Web API-ja
Denis Kranjčec, Srce
denis.kranjcec@srce.hr
Dizajn REST Web API-ja
• Što je REST Web API?
• Resursi i njihove reprezentacije
• HTTP i REST
• Dizajn API-ja baziranih na hipermediji (strategije, hipermedija
formati, semantika, procedura)
• Primjer(i) RESTful Web API-ja
Što je REST? (1)
• „Representational State Transfer (REST) is a software architecture
style consisting of guidelines and best practices for creating
scalable web services. REST is a coordinated set of constraints
applied to the design of components in a distributed hypermedia
system that can lead to a more performant and maintainable
architecture.” - https://en.wikipedia.org/wiki/Representational_state_transfer
• „The World Wide Web represents the largest implementation of a
system conforming to the REST architectural style.”
• „The term representational state transfer was introduced and
defined in 2000 by Roy Fielding in his doctoral dissertation.”
http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Što je REST? (2)
• Constraints
1. Client–server
2. Stateless
3. Cacheable
4. Layered system
5. Uniform interface - „REST is defined by four interface constraints:
identification of resources; manipulation of resources through representations;
self-descriptive messages; and, hypermedia as the engine of application
state.”
6. Code on demand (optional)
Što je REST Web API?
• Poštuje REST ograničenja
• Baziran je na HTTP-u
• Izložen je kroz točno jedan početni URL (npr.
https://www.isvu.hr/api/)
• Koristi standardne HTTP metode (npr. GET, POST, PUT, DELETE)
• Koristi „Internet media type” za reprezentaciju podataka (JSON,
HTML, HAL, ...) - http://www.iana.org/assignments/media-types/media-types.xhtml
• Koristi hypertext za opisivanje stanja i povezanih resursa
Resurs
• Resurs može biti bilo što što je dovoljno važno da ga se treba
referencirati.
• To može biti neka datoteka, redak u tablici u bazi, slika, ...
• Resurs ne mora biti nešto pohranjeno na računalu, nego to može
biti bilo što kao npr. čovjek, svemir, srce, ideja, knjiga, ...
• Ključno je da svaki resurs mora imati svoj jedinstveni URL
Reprezentacija resursa
• Reprezentacija resursa je bilo koji elektronički dokument koji sadrži
bilo koju informaciju o resursu.
• Kada klijent zatraži (GET) neki resurs, server bi mu trebao vratiti
dokument koji opisuje resurs na neki razumljiv način – to je
reprezentacija resursa.
• Resurs (uglavnom) ne može biti razmijenjen kroz internet, to može
biti samo njegova reprezentacija.
• Jedan resurs može imati više reprezentacija – JSON i XML, JPEG
i PNG, ...
• Klijent vidi isključivo URL i reprezentaciju resursa.
HTTP metode - značenje
• GET – dohvaća reprezentaciju resursa
• POST – kreira resurs niže u hijerarhiji temeljem poslane reprezentacije
• PUT – zamjenjuje u potpunosti stanje postojećeg resursa s poslanom
reprezentacijom
• DELETE – briše resurs
• HEAD – vraća isključivo HTTP Header, ali ne i reprezentaciju resursa
• OPTIONS – vraća HTTP metode koje resurs trenutno podržava
(temeljeno i na stanju resursa)
• PATCH – zamjenjuje dio stanja resursa s poslanom reprezentacijom
(dodatak na HTTP standard)
Hipermedija
• Hipermedija (hypermedia) povezuje resurse i opisuje koje su akcije nad tim
resursima moguće
• Server tako daje do znanja klijentu koji su sljedeći koraci mogući, a klijent odlučuje što će
se od toga dogoditi („koji link će pratiti”)
• To je ključna razlika u odnosu na uobičajene API-je
• Pomoću hipermedije klijent zna kreirati HTTP zahtjev (URL, HTTP metoda, HTTP
zaglavlje i reprezentaciju koju može poslati).
• Postoji veliki broj hipermedijskih standarda
• HTML
• URI Templates – http://example.org/search/{keyword}
• Link Header - https://tools.ietf.org/html/rfc5988
• Link Relations - http://www.iana.org/assignments/link-relations/link-relations.xhtml
• ...
Hipermedija – primjeri (1)
• Collection+JSON – baziran na collection pattern-u i JSON-u,
dizajniran za rad i pretraživanje kolekcija podataka.
(http://amundsen.com/media-types/collection/)
• Atom Publishing Protocol (AtomPub) – protokol za objavu i rad s
web sadržajima (tipično „novinskim člancima”) temeljen na
collection pattern-u (https://tools.ietf.org/html/rfc5023)
• HTML – temeljni jezik za kreiranje dokumenata i aplikacija za
najširu moguću upotrebu (http://www.w3.org/html/)
• Microformats (http://microformats.org/ - ver. 1 i 2) – jednostavni i otvoreni
podatkovni formati temeljeni na prihvaćenim standardima. Primjeri su hCard/h-
card, hCalendar/h-event - <span class="h-card">Pero Perić</span>
• Microdata (http://www.schema.org/) – kroz dodatne atribute opisuje semantiku
podataka kao npr. osobu opisuje http://www.schema.org/Person.
Hipermedija – primjeri (2)
• Hypertext Application Language (HAL) – općeniti jednostavni format koji omogućava
jednostavno povezivanje između resursa (http://stateless.co/hal_specification.html):
• JSON (application/hal+json) i XML (application/hal+xml) varijanta
• Definirani su samo resursi i linkovi
• Uniform Basis for Exchanging Representations (UBER) – minimalni dizajn s podrškom za
hipermedijom
(https://github.com/mamund/media-types/blob/master/uber-hypermedia.asciidoc):
• JSON (application/vnd.amundsen-uber+json) i XML (application/vnd.amundsen-uber+xml) varijanta
• JSON API - http://jsonapi.org/
• Hypermedia-Driven Web APIs (Hydra) - http://www.markus-lanthaler.com/hydra/
• Siren - https://github.com/kevinswiber/siren
• ...
Profili (profiles)
• Kako saznati dodatne detalje o semantici reprezentacije resursa koji nisu definirani
media type-om („gdje je dokumentacija?”)?
• 'profile' Link Relation Type - https://tools.ietf.org/html/rfc6906
• Na tom linku programer/aplikacija može saznati sve detalje o reprezentaciji –
ograničenja, konvencije i proširenja.
• Application-Level Profile Semantics (ALPS - http://alps.io/) – format za jednostavan
opis semantike na razini aplikacije (slično kao microformats).
• Može opisati aplikacijski semantiku uz HTML, HAL, Collection+JSON itd.
• Opisuje akcije i podatke servisa, ali ne i format poruka, protokol ili alate.
• JSON for Linking Data (http://json-ld.org/) – opisuje context kroz poseban JSON
dokument u kojem se nalaze dodatni linkovi s dodatnim opisom semantike.
• Moguće je i uključiti dodatne informacije u neke formate – npr. HTML, HAL
Postupak dizajna REST Web API-ja (1)
1. Popisati sve informacije koje klijent API-ja želi dobiti iz API-ja ili ga
predati u API.
2. Definirati resurse i njihove reprezentacije te veze među njima (site map).
Obično je to dijagram gdje su elementi reprezentacije resursa, a veze
među njima linkovi. Linkovi i njihovi nazivi („rel”) su tu ključni.
3. Pronaći standarde koji odgovaraju u konkrentom slučaju
• Link Relations - http://www.iana.org/assignments/link-relations/link-relations.xhtml
• Dodatne opise - http://schema.org/ i http://apis.io/
4. Odabrati media type
• Poželjno neki stanardni - Media Types - http://www.iana.org/assignments/media-
types/media-types.xhtml
• možda možete registrirati neke svoje - http://tools.ietf.org/html/rfc6838 (vnd.*)
Postupak dizajna REST Web API-ja (2)
5. Opisati profile
• I tu je poželjno bazirati se na standardima
6. Implementirati API baziran na dijagramu iz točke 2.
• Koristiti media type iz točke 4.
• Koristiti profile iz točke 5.
7. Objaviti početni URL – u idealnom slučaju to je dovoljno da klijenti počnu
koristiti API, ali u praksi još vjerojatno nedostaje dokumentacija, upute i
primjeri.
Primjeri RESTful WEB API-ja
• Amazon AppStream REST API -
http://docs.aws.amazon.com/appstream/latest/developerguide
/appstream-api-rest.html
• PayPal - https://developer.paypal.com/docs/api/
• GitHub - https://developer.github.com/v3/
• ISVU REST API - https://www.isvu.hr/api/
RESTful Web APIs
• RESTful Web APIs - By Leonard Richardson and
Mike Amundsen
• http://restfulwebapis.com/
• {API}Search - http://apis.io/
• Mike Amundsen (@mamund)
• http://amundsen.com/
• Roy T. Fielding (@fielding)
• http://roy.gbiv.com/untangled/
Srce politikom otvorenog pristupa široj javnosti
osigurava dostupnost i korištenje svih rezultata rada
Srca, a prvenstveno obrazovnih i stručnih informacija
i sadržaja nastalih djelovanjem i radom Srca.
Ovo djelo je dano na korištenje pod licencom Creative
Commons Imenovanje-Nekomercijalno-Bez prerada
4.0 međunarodna.
www.srce.unizg.hr creativecommons.org/licenses/by-nc-nd/4.0/deed.hr www.srce.unizg.hr/otvoreni-pristup
Dizajn REST Web API-ja
Denis Kranjčec, Srce
denis.kranjcec@srce.hr

Contenu connexe

Similaire à Dizajn REST Web API-ja

Oe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisicOe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisic
ipaulisic
 
LoCloud Technical Poster - Više od prostora
LoCloud Technical Poster - Više od prostora LoCloud Technical Poster - Više od prostora
LoCloud Technical Poster - Više od prostora
locloud
 

Similaire à Dizajn REST Web API-ja (20)

JavaCro'15 - API as a new architecture - Miroslav Rešetar
JavaCro'15 - API as a new architecture - Miroslav RešetarJavaCro'15 - API as a new architecture - Miroslav Rešetar
JavaCro'15 - API as a new architecture - Miroslav Rešetar
 
SharePoint kao razvojna platforma za ASP.NET developere
SharePoint kao razvojna platforma za ASP.NET developereSharePoint kao razvojna platforma za ASP.NET developere
SharePoint kao razvojna platforma za ASP.NET developere
 
Javantura Zagreb 2014 - Alfresco-Neo4j integracija - Damir Murat
Javantura Zagreb 2014 - Alfresco-Neo4j integracija - Damir MuratJavantura Zagreb 2014 - Alfresco-Neo4j integracija - Damir Murat
Javantura Zagreb 2014 - Alfresco-Neo4j integracija - Damir Murat
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 9.
 
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil RisterJavantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
Javantura Zagreb 2014 - Vert.x 1.3 - Mihovil Rister
 
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacijeVert.x - asinkroni skalabilni i poliglotni framework nove generacije
Vert.x - asinkroni skalabilni i poliglotni framework nove generacije
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, Javantura
 
Http protokol
Http protokolHttp protokol
Http protokol
 
Css
CssCss
Css
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014
 
JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...
JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...
JavaCro'14 - Auditing of user activity through NoSQL database – Kristijan Duv...
 
Oe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisicOe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisic
 
Auditing of user activity through NoSQL database
Auditing of user activity through NoSQL databaseAuditing of user activity through NoSQL database
Auditing of user activity through NoSQL database
 
eZ Publish intro
eZ Publish introeZ Publish intro
eZ Publish intro
 
eZ publish intro
eZ publish introeZ publish intro
eZ publish intro
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dio
 
Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPC
 
LoCloud Technical Poster - Više od prostora
LoCloud Technical Poster - Više od prostora LoCloud Technical Poster - Više od prostora
LoCloud Technical Poster - Više od prostora
 
Data WareHose
Data WareHoseData WareHose
Data WareHose
 
Html
HtmlHtml
Html
 

Dizajn REST Web API-ja

  • 1. Dizajn REST Web API-ja Denis Kranjčec, Srce denis.kranjcec@srce.hr
  • 2. Dizajn REST Web API-ja • Što je REST Web API? • Resursi i njihove reprezentacije • HTTP i REST • Dizajn API-ja baziranih na hipermediji (strategije, hipermedija formati, semantika, procedura) • Primjer(i) RESTful Web API-ja
  • 3. Što je REST? (1) • „Representational State Transfer (REST) is a software architecture style consisting of guidelines and best practices for creating scalable web services. REST is a coordinated set of constraints applied to the design of components in a distributed hypermedia system that can lead to a more performant and maintainable architecture.” - https://en.wikipedia.org/wiki/Representational_state_transfer • „The World Wide Web represents the largest implementation of a system conforming to the REST architectural style.” • „The term representational state transfer was introduced and defined in 2000 by Roy Fielding in his doctoral dissertation.” http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
  • 4. Što je REST? (2) • Constraints 1. Client–server 2. Stateless 3. Cacheable 4. Layered system 5. Uniform interface - „REST is defined by four interface constraints: identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state.” 6. Code on demand (optional)
  • 5. Što je REST Web API? • Poštuje REST ograničenja • Baziran je na HTTP-u • Izložen je kroz točno jedan početni URL (npr. https://www.isvu.hr/api/) • Koristi standardne HTTP metode (npr. GET, POST, PUT, DELETE) • Koristi „Internet media type” za reprezentaciju podataka (JSON, HTML, HAL, ...) - http://www.iana.org/assignments/media-types/media-types.xhtml • Koristi hypertext za opisivanje stanja i povezanih resursa
  • 6. Resurs • Resurs može biti bilo što što je dovoljno važno da ga se treba referencirati. • To može biti neka datoteka, redak u tablici u bazi, slika, ... • Resurs ne mora biti nešto pohranjeno na računalu, nego to može biti bilo što kao npr. čovjek, svemir, srce, ideja, knjiga, ... • Ključno je da svaki resurs mora imati svoj jedinstveni URL
  • 7. Reprezentacija resursa • Reprezentacija resursa je bilo koji elektronički dokument koji sadrži bilo koju informaciju o resursu. • Kada klijent zatraži (GET) neki resurs, server bi mu trebao vratiti dokument koji opisuje resurs na neki razumljiv način – to je reprezentacija resursa. • Resurs (uglavnom) ne može biti razmijenjen kroz internet, to može biti samo njegova reprezentacija. • Jedan resurs može imati više reprezentacija – JSON i XML, JPEG i PNG, ... • Klijent vidi isključivo URL i reprezentaciju resursa.
  • 8. HTTP metode - značenje • GET – dohvaća reprezentaciju resursa • POST – kreira resurs niže u hijerarhiji temeljem poslane reprezentacije • PUT – zamjenjuje u potpunosti stanje postojećeg resursa s poslanom reprezentacijom • DELETE – briše resurs • HEAD – vraća isključivo HTTP Header, ali ne i reprezentaciju resursa • OPTIONS – vraća HTTP metode koje resurs trenutno podržava (temeljeno i na stanju resursa) • PATCH – zamjenjuje dio stanja resursa s poslanom reprezentacijom (dodatak na HTTP standard)
  • 9. Hipermedija • Hipermedija (hypermedia) povezuje resurse i opisuje koje su akcije nad tim resursima moguće • Server tako daje do znanja klijentu koji su sljedeći koraci mogući, a klijent odlučuje što će se od toga dogoditi („koji link će pratiti”) • To je ključna razlika u odnosu na uobičajene API-je • Pomoću hipermedije klijent zna kreirati HTTP zahtjev (URL, HTTP metoda, HTTP zaglavlje i reprezentaciju koju može poslati). • Postoji veliki broj hipermedijskih standarda • HTML • URI Templates – http://example.org/search/{keyword} • Link Header - https://tools.ietf.org/html/rfc5988 • Link Relations - http://www.iana.org/assignments/link-relations/link-relations.xhtml • ...
  • 10. Hipermedija – primjeri (1) • Collection+JSON – baziran na collection pattern-u i JSON-u, dizajniran za rad i pretraživanje kolekcija podataka. (http://amundsen.com/media-types/collection/) • Atom Publishing Protocol (AtomPub) – protokol za objavu i rad s web sadržajima (tipično „novinskim člancima”) temeljen na collection pattern-u (https://tools.ietf.org/html/rfc5023) • HTML – temeljni jezik za kreiranje dokumenata i aplikacija za najširu moguću upotrebu (http://www.w3.org/html/) • Microformats (http://microformats.org/ - ver. 1 i 2) – jednostavni i otvoreni podatkovni formati temeljeni na prihvaćenim standardima. Primjeri su hCard/h- card, hCalendar/h-event - <span class="h-card">Pero Perić</span> • Microdata (http://www.schema.org/) – kroz dodatne atribute opisuje semantiku podataka kao npr. osobu opisuje http://www.schema.org/Person.
  • 11. Hipermedija – primjeri (2) • Hypertext Application Language (HAL) – općeniti jednostavni format koji omogućava jednostavno povezivanje između resursa (http://stateless.co/hal_specification.html): • JSON (application/hal+json) i XML (application/hal+xml) varijanta • Definirani su samo resursi i linkovi • Uniform Basis for Exchanging Representations (UBER) – minimalni dizajn s podrškom za hipermedijom (https://github.com/mamund/media-types/blob/master/uber-hypermedia.asciidoc): • JSON (application/vnd.amundsen-uber+json) i XML (application/vnd.amundsen-uber+xml) varijanta • JSON API - http://jsonapi.org/ • Hypermedia-Driven Web APIs (Hydra) - http://www.markus-lanthaler.com/hydra/ • Siren - https://github.com/kevinswiber/siren • ...
  • 12. Profili (profiles) • Kako saznati dodatne detalje o semantici reprezentacije resursa koji nisu definirani media type-om („gdje je dokumentacija?”)? • 'profile' Link Relation Type - https://tools.ietf.org/html/rfc6906 • Na tom linku programer/aplikacija može saznati sve detalje o reprezentaciji – ograničenja, konvencije i proširenja. • Application-Level Profile Semantics (ALPS - http://alps.io/) – format za jednostavan opis semantike na razini aplikacije (slično kao microformats). • Može opisati aplikacijski semantiku uz HTML, HAL, Collection+JSON itd. • Opisuje akcije i podatke servisa, ali ne i format poruka, protokol ili alate. • JSON for Linking Data (http://json-ld.org/) – opisuje context kroz poseban JSON dokument u kojem se nalaze dodatni linkovi s dodatnim opisom semantike. • Moguće je i uključiti dodatne informacije u neke formate – npr. HTML, HAL
  • 13. Postupak dizajna REST Web API-ja (1) 1. Popisati sve informacije koje klijent API-ja želi dobiti iz API-ja ili ga predati u API. 2. Definirati resurse i njihove reprezentacije te veze među njima (site map). Obično je to dijagram gdje su elementi reprezentacije resursa, a veze među njima linkovi. Linkovi i njihovi nazivi („rel”) su tu ključni. 3. Pronaći standarde koji odgovaraju u konkrentom slučaju • Link Relations - http://www.iana.org/assignments/link-relations/link-relations.xhtml • Dodatne opise - http://schema.org/ i http://apis.io/ 4. Odabrati media type • Poželjno neki stanardni - Media Types - http://www.iana.org/assignments/media- types/media-types.xhtml • možda možete registrirati neke svoje - http://tools.ietf.org/html/rfc6838 (vnd.*)
  • 14. Postupak dizajna REST Web API-ja (2) 5. Opisati profile • I tu je poželjno bazirati se na standardima 6. Implementirati API baziran na dijagramu iz točke 2. • Koristiti media type iz točke 4. • Koristiti profile iz točke 5. 7. Objaviti početni URL – u idealnom slučaju to je dovoljno da klijenti počnu koristiti API, ali u praksi još vjerojatno nedostaje dokumentacija, upute i primjeri.
  • 15. Primjeri RESTful WEB API-ja • Amazon AppStream REST API - http://docs.aws.amazon.com/appstream/latest/developerguide /appstream-api-rest.html • PayPal - https://developer.paypal.com/docs/api/ • GitHub - https://developer.github.com/v3/ • ISVU REST API - https://www.isvu.hr/api/
  • 16. RESTful Web APIs • RESTful Web APIs - By Leonard Richardson and Mike Amundsen • http://restfulwebapis.com/ • {API}Search - http://apis.io/ • Mike Amundsen (@mamund) • http://amundsen.com/ • Roy T. Fielding (@fielding) • http://roy.gbiv.com/untangled/
  • 17. Srce politikom otvorenog pristupa široj javnosti osigurava dostupnost i korištenje svih rezultata rada Srca, a prvenstveno obrazovnih i stručnih informacija i sadržaja nastalih djelovanjem i radom Srca. Ovo djelo je dano na korištenje pod licencom Creative Commons Imenovanje-Nekomercijalno-Bez prerada 4.0 međunarodna. www.srce.unizg.hr creativecommons.org/licenses/by-nc-nd/4.0/deed.hr www.srce.unizg.hr/otvoreni-pristup Dizajn REST Web API-ja Denis Kranjčec, Srce denis.kranjcec@srce.hr