serverless-graphql-api

Serverless GraphQL API using Lambda and DynamoDB, bundled with webpack

  • 所有者: b04zdotcom/serverless-graphql-api
  • 平台:
  • 许可证:
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

banner

Serverless GraphQL API using Lambda and DynamoDB

serverless
Build Status

GraphQL Lambda Server using graphql-server-lambda from Apollo.

graphql-tools and merge-graphql-schemas are used to generate the schema.

serverless-webpack is used to transform ES6 with Babel and build the lambda.

Setup

Clone the repository and install the packages.

git clone https://github.com/boazdejong/serverless-graphql-api
cd serverless-graphql-api
npm install

Deploy

Run the deploy script to create the Lambda Function and API Gateway for GraphQL. This also creates two DynamoDB tables named artists and songs

npm run deploy

Queries and Mutations

Query the GraphQL server using the GraphiQL.app. If you have Homebrew installed on OSX run

brew cask install graphiql

Mutations

The following mutations are available in this example.

createArtist()

Create an artist providing the first and last name as arguments. The id will be a generated uuid.

mutation {
  createArtist(first_name: "Billy", last_name: "Crash") {
    id
  }
}

createSong()

Using the generated id from the artist you can create a song with the following mutation. Also provide a title and duration.

mutation {
  createSong(artist: "99a746e0-0734-11e7-b2fd-45ae0a3b9074", title: "Whatever", duration: 120) {
    id
  }
}

updateArtist()

mutation {
  updateArtist(id: "99a746e0-0734-11e7-b2fd-45ae0a3b9074", first_name: "John", last_name: "Ruth") {
    id
    first_name
    last_name
  }
}

updateSong()

mutation {
  updateSong(id: "a8a0a060-071b-11e7-bd09-8562f101f7c2", artist: "99a746e0-0734-11e7-b2fd-45ae0a3b9074", duration: 130, title: "A new title") {
    id
  }
}

Queries

Example query

{
  songs {
    id
    title
    duration
    artist {
      id
      first_name
      last_name
    }
  }
}

This query will return a result similar to this

{
  "data": {
    "songs": [
      {
        "id": "a8a0a060-071b-11e7-bd09-8562f101f7c2",
        "title": "Whatever",
        "duration": 120,
        "artist": {
          "id": "99a746e0-0734-11e7-b2fd-45ae0a3b9074",
          "first_name": "Billy",
          "last_name": "Crash"
        }
      }
    ]
  }
}

DynamoDB Streams

This project also includes an example of capturing table activity with DynamoDB Streams.
The record lambda function is triggered by two stream events. One for each table.

In serverless.yml:

record:
  handler: lib/handler.record
  events:
    - stream:
        type: dynamodb
        arn:
          Fn::GetAtt:
            - ArtistsDynamoDbTable
            - StreamArn
        batchSize: 1
    - stream:
        type: dynamodb
        arn:
          Fn::GetAtt:
            - SongsDynamoDbTable
            - StreamArn
        batchSize: 1

The stream is enabled when defining the DynamoDB table in the serverless.yml resources.

StreamSpecification:
  StreamViewType: NEW_AND_OLD_IMAGES

主要指标

概览
名称与所有者b04zdotcom/serverless-graphql-api
主编程语言JavaScript
编程语言JavaScript (语言数: 1)
平台
许可证
所有者活动
创建于2017-03-10 00:51:11
推送于2018-03-18 12:19:49
最后一次提交2017-08-15 15:24:54
发布数0
用户参与
星数293
关注者数10
派生数30
提交数34
已启用问题?
问题数2
打开的问题数1
拉请求数1
打开的拉请求数0
关闭的拉请求数1
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?