SlideShare a Scribd company logo
1 of 17
Download to read offline
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
• Namijenjen ljudima
• Microformats (ver. 1 i 2) – dizajnirani za ljude i strojeve, to su jednostavni i
otvoreni podatkovni formati temeljeni na prihvaćenim standardima
(http://microformats.org/). Primjeri su hCard/h-card, hCalendar/h-event -
<span class="h-card">Pero Perić</span>
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 Dana (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
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 Web Services
• PayPal - https://developer.paypal.com/docs/api/
• GitHub - https://developer.github.com/v3/
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

More Related Content

Viewers also liked

Viewers also liked (20)

Javantura v3 - Asseco SEE
Javantura v3 - Asseco SEEJavantura v3 - Asseco SEE
Javantura v3 - Asseco SEE
 
JavaCro'15 - Java parallelization - Zlatko Sirotić
JavaCro'15 - Java parallelization - Zlatko SirotićJavaCro'15 - Java parallelization - Zlatko Sirotić
JavaCro'15 - Java parallelization - Zlatko Sirotić
 
JavaCro'15 - Slick database library - Ivan Senji
JavaCro'15 - Slick database library - Ivan SenjiJavaCro'15 - Slick database library - Ivan Senji
JavaCro'15 - Slick database library - Ivan Senji
 
JavaCro'15 - How to start agile transition - Ivan Krnić
JavaCro'15 - How to start agile transition - Ivan KrnićJavaCro'15 - How to start agile transition - Ivan Krnić
JavaCro'15 - How to start agile transition - Ivan Krnić
 
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
JavaCro'15 - Remote controlling Parrot AR Drone with Spring Boot and Vaadin -...
 
JavaCro'15 - Java Cloud - Marin Tadić
JavaCro'15 - Java Cloud - Marin TadićJavaCro'15 - Java Cloud - Marin Tadić
JavaCro'15 - Java Cloud - Marin Tadić
 
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
JavaCro'15 - Managing Java at Scale Security and Compatibility Applications -...
 
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
JavaCro'15 - Service Discovery in OSGi Beyond the JVM using Docker and Consul...
 
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
JavaCro'15 - Internet of things with RPi and Java - Matija Novak, Dragutin Ke...
 
JavaCro'15 - Java application crashed, now what - Matija Tomašković
JavaCro'15 - Java application crashed, now what - Matija TomaškovićJavaCro'15 - Java application crashed, now what - Matija Tomašković
JavaCro'15 - Java application crashed, now what - Matija Tomašković
 
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
JavaCro'15 - Java EE 8 - An instant snapshot - David DelabasseeJavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
JavaCro'15 - Java EE 8 - An instant snapshot - David Delabassee
 
JavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad PečanacJavaCro'15 - Microservice architecture - Nenad Pečanac
JavaCro'15 - Microservice architecture - Nenad Pečanac
 
JavaCro'15 - Secure Web Services Development - Askar Akhmerov
JavaCro'15 - Secure Web Services Development - Askar AkhmerovJavaCro'15 - Secure Web Services Development - Askar Akhmerov
JavaCro'15 - Secure Web Services Development - Askar Akhmerov
 
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
JavaCro'15 - Java Certification – in theory and practice - Branko Mihaljević,...
 
Javantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAKJavantura v3 - The story of Java & HUJAK
Javantura v3 - The story of Java & HUJAK
 
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
JavaCro'15 - HUJAKing – Expansion of Java Community - Branko Mihaljević, Alek...
 
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
JavaCro'15 - Single mail client for Lotus Domino and MS Exchange with Liferay...
 
JavaCro'15 - Introduction to Apache Spark - Petar Zečević
JavaCro'15 - Introduction to Apache Spark - Petar ZečevićJavaCro'15 - Introduction to Apache Spark - Petar Zečević
JavaCro'15 - Introduction to Apache Spark - Petar Zečević
 
JavaCro'15 - GP GUI form generators - Daniel Strmečki
JavaCro'15 - GP GUI form generators - Daniel StrmečkiJavaCro'15 - GP GUI form generators - Daniel Strmečki
JavaCro'15 - GP GUI form generators - Daniel Strmečki
 
Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...
Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...
Javantura v3 - Husky – (y)our tool for tracking value in data – Mladen Marovi...
 

Similar to JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec

World Wide Web
World Wide WebWorld Wide Web
World Wide Webnposcic
 
Pretrazivanje Interneta 2011
Pretrazivanje Interneta 2011Pretrazivanje Interneta 2011
Pretrazivanje Interneta 2011Dijana Machala
 
ZGFlex Drupal
ZGFlex DrupalZGFlex Drupal
ZGFlex Drupalzgflex
 
Izrada web sjedista - dan 1.
Izrada web sjedista - dan 1.Izrada web sjedista - dan 1.
Izrada web sjedista - dan 1.Jasmin Klindžić
 
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 developereEdin Kapic
 
Izrada web sjedista - dan 2.
Izrada web sjedista - dan 2.Izrada web sjedista - dan 2.
Izrada web sjedista - dan 2.Jasmin Klindžić
 
Oe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisicOe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisicipaulisic
 
[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. Stipe Predanic
 
eZ Publish intro
eZ Publish introeZ Publish intro
eZ Publish introivrdoljak
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Nenad Pecanac
 
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 generacijeMihovil Rister
 
Vert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaVert.x - Mihovil Rister, Javantura
Vert.x - Mihovil Rister, JavanturaFive
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dioGoran Igaly
 
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
 

Similar to JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec (20)

World Wide Web
World Wide WebWorld Wide Web
World Wide Web
 
Pretrazivanje Interneta 2011
Pretrazivanje Interneta 2011Pretrazivanje Interneta 2011
Pretrazivanje Interneta 2011
 
ZGFlex Drupal
ZGFlex DrupalZGFlex Drupal
ZGFlex Drupal
 
Izrada web sjedista - dan 1.
Izrada web sjedista - dan 1.Izrada web sjedista - dan 1.
Izrada web sjedista - dan 1.
 
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
 
Izrada web sjedista - dan 2.
Izrada web sjedista - dan 2.Izrada web sjedista - dan 2.
Izrada web sjedista - dan 2.
 
Izrada web sjedista d2
Izrada web sjedista d2Izrada web sjedista d2
Izrada web sjedista d2
 
Oe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisicOe o prezentacija_ferencic_paulisic
Oe o prezentacija_ferencic_paulisic
 
Css
CssCss
Css
 
Http protokol
Http protokolHttp protokol
Http protokol
 
[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.
 
eZ Publish intro
eZ Publish introeZ Publish intro
eZ Publish intro
 
eZ publish intro
eZ publish introeZ publish intro
eZ publish intro
 
Mean Stack JavaCro 2014
Mean Stack JavaCro 2014Mean Stack JavaCro 2014
Mean Stack JavaCro 2014
 
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
 
Internet - korisnički dio
Internet - korisnički dioInternet - korisnički dio
Internet - korisnički dio
 
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
 

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association

More from HUJAK - Hrvatska udruga Java korisnika / Croatian Java User Association (20)

Java cro'21 the best tools for java developers in 2021 - hujak
Java cro'21   the best tools for java developers in 2021 - hujakJava cro'21   the best tools for java developers in 2021 - hujak
Java cro'21 the best tools for java developers in 2021 - hujak
 
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK KeynoteJavaCro'21 - Java is Here To Stay - HUJAK Keynote
JavaCro'21 - Java is Here To Stay - HUJAK Keynote
 
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan LozićJavantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
Javantura v7 - Behaviour Driven Development with Cucumber - Ivan Lozić
 
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
Javantura v7 - The State of Java - Today and Tomowwow - HUJAK's Community Key...
 
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
Javantura v7 - Learning to Scale Yourself: The Journey from Coder to Leader -...
 
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
JavaCro'19 - The State of Java and Software Development in Croatia - Communit...
 
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander RadovanJavantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
Javantura v6 - Java in Croatia and HUJAK - Branko Mihaljević, Aleksander Radovan
 
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
Javantura v6 - On the Aspects of Polyglot Programming and Memory Management i...
 
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
Javantura v6 - Case Study: Marketplace App with Java and Hyperledger Fabric -...
 
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
Javantura v6 - How to help customers report bugs accurately - Miroslav Čerkez...
 
Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...Javantura v6 - When remote work really works - the secrets behind successful ...
Javantura v6 - When remote work really works - the secrets behind successful ...
 
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej VidakovićJavantura v6 - Kotlin-Java Interop - Matej Vidaković
Javantura v6 - Kotlin-Java Interop - Matej Vidaković
 
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
Javantura v6 - Spring HATEOAS hypermedia-driven web services, and clients tha...
 
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
Javantura v6 - End to End Continuous Delivery of Microservices for Kubernetes...
 
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
Javantura v6 - Istio Service Mesh - The magic between your microservices - Ma...
 
Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...Javantura v6 - How can you improve the quality of your application - Ioannis ...
Javantura v6 - How can you improve the quality of your application - Ioannis ...
 
Javantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela PetracJavantura v6 - Just say it v2 - Pavao Varela Petrac
Javantura v6 - Just say it v2 - Pavao Varela Petrac
 
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje RuhekJavantura v6 - Automation of web apps testing - Hrvoje Ruhek
Javantura v6 - Automation of web apps testing - Hrvoje Ruhek
 
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
Javantura v6 - Master the Concepts Behind the Java 10 Challenges and Eliminat...
 
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario KusekJavantura v6 - Building IoT Middleware with Microservices - Mario Kusek
Javantura v6 - Building IoT Middleware with Microservices - Mario Kusek
 

JavaCro'15 - RESTful Web APIs Design - Denis Kranjčec

  • 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 • Namijenjen ljudima • Microformats (ver. 1 i 2) – dizajnirani za ljude i strojeve, to su jednostavni i otvoreni podatkovni formati temeljeni na prihvaćenim standardima (http://microformats.org/). Primjeri su hCard/h-card, hCalendar/h-event - <span class="h-card">Pero Perić</span>
  • 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 Dana (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
  • 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 Web Services • PayPal - https://developer.paypal.com/docs/api/ • GitHub - https://developer.github.com/v3/
  • 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