Top Banner
Build Scalable APIs using GraphQL and Serverless
60

Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

May 23, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

Build Scalable APIs using

GraphQL and Serverless

Page 2: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 3: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 4: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 5: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

JS

Page 6: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 7: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 8: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 9: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

–-Lee Byron

a data-fetching API powerful enough to describe all of Facebook

Page 10: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 11: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

https://facebook.com/user/id

https://facebook.com/user/id/events

https://facebook.com/user/id/friends-suggestions

https://facebook.com/user/id/friends-birthdays

Page 12: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

https://facebook.com/user/id/events { "name": “ServerlessDays", "location": "Cardiff", "organiser": "Matt", "attendees": [ { "name": “Ant Stanley", "company": "!", "role": “Father of ServerlessDays” } ] }

Page 13: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 14: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Overfetch

Or

New endpoint

Page 15: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 16: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

https://facebook.com/user/id/friends-suggestions

{ "name": "Golnaz Badazadeh", "profile_pic": "some_url", "mutual_friends": [] }

Page 17: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

https://facebook.com/user/id/friends-suggestions/id/mutual { "mutual_friends": [ { "name": "Sarah Drasner", "profile_pic": "some_url", "tag": "Amazing!" } ] }

Page 18: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Underfetch

Or

New endpoint

Page 19: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Delay User Perception

0-100 ms Instant

100-300 ms Small perceptible delay

300-1000 ms Machine is working

1000+ ms Likely context switch

10000+ ms Task is abandoned

High performance Browser Networking

Page 20: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

–-Ilya Grigorik

The fastest network request is a request not made

Page 21: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

query { user(id:1) { name events { count } friends_suggestions { name mutual_friends { count } } } }

{ "data": { "user": { "name": "Simona Cotin", "events": { "count": 4 }, "friends_suggestions": { "name": "Golnaz Babazadeh", "mutual_friends": { "count": 15 } } } } }

Page 22: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Schema driven development

Page 23: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Strongly typed

Page 24: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

type People { id: ID! name: String avatar: URL }

Page 25: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

type People { id: ID! name: String avatar: URL } type Team { id: ID! name: String points: Int people: [People] }

Page 26: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

type Query { teams: [Team] } type Mutation { incrementPoints(id: ID!): Team }

Page 27: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

const root = { teams: async () =>" { let teams = await axios.get( 'https://graphqlvoting.azurewebsites.net/api/score' ); return teams.data; }, incrementPoints: async obj =>" { let response = await axios.get( `https://graphqlvoting.azurewebsites.net/api/score/${obj.id}` ); return response.data; } };

Page 28: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 29: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 30: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 31: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

✓ Performance

✓ Flexibility

✓ Tooling

Page 32: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Serverless

Page 33: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

–-Steve Jobs

The line of code that’s the fastest to write, that never breaks,that doesn’t need maintenance, is the line you never had to write.

Page 34: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

module.exports = async function(context, req) { context.res = { body: 'Hello ' + req.query.name }; };

Page 35: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.
Page 36: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Right-Click Deploy

Page 37: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.
Page 38: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Github Deploy

Page 39: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 40: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Datasources 3rd party APIs

Page 41: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 42: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

{ "type": "cosmosDB", "name": "inputDocument", "databaseName": "admin", "collectionName": "Recipes", "connectionStringSetting": "tacos-sql_DOCUMENTDB", “direction": "in" }

Page 43: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

module.exports = async function(context, req) { context.res = { body: context.bindings.inputDocument }; };

Page 44: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

✓ Reusable API

✓ VS Code dev & debug

✓ Easy Integration Datasources

Page 45: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

No servers to

manage

Page 46: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Serverless

Page 47: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 48: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 49: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 50: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 51: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 52: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

module.exports = async function(context, req) { const body = req.body; let response = await graphql( typeDefs, body.query, root, null, body.variables, body.operationName ); context.res = { body: response }; };

Page 53: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 54: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 55: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 56: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Page 57: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Easy Integration of Datasources

Autoscalability

Less code

Easy Abstraction of Datasources

Single Endpoint

Smaller no requests

Serverless GraphQL

Page 58: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Easy Integration of Datasources

Easy Abstraction of Datasources

Autoscalability

Single Endpoint

Less code

Smaller no requests

Dev productivity

Page 59: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

Achieve more by

doing less

Page 60: Build Scalable APIs using GraphQL and Serverless · Build Scalable APIs using GraphQL and Serverless. @simona_cotin. @simona_cotin. @simona_cotin. @simona_cotin JS. @simona_cotin.

@simona_cotin

https://github.com/simonaco/serverless-graphql-workshop