Who is this for?
@gethackteam
@gethackteam
@gethackteam
What to do…? 🤔
@gethackteam
A little bit about
myself first…
@gethackteam
Roy Derks
@gethackteam
@gethackteam
Suppose you’re working
on this great project
@gethackteam
TITLE
CATEGORIES
PRICE
REST API
Database
@gethackteam
Let’s have a look at
a REST API
…that return fixed data structures
REST APIs have multiple
endpoints…
@gethackteam
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
1
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
2
1
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
2
3
1
I hear you thinking
@gethackteam
@gethackteam
@gethackteam
@gethackteam
So you continue…
(as the brave frontend developer you are)
@gethackteam
So you continue…
(as the brave developer you are)
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
1
2
3
…that return fixed data structures
REST APIs have multiple
endpoints…
@gethackteam
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
RATINGS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
RATINGS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
1
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
RATINGS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
1
2
@gethackteam
TITLE
CATEGORIES
PRICE
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
RATINGS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
REST API
1
2
3
@gethackteam
@gethackteam
What to do…? 🤔
@gethackteam
@gethackteam
A. B. C.
What to do…? 🤔
@gethackteam
A. B. C.
What to do…? 🤔
@gethackteam
GraphQL
REST
You have multiple options!
(unfortunately we can’t discuss all)
@gethackteam
You have multiple options!
(unfortunately we can’t discuss all)
@gethackteam
@gethackteam
Create your own GraphQL server
(it’s easier than you think)
@gethackteam
Create your own GraphQL server
(it’s easier than you think)
How to construct your
schema?
@gethackteam
REST API
@gethackteam
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
RATINGS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
GraphQL
Schema
@gethackteam
Schema
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
GraphQL
@gethackteam
Schema
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
GraphQL
@gethackteam
Schema
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
GraphQL
@gethackteam
Schema
PRODUCTSPRODUCTS
PRODUCTS
THUMBNAILS
PRODUCTS
REVIEWS
PRODUCTS
CATEGORIES
PRODUCTS
CATEGORIES
GraphQL
@gethackteam
http://bit.ly/2moBLQV
GraphQL server
with Express
@gethackteam
Express server
@gethackteam
Express server
Use resolvers to fetch the
REST endpoints
TITLE
CATEGORIES
PRICE
@gethackteam
TITLE
CATEGORIES
PRICE
1
@gethackteam
TITLE
CATEGORIES
PRICE
1
2
@gethackteam
TITLE
CATEGORIES
PRICE
1
2
3
@gethackteam
@gethackteam
TITLE
CATEGORIES
PRICE
@gethackteam
TITLE
CATEGORIES
PRICE
1
@gethackteam
TITLE
CATEGORIES
PRICE
1
@gethackteam
TITLE
CATEGORIES
PRICE
1
That was easy right?
@gethackteam
But comes with
two challenges…
@gethackteam
@gethackteam
Authentication Caching
@gethackteam
Authentication Caching
For this I like to use
JSON Web Tokens (JWT)
@gethackteam
But comes with
two challenges…
@gethackteam
But comes with
two challenges…
@gethackteam
Never add private
information!
@gethackteam
JWT
API
@gethackteam
/login
JWT
API
@gethackteam
/login
JWT
API
@gethackteam
JWT
API
@gethackteam
JWT
/products
API
@gethackteam
JWT
/products
Only returns data with a
valid JWT
API
JWTs are passed with every
request
@gethackteam
@gethackteam
@gethackteam
Passed to the GraphQL server
Remember the resolvers?
@gethackteam
@gethackteam
@gethackteam
Use resolvers to fetch the
REST endpoints
@gethackteam
@gethackteam
They can access the request headers
From there you can just send
them along with fetch()
@gethackteam
@gethackteam
@gethackteam
Send them along with the fetch() request
Your REST API doesn’t have
authentication?
@gethackteam
You can use an
authentication server
@gethackteam
@gethackteam
JWT
API
@gethackteam
/login
JWT
API
@gethackteam
/login
JWT
API
@gethackteam
/login
JWT
API
@gethackteam
/login
JWT
API
@gethackteam
JWT
API
/products
@gethackteam
JWT
API
/products
@gethackteam
JWT
API
/products
@gethackteam
JWT
Only returns data with a
valid JWT
API
Or create your own one!
@gethackteam
@gethackteam
@gethackteam
Encode and decode JWTs
But comes with
two challenges…
@gethackteam
But comes with
two challenges…
@gethackteam
JsonWebToken.sign()
But comes with
two challenges…
@gethackteam
But comes with
two challenges…
@gethackteam
JsonWebToken.verify()
@gethackteam
Authentication Caching
@gethackteam
Authentication Caching
@gethackteam
http://bit.ly/2lFLemp
GraphQL server with
Apollo & Express
Apollo Data sources
@gethackteam
Apollo Data sources
@gethackteam
Use models to fetch the
REST endpoints
@gethackteam
TITLE
CATEGORIES
PRICE
@gethackteam
TITLE
CATEGORIES
PRICE
1
@gethackteam
TITLE
CATEGORIES
PRICE
1
@gethackteam
TITLE
CATEGORIES
PRICE
1
@gethackteam
TITLE
CATEGORIES
PRICE
1
It helps you with caching
requests
@gethackteam
@gethackteam
Apollo Data sources
@gethackteam
Cached by default!!
Apollo Data sources
You can also use memcached
or redis
@gethackteam
@gethackteam
Apollo Data sources
@gethackteam
Get data from
request headers
Apollo Data sources
@gethackteam
Apollo Data sources
@gethackteam
So you can pass them forward to
the REST API
Apollo Data sources
So what do we want?
@gethackteam
@gethackteam
@gethackteam
Want to learn more?
Search: Roy Derks@gethackteam
https://auth0.com/docs
https://www.apollographql.com/docs/

Wrapping and Securing REST APIs with GraphQL