GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs->...
Transcript of GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs->...
![Page 2: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/2.jpg)
why how when
![Page 3: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/3.jpg)
@felipesoares6_
felipesoares6
![Page 4: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/4.jpg)
![Page 5: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/5.jpg)
![Page 6: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/6.jpg)
![Page 7: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/7.jpg)
![Page 8: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/8.jpg)
GraphQL is a query language
![Page 9: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/9.jpg)
& alternative to REST
![Page 10: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/10.jpg)
![Page 11: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/11.jpg)
+
![Page 12: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/12.jpg)
graphs
-> nodes
-> edges
![Page 13: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/13.jpg)
query language
SELECT *
FROM
![Page 14: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/14.jpg)
type House {edge: Person
}
type Person {...
}
![Page 15: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/15.jpg)
why?
![Page 16: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/16.jpg)
![Page 17: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/17.jpg)
3 reasons
![Page 18: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/18.jpg)
get just what you want
![Page 19: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/19.jpg)
enables declarative data fetching
![Page 20: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/20.jpg)
overfetching
![Page 21: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/21.jpg)
underfetching
![Page 22: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/22.jpg)
nice and smooth contracts
![Page 23: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/23.jpg)
+ typed schemas+ docs
![Page 24: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/24.jpg)
playground
![Page 25: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/25.jpg)
clients everywhere
![Page 26: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/26.jpg)
only exposes a single endpoint
![Page 27: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/27.jpg)
consume the same endpoint in != ways
![Page 28: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/28.jpg)
how?
![Page 29: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/29.jpg)
-> schema-> queries-> mutations
-> resolvers-> responses
![Page 30: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/30.jpg)
schema
![Page 31: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/31.jpg)
type Query {users: [User!]!,user: User!
}
![Page 32: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/32.jpg)
type User {id: ID!,name: String,email: String
}
![Page 33: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/33.jpg)
schema-> queries-> mutations
resolversresponses
![Page 34: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/34.jpg)
queries
![Page 35: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/35.jpg)
GET /users
query {users {
id,name,email
}}
![Page 36: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/36.jpg)
mutations
![Page 38: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/38.jpg)
schemaqueriesmutations
-> resolvers responses
![Page 39: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/39.jpg)
resolvers
![Page 40: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/40.jpg)
field :users doresolve -> (users) { User.all }
end
field :user doresolve -> (_, args) { User.find(args[:id]) }
end
???: { ‘api.com/top’ }
![Page 41: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/41.jpg)
schemaqueriesmutations
resolvers-> responses
![Page 42: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/42.jpg)
responses
![Page 43: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/43.jpg)
loading
![Page 44: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/44.jpg)
“data”: {users: [
{id: “1”,name: “Felipe Soares”,email: “[email protected]”
}]
}
query {users {
id,name,email
}}
![Page 45: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/45.jpg)
“errors”: [{
“message”: “error”,“location”: … ,“fields”: ...
}]
query {users {
id,name,gender
}}
![Page 46: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/46.jpg)
how how
![Page 47: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/47.jpg)
server-side
bit.ly/2FQPwRG
![Page 48: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/48.jpg)
gem ‘graphql’
![Page 49: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/49.jpg)
Root = GraphQL::Schema.define do mutation(Types::MutationType) query(Types::QueryType)end
![Page 50: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/50.jpg)
Types::QueryType = GraphQL::ObjectType.define
do name 'Query'
…end
![Page 51: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/51.jpg)
field :users, !types[Types::UserType] do resolve ->(_obj, _args, _ctx) { User.all }end
![Page 52: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/52.jpg)
client-side
bit.ly/2zRBNUq
![Page 53: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/53.jpg)
apollo
![Page 54: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/54.jpg)
query
![Page 55: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/55.jpg)
import gql from ‘graphql-tag’
import { Query } from ‘react-apollo’
![Page 56: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/56.jpg)
const GET_USERS = gql`query {
users {id,name,email
}}`
![Page 57: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/57.jpg)
const GET_USERS = gql`query {
users {id,name,email
}}`
![Page 58: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/58.jpg)
<Query query={GET_USERS}> {({ load, error, data }) => {
...}
</Query>
![Page 59: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/59.jpg)
when?
![Page 60: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/60.jpg)
is difficult to close the API contracts
![Page 61: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/61.jpg)
overfetching
underfetching
![Page 62: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/62.jpg)
consume the same endpoint in != ways
![Page 63: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/63.jpg)
consuming != APIs
![Page 64: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/64.jpg)
learn something new!
![Page 65: GRAPHQL - Amazon Web Services · GraphQL is a query language & alternative to REST + graphs-> nodes-> edges. query language SELECT * FROM . type House {edge: Person} type Person {...](https://reader030.fdocuments.us/reader030/viewer/2022041017/5eca7eb50d81a11e9771cbbe/html5/thumbnails/65.jpg)
thanks!@felipesoares6_
felipesoares6
bit.ly/2FQPwRG bit.ly/2zRBNUqclient-side server-side