introduction to graphql

Post on 08-Feb-2017

1.580 Views

Category:

Software

3 Downloads

Preview:

Click to see full reader

TRANSCRIPT

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

GraphQL

Piotr Sroczkowski

Brainhub

January 23, 2017

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Summary I

1 Introduction

2 OriginDIPSemantic triple

3 History

4 UsageHow to setup a GraphQL server?SyntaxTypesBest practices

5 Alternatives & useful tools

6 End

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

What is GraphQL?

Graph query language

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

What is GraphQL?

Graph query language

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Dependency inversion principle (DIP)

one of SOLID principles

depend on abstraction, not concretion

IMO even abstract class breaks this rule

so we should depend only on interfaces

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Dependency inversion principle (DIP)

one of SOLID principles

depend on abstraction, not concretion

IMO even abstract class breaks this rule

so we should depend only on interfaces

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Dependency inversion principle (DIP)

one of SOLID principles

depend on abstraction, not concretion

IMO even abstract class breaks this rule

so we should depend only on interfaces

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Dependency inversion principle (DIP)

one of SOLID principles

depend on abstraction, not concretion

IMO even abstract class breaks this rule

so we should depend only on interfaces

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Dependency inversion principle (DIP)

one of SOLID principles

depend on abstraction, not concretion

IMO even abstract class breaks this rule

so we should depend only on interfaces

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in services

DIP is not only in OOP

also in SOA

it’s like joining blocks together

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in services

DIP is not only in OOP

also in SOA

it’s like joining blocks together

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in services

DIP is not only in OOP

also in SOA

it’s like joining blocks together

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in services

DIP is not only in OOP

also in SOA

it’s like joining blocks together

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in microservices

it’s not a new paradigm, it’s just an example of SOA

service discovery

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in microservices

it’s not a new paradigm, it’s just an example of SOA

service discovery

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

DIP in microservices

it’s not a new paradigm, it’s just an example of SOA

service discovery

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Semantic triple

an RDF (Resouce Description Framework) data model

ex. Alice likes Bob

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Semantic triple

an RDF (Resouce Description Framework) data model

ex. Alice likes Bob

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Semantic triple

an RDF (Resouce Description Framework) data model

ex. Alice likes Bob

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Triplestore

a proposed database for storage of triples

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Triplestore

a proposed database for storage of triples

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Think in graphs

Why?

UI

Graph algorithms

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Think in graphs

Why?

UI

Graph algorithms

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Think in graphs

Why?

UI

Graph algorithms

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

DIPSemantic triple

Think in graphs

Why?

UI

Graph algorithms

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

GraphQL history

developed internally in Facebook in 2012

publicly released in 2015

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

GraphQL history

developed internally in Facebook in 2012

publicly released in 2015

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

GraphQL history

developed internally in Facebook in 2012

publicly released in 2015

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Node

express-graphqlhttps://github.com/graphql/express-graphql

or graphql-serverhttps://github.com/apollostack/graphql-server

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Node

express-graphqlhttps://github.com/graphql/express-graphql

or graphql-serverhttps://github.com/apollostack/graphql-server

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Node

express-graphqlhttps://github.com/graphql/express-graphql

or graphql-serverhttps://github.com/apollostack/graphql-server

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

The simplest way

1 git clone https:// github.com/apollostack/apollo -

↪→ starter -kit

2 cd apollo -starter -kit

3 git checkout server -only

4 npm install

5 npm start

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Queries

1 {

2 hero {

3 name

4 }

5 }

1 {

2 "data": {

3 "hero": {

4 "name": "R2 -D2"

5 }

6 }

7 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Queries

1 {

2 hero {

3 name

4 }

5 }

1 {

2 "data": {

3 "hero": {

4 "name": "R2 -D2"

5 }

6 }

7 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Queries

1 {

2 hero {

3 name

4 }

5 }

1 {

2 "data": {

3 "hero": {

4 "name": "R2 -D2"

5 }

6 }

7 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Queries

1 {

2 human(id: "1000") {

3 name

4 height

5 }

6 }

1 {

2 "data": {

3 "human": {

4 "name": "Luke Skywalker",

5 "height": 1.72

6 }

7 }

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Queries

1 {

2 human(id: "1000") {

3 name

4 height

5 }

6 }

1 {

2 "data": {

3 "human": {

4 "name": "Luke Skywalker",

5 "height": 1.72

6 }

7 }

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Queries

1 {

2 human(id: "1000") {

3 name

4 height

5 }

6 }

1 {

2 "data": {

3 "human": {

4 "name": "Luke Skywalker",

5 "height": 1.72

6 }

7 }

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Aliases

1 {

2 empireHero: hero(episode: EMPIRE) {

3 name

4 }

5 jediHero: hero(episode: JEDI) {

6 name

7 }

8 }

1 {

2 "data": {

3 "empireHero": {

4 "name": "Luke Skywalker"

5 },

6 "jediHero": {

7 "name": "R2 -D2"

8 }

9 }

10 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Aliases

1 {

2 empireHero: hero(episode: EMPIRE) {

3 name

4 }

5 jediHero: hero(episode: JEDI) {

6 name

7 }

8 }

1 {

2 "data": {

3 "empireHero": {

4 "name": "Luke Skywalker"

5 },

6 "jediHero": {

7 "name": "R2 -D2"

8 }

9 }

10 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Aliases

1 {

2 empireHero: hero(episode: EMPIRE) {

3 name

4 }

5 jediHero: hero(episode: JEDI) {

6 name

7 }

8 }

1 {

2 "data": {

3 "empireHero": {

4 "name": "Luke Skywalker"

5 },

6 "jediHero": {

7 "name": "R2 -D2"

8 }

9 }

10 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Fragments - input

1 {

2 leftComparison: hero(episode: EMPIRE) {

3 ... comparisonFields

4 }

5 rightComparison: hero(episode: JEDI) {

6 ... comparisonFields

7 }

8 }

9

10 fragment comparisonFields on Character {

11 name

12 appearsIn

13 friends {

14 name

15 }

16 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Fragments - output I

1 {

2 "data": {

3 "leftComparison": {

4 "name": "Luke Skywalker",

5 "appearsIn": [

6 "NEWHOPE",

7 "EMPIRE",

8 "JEDI"

9 ],

10 "friends": [

11 {

12 "name": "Han Solo"

13 },

14 {

15 "name": "Leia Organa"

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Fragments - output II

16 },

17 {

18 "name": "C-3PO"

19 },

20 {

21 "name": "R2 -D2"

22 }

23 ]

24 },

25 "rightComparison": {

26 "name": "R2 -D2",

27 "appearsIn": [

28 "NEWHOPE",

29 "EMPIRE",

30 "JEDI"

31 ],

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Fragments - output III

32 "friends": [

33 {

34 "name": "Luke Skywalker"

35 },

36 {

37 "name": "Han Solo"

38 },

39 {

40 "name": "Leia Organa"

41 }

42 ]

43 }

44 }

45 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Variables - input I

1 query HeroNameAndFriends($episode: Episode) {

2 hero(episode: $episode) {

3 name

4 friends {

5 name

6 }

7 }

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Variables - output I

1 {

2 "data": {

3 "hero": {

4 "name": "R2 -D2",

5 "friends": [

6 {

7 "name": "Luke Skywalker"

8 },

9 {

10 "name": "Han Solo"

11 },

12 {

13 "name": "Leia Organa"

14 }

15 ]

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Variables - output II

16 }

17 }

18 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Directives I

1 query Hero($episode: Episode , $withFriends: Boolean !)

↪→ {

2 hero(episode: $episode) {

3 name

4 friends @include(if: $withFriends) {

5 name

6 }

7 }

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Mutations I

1 mutation CreateReviewForEpisode($ep: Episode!, $review

↪→ : ReviewInput !) {

2 createReview(episode: $ep , review: $review) {

3 stars

4 commentary

5 }

6 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Inline fragments I

1 query HeroForEpisode($ep: Episode !) {

2 hero(episode: $ep) {

3 name

4 ... on Droid {

5 primaryFunction

6 }

7 ... on Human {

8 height

9 }

10 }

11 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Meta fields I

1 {

2 search(text: "an") {

3 __typename

4 ... on Human {

5 name

6 }

7 ... on Droid {

8 name

9 }

10 ... on Starship {

11 name

12 }

13 }

14 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Types

Scalar types

Enumeration types

Interfaces

Union types

Input types

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Types

Scalar types

Enumeration types

Interfaces

Union types

Input types

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Types

Scalar types

Enumeration types

Interfaces

Union types

Input types

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Types

Scalar types

Enumeration types

Interfaces

Union types

Input types

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Types

Scalar types

Enumeration types

Interfaces

Union types

Input types

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Types

Scalar types

Enumeration types

Interfaces

Union types

Input types

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Scalar types

Int

Float

String

Boolean

Id

You can also define your custom scalar types ex. scalar Date

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Enumeration types

1 enum Episode {

2 NEWHOPE

3 EMPIRE

4 JEDI

5 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Type modifiers

1 type Character {

2 name: String!

3 appearsIn: [Episode ]!

4 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Interface

1 interface Character {

2 id: ID!

3 name: String!

4 friends: [Character]

5 appearsIn: [Episode ]!

6 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Interface implementation

1 type Human implements Character {

2 id: ID!

3 name: String!

4 friends: [Character]

5 appearsIn: [Episode ]!

6 starships: [Starship]

7 totalCredits: Int

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Union types

1 union SearchResult = Human | Droid | Starship

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Input types

1 input ReviewInput {

2 stars: Int!

3 commentary: String

4 }

1 mutation CreateReviewForEpisode($ep: Episode!,

↪→ $review: ReviewInput !) {

2 createReview(episode: $ep , review: $review)

↪→ {

3 stars

4 commentary

5 }

6 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Input types

1 input ReviewInput {

2 stars: Int!

3 commentary: String

4 }

1 mutation CreateReviewForEpisode($ep: Episode!,

↪→ $review: ReviewInput !) {

2 createReview(episode: $ep , review: $review)

↪→ {

3 stars

4 commentary

5 }

6 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Input types

1 input ReviewInput {

2 stars: Int!

3 commentary: String

4 }

1 mutation CreateReviewForEpisode($ep: Episode!,

↪→ $review: ReviewInput !) {

2 createReview(episode: $ep , review: $review)

↪→ {

3 stars

4 commentary

5 }

6 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Best practices

HTTP

JSON (with GZIP)

Versioning

Nullability

Pagination

Server-side Batching & Caching

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Pagination example

1 {

2 hero {

3 name

4 friends(first :2) {

5 name

6 }

7 }

8 }

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Batching - library

https://github.com/nodkz/react-relay-network-layer

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

How to setup a GraphQL server?SyntaxTypesBest practices

Batching - library

https://github.com/nodkz/react-relay-network-layer

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Useful tools

Relay https://github.com/facebook/relay

GraphiQL https://github.com/graphql/graphiql

Adrenaline https://github.com/gyzerok/adrenaline

Apollo clienthttps://github.com/apollostack/apollo-client

Apollo iOShttps://github.com/apollostack/apollo-ios

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Useful tools

Relay https://github.com/facebook/relay

GraphiQL https://github.com/graphql/graphiql

Adrenaline https://github.com/gyzerok/adrenaline

Apollo clienthttps://github.com/apollostack/apollo-client

Apollo iOShttps://github.com/apollostack/apollo-ios

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Useful tools

Relay https://github.com/facebook/relay

GraphiQL https://github.com/graphql/graphiql

Adrenaline https://github.com/gyzerok/adrenaline

Apollo clienthttps://github.com/apollostack/apollo-client

Apollo iOShttps://github.com/apollostack/apollo-ios

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Useful tools

Relay https://github.com/facebook/relay

GraphiQL https://github.com/graphql/graphiql

Adrenaline https://github.com/gyzerok/adrenaline

Apollo clienthttps://github.com/apollostack/apollo-client

Apollo iOShttps://github.com/apollostack/apollo-ios

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Useful tools

Relay https://github.com/facebook/relay

GraphiQL https://github.com/graphql/graphiql

Adrenaline https://github.com/gyzerok/adrenaline

Apollo clienthttps://github.com/apollostack/apollo-client

Apollo iOShttps://github.com/apollostack/apollo-ios

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Useful tools

Relay https://github.com/facebook/relay

GraphiQL https://github.com/graphql/graphiql

Adrenaline https://github.com/gyzerok/adrenaline

Apollo clienthttps://github.com/apollostack/apollo-client

Apollo iOShttps://github.com/apollostack/apollo-ios

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Alternatives

Falcor (not yet available)

SPARQL

Graph databases like Neo4j, ArangoDB

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Alternatives

Falcor (not yet available)

SPARQL

Graph databases like Neo4j, ArangoDB

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Alternatives

Falcor (not yet available)

SPARQL

Graph databases like Neo4j, ArangoDB

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Alternatives

Falcor (not yet available)

SPARQL

Graph databases like Neo4j, ArangoDB

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

What problems does it solve?

client - server and microservices communication

more precise than REST

versioning

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

What problems does it solve?

client - server and microservices communication

more precise than REST

versioning

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

What problems does it solve?

client - server and microservices communication

more precise than REST

versioning

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

What problems does it solve?

client - server and microservices communication

more precise than REST

versioning

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Sources

The examples have been got from GraphQL official sitehttp://graphql.org/learn/

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

Sources

The examples have been got from GraphQL official sitehttp://graphql.org/learn/

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

The end

Thank you

Piotr Sroczkowski GraphQL

IntroductionOriginHistoryUsage

Alternatives & useful toolsEnd

The end

Thank you

Piotr Sroczkowski GraphQL

top related