38
Serverless GraphQL Applications with Lambda

Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Serverless GraphQL Applications with Lambda

Page 2: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

• Based in Berlin/San Francisco

• @graphcool (Serverless GraphQL Platform)

• Love cutting-edge technology 🤖

@_schickling

Johannes Schickling

@schickling

Page 3: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

• Introduction to GraphQL

• Architecture & Concepts

• Live Demo

• Resources

Page 4: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Introduction to GraphQL

Page 5: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications
Page 6: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Use Case: Webshop

• Each Item has the following fields:

• id: ID

• title: String

• price: Float

• ratingInfo: RatingInfo

{ "id": "cj1s966c8hudb0139bg5qjmna", "price": 2500, "title": "Macbook Pro 2016", "ratingInfo": null}

Page 7: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Status Quo: RESTful APIs

GET https://api.shop.com/items

[{ "id": "cj1s966c8hudb0139bg5qjmna", "createdAt": "2017-04-21T19:52:37.000Z", "updatedAt": "2017-04-21T19:52:50.000Z", "price": 2500, "title": "Macbook Pro 2016"},{ "id": "cj1s96cpohufg0139keoewq22", "createdAt": "2017-04-21T19:52:46.000Z", "updatedAt": "2017-04-21T19:53:28.000Z", "price": 800, "title": "iPhone"},{ "id": "cj1s97mpwhuo10139salvx5wn", "createdAt": "2017-04-21T19:53:45.000Z", "updatedAt": "2017-04-21T19:53:45.000Z", "price": 1700, "title": "Macbook Air 2015"}]

Page 8: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Related data?

Page 9: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Problem: Related data?

• Strategy 1: Nested endpoints

Page 10: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Problem: Related data?

• Strategy 1: Nested endpoints Data overfetching

Page 11: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Problem: Related data?

• Strategy 1: Nested endpoints Data overfetching

• Strategy 2: Extra endpoint

Page 12: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Problem: Related data?

• Strategy 1: Nested endpoints Data overfetching

• Strategy 2: Extra endpoint N+1 query problem

Page 13: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Solution: GraphQL“A query language for your API”

Page 14: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

GraphQL Query

query { allItems {

title ratingInfo { count averageRating } }}

{ "data": { "allItems": [ { "title": "iPhone 6", "ratingInfo": { "count": 115, "averageRating": 4.7 } }, { "title": "Macbook 2016", "ratingInfo": { "count": 29, "averageRating": 4.9 } }, { "title": "Macbook 2015", "ratingInfo": { "count": 235, "averageRating": 4.8 } } ] }}

Page 15: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

GraphQL Mutation

mutation { createItem( title: "iPhone 7" price: 900 ) { id }}

{ "data": { "createItem": { "id": "cj1sbo2phrmpq0124t63uyo5f" } }}

Page 17: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

GraphQL IDL

type Item { id: ID! @isUnique createdAt: DateTime! updatedAt: DateTime! price: Float! title: String! ratingInfo: RatingInfo! @relation(name: "ItemRatingInfo")}

type RatingInfo { id: ID! @isUnique createdAt: DateTime! updatedAt: DateTime! count: Int! averageRating: Float! item: Item! @relation(name: "ItemRatingInfo")}

• Describes data model

• Syntax: GraphQL IDL

• Typesystem

Page 18: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Architecture & Concepts

Page 19: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

History

Page 20: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

History

Page 21: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

History

Page 22: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

History

Page 23: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

History

Page 24: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Traditional Backend

Monolith/Microservices

Database

API + DB + LOCIC LAYER

Page 25: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Serverless GraphQL Backend

GraphQL Backend

API LAYER

Business Logic

LOGIC LAYER

Events

Page 26: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Serverless GraphQL Backend Architecture

1. GraphQL API for frontend & backend applications

2. Event-driven business logic

1. Asynchronous events

2. Synchronous data transformation

3. Global type safety based on GraphQL

Page 27: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Graphcool

• Serverless GraphQL backend

• Turns GraphQL schema into a production-ready backend

• Event-driven

Page 28: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications
Page 29: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Request Pipeline

TRANSFORM_ARGUMENTS

TRANSFORM_REQUEST

PRE_WRITE

Data WriteSchema Validation

TRANSFORM_PAYLOAD

TRANSFORM_RESPONSE

Data Validation

Page 30: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Demo-App Overview

GraphcoolWebshop Serverless 3rd-party services

Page 31: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Live Demo

Page 32: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Order validation:

* Check availability * Check totals match

Goal: Ordering process

Charge credit card Save to database

Page 33: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

What we’ll do

1. Setup GraphQL API

2. Create some test data

3. Deploy functions

4. Configure events

5. Test run

Page 34: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

What we’ll do

1. Setup GraphQL API

2. Create some test data

3. Deploy functions

4. Configure events

5. Test run

Page 35: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Resources

Page 36: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

GraphQL & Serverless

• https://github.com/graphcool-examples/serverless-webshop

• https://serverless.com/blog/2017-04-5-build-webshop-with-graphql-and-serverless/

Page 37: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

slack.graph.cool

Page 38: Serverless GraphQL Applications with Lambdaaws-de-media.s3-eu-west-1.amazonaws.com/images/AWS... · Serverless GraphQL Backend Architecture 1. GraphQL API for frontend & backend applications

Thank you