SlideShare ist ein Scribd-Unternehmen logo
1 von 23
designbyheart@gmail.com
Efikasni API servisi
Laravel & GraphQL
designbyheart@gmail.com
O meni
Predrag Jevtic
Full stack developer 

- web design / development 

(JS, CSS, PHP, MySQL od 2007.)
- mobile development 

(ObjC, Swift, React Native od 2010.)
- agile practitioner 

(Scrum Master, Agile Coach od 2014.)
designbyheart@gmail.com
Nedostaci REST API servisa
• Server mora da usluži i web app i brojne
klijente sa različitim potrebama za podatke
(mobile (iOS, Android), desktop (Linux,
MacOS, Windows), TV apps, Internet of Thing
apps…)
• Primer: 



api.com/v1/users

api.com/v1/users/edit/2

api.com/v1/users/new
designbyheart@gmail.com
Nedostaci REST API servisa
• Problem konzistentnosti - isti atributi
imaju različite tipove podataka
{

"project": {

"tagline": "A query language for APIs”,

"description": null

}

}
{

"project": {

"tagline": "A query language for APIs”,

"description": ""

}

}
designbyheart@gmail.com
Nedostaci REST API servisa
• Server driven selection?
• Overfetching - previše informacija koje stižu
u jednom pozivu (REST poziv za listu
odredjenih elemenata dobija često ceo objekat
sa podacima koji nisu potrebni)
• Underfetching - premalo informacija u jednom
REST pozivu što rezultuje slanjem nekoliko
API poziva (često jednog za drugim -
synchronous). Rezultat: sporije prikazivanje
podataka u UI
designbyheart@gmail.com
Šta je GraphQL?
• https://graphql.org
• A query language for your API, by Facebook (ReactJS
conference 2015.)
• Pruža kompletan i razumljiv opis podataka u API-ju
• Daje klijentima moć da traže tačno one podatke koji su im
potrebni ubrzavajući komunikaciju isključivanjem
nepotrebnih setova podataka
• Ubrzava razvoj API-ja tokom vremena, smanjuje
kompleksnost istog (smanjuje potrebu za velikim brojem
različitih API poziva sa relativno sličnim setom
podataka)
designbyheart@gmail.com
Šta je GraphQL?
• https://graphql.org
• A query language for your API, by Facebook (ReactJS
conference 2015.)
• Pruža kompletan i razumljiv opis podataka u API-ju
• Daje klijentima moć da traže tačno one podatke koji su im
potrebni ubrzavajući komunikaciju isključivanjem
nepotrebnih setova podataka
• Ubrzava razvoj API-ja tokom vremena, smanjuje
kompleksnost istog (smanjuje potrebu za velikim brojem
različitih API poziva sa relativno sličnim setom
podataka)
designbyheart@gmail.com
GraphQL Prednosti
• Definija (schema) sa striktnim tipovima attributa
• Nema over ili underfetching-a (klijent dobija precizan
set podataka koji mu je potreban)
• Omogućava rapidni razvoj aplikacija i povećava
produktivnost FE i mobile timova (front end GraphQL
klijenti omogućavaju keširanje, realtime i optimistic UI
update, GraphQL Faker)
• Kompozicija više GraphQL schema (schema stiching)
• Velika open source zajednica i podrška
designbyheart@gmail.com
GraphQL Nedostaci
• GraphQL Kompleksnost
• Ograničenje broja poziva
• Keširanje podataka je kompleksnije od REST
pristupa
designbyheart@gmail.com
GraphQL implementacija
• Primena i van PHP jezika
• 	- C# / .NET
• 	- Clojure
• 	- Elixir
• 	- Erlang
• 	- Go
• 	- Groovy
•	- Java
•	- JavaScript
•	- PHP
•	- Python
•	- Scala
•	- Ruby
designbyheart@gmail.com
Struktura
Queries & Mutations
• Fields
• Arguments
• Aliases
• Fragments
• Operation name
• Variables
• Directives
• Mutations
• Inline fragments
designbyheart@gmail.com
Queries & Mutations
https://graphql.org/learn/queries/#fields
Fields
Arguments
Aliases
{ hero(id: “1000”) { name }}
{ hero { name }}
{ empireHero(episode: EMPIRE) { name }}
designbyheart@gmail.com
Queries & Mutations
https://graphql.org/learn/queries/#fields
Fragments - konstrukcija grupe field-ova i njihovo
korišćenje u queriju
designbyheart@gmail.com
Queries & Mutations
https://graphql.org/learn/queries/#fields
Operation name - imenovanje operacije ili seta
koraka radi lakše ponovne upotrebe kasnije
designbyheart@gmail.com
Queries & Mutations
https://graphql.org/learn/queries/#fields
Variables - unapred definisane statične vrednosti
Directives
Mutations - izmena i čuvanje izmenjenih podataka
@include(if: Boolean)
{ hero(episode: $episode)}
mutation CreateReviewForEpisode($ep: Episode!,
$review: ReviewInput!) {
@skip(if: Boolean)
designbyheart@gmail.com
Schemas and Types
https://graphql.org/learn/schema
Schema - Definicija data objekta sa striktnim
tipovima atributa
Type Character { 

name: String!

appearsIn: [Episode!]

}
note: ! = non-nullable
designbyheart@gmail.com
Schemas and Types
https://graphql.org/learn/schema
Schema stiching - kompozicija više schema u jednu
designbyheart@gmail.com
Serving over HTTP
https://graphql.org/learn/serving-over-http
GET request:

POST request:
Response:
{ 

“data”: { ... } 

“errors”: [ ... ]

}
{ 

“query”: ”...“,

“operationName”: ”...“,

“variables”: { “myVariable": “someValue”,”...“ }

}
http://myapi/graphql?query={me{name}}
designbyheart@gmail.com
Demo: Task board
With a spin…
Zahtev klijenta:
Napraviti task dashboard sa projektima
kojima pripadaju i dodeliti ih userima.
designbyheart@gmail.com
Demo: Task board - Prep
With a spin…
1. Install Laravel project
2. Composer require folklore/graphql
3. php artisan vendor:publish —
provider="FolkloreGraphQLServiceProvider"
4. Migration files & models: User, Project &
Task
5. Seed data
designbyheart@gmail.com
Demo: Task board 3, 2, 1…
With a spin…
And quest / query počinje…
designbyheart@gmail.com
Materijali
GraphQL lib: laravel-graphql
Demo project: https://github.com/designbyheart/graphql-with-laravel
GraphQL Dokumentacija: GraphQL Doc
Naredni koraci:
- autorizacija: https://graphql.github.io/learn/authorization/
- caching: https://graphql.org/learn/caching/ https://philsturgeon.uk/api/
2017/01/26/graphql-vs-rest-caching/
- Apollo: https://www.apollographql.com
- Performance: https://medium.com/@gajus/reducing-
graphql-response-size-by-a-lot-ff5ba9dcb60
designbyheart@gmail.com
Hvala :)

Weitere ähnliche Inhalte

Ähnlich wie GraphQL & Laravel - Efikasni API servisi

Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)IT Showoff
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeMatija Šmalcelj
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10. Stipe Predanic
 
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
 
Organizacija razvoja u internacionalnom development teamu
Organizacija razvoja u internacionalnom development teamuOrganizacija razvoja u internacionalnom development teamu
Organizacija razvoja u internacionalnom development teamuLuka Kladaric
 
Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPCKarlo Novak
 
Gatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaGatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaA. Kranjec
 
[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
 
Big Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzzBig Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzzwebburza
 
Heron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developersHeron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developersDavor Racić
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. Stipe Predanic
 

Ähnlich wie GraphQL & Laravel - Efikasni API servisi (20)

Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)Panel diskusija - usporedba Web frameworka (IT Showoff)
Panel diskusija - usporedba Web frameworka (IT Showoff)
 
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
 
WebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacijeWebUG - Hibridne mobilne aplikacije
WebUG - Hibridne mobilne aplikacije
 
Uvod u aplikacije - Luka Mandić
Uvod u aplikacije - Luka MandićUvod u aplikacije - Luka Mandić
Uvod u aplikacije - Luka Mandić
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 10.
 
JavaCro'14 - MEAN Stack – How & When – Nenad Pećanac
JavaCro'14 - MEAN Stack – How & When – Nenad PećanacJavaCro'14 - MEAN Stack – How & When – Nenad Pećanac
JavaCro'14 - MEAN Stack – How & When – Nenad Pećanac
 
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
 
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...
 
Organizacija razvoja u internacionalnom development teamu
Organizacija razvoja u internacionalnom development teamuOrganizacija razvoja u internacionalnom development teamu
Organizacija razvoja u internacionalnom development teamu
 
JavaCro'14 - Is there a single “correct” web architecture for business apps –...
JavaCro'14 - Is there a single “correct” web architecture for business apps –...JavaCro'14 - Is there a single “correct” web architecture for business apps –...
JavaCro'14 - Is there a single “correct” web architecture for business apps –...
 
Putting REST to rest with gRPC
Putting REST to rest with gRPCPutting REST to rest with gRPC
Putting REST to rest with gRPC
 
Napredni Excel brochure
Napredni Excel brochureNapredni Excel brochure
Napredni Excel brochure
 
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija KranjecJavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
JavaCro'14 - Gatling – weapon in ranks of performance testing – Andrija Kranjec
 
Gatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranjaGatling - oružje u redovima performansnog testiranja
Gatling - oružje u redovima performansnog testiranja
 
[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.
 
Big Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzzBig Brother Hrvatska 2007 - Case Study - BizBuzz
Big Brother Hrvatska 2007 - Case Study - BizBuzz
 
JavaCro'15 - Enterprise service bus - Juraj Ćutić
JavaCro'15 - Enterprise service bus - Juraj ĆutićJavaCro'15 - Enterprise service bus - Juraj Ćutić
JavaCro'15 - Enterprise service bus - Juraj Ćutić
 
JavaCro'15 - Integration of Mobile Applications with Facebook - Krešimir Mišu...
JavaCro'15 - Integration of Mobile Applications with Facebook - Krešimir Mišu...JavaCro'15 - Integration of Mobile Applications with Facebook - Krešimir Mišu...
JavaCro'15 - Integration of Mobile Applications with Facebook - Krešimir Mišu...
 
Heron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developersHeron MC - JavaScript for sysadmins and lazy developers
Heron MC - JavaScript for sysadmins and lazy developers
 
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11. [TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
[TVZ računarstvo] Dinamičke web aplikacije, predavanje 11.
 

GraphQL & Laravel - Efikasni API servisi