Help us shape the future of Go! Take the 2026 Go Developer Survey

router

package module
v0.0.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 4, 2018 License: MIT Imports: 3 Imported by: 0

README

AppSync Router

GitHub release GoDoc Go Report Card MIT License Build Status

Wrapper for routing AppSync resolvers with AWS Lambda using Go.

Usage

Installation
$ > go get github.com/sbstjn/appsync-router
Routing
import (
  "github.com/sbstjn/appsync-router"
)

type ParamsRouteA struct {
	Foo string `json:"foo"`
}

type ParamsRouteB struct {
	Bar string `json:"bar"`
}

func handleRouteA(args ParamsRouteA) (interface{}, error) {
	return nil, fmt.Errorf("Nothing here in route A: %s", args.Foo)
}

func handleRouteB(args ParamsRouteB) (interface{}, error) {
	return nil, fmt.Errorf("Nothing here in route B: %s", args.Bar)
}

var (
	r = router.New()
)

func init() {
	r.Add("fieldA", handleRouteA)
	r.Add("fieldB", handleRouteB)
}

func main() {
	lambda.Start(r.Serve)
}
AppSync Configuration

Routing is based on a field property in your RequestMappingTemplate, which can be configured using the AWS Console or CloudFormation as well.

  AppSyncDataSource:
    Type: AWS::AppSync::DataSource
    Properties:
      ApiId: !GetAtt [ AppSyncAPI, ApiId ]
      Name: resolver
      Type: AWS_LAMBDA
      LambdaConfig:
        LambdaFunctionArn: !GetAtt [ Lambda, Arn ]
      ServiceRoleArn: !GetAtt [ Role, Arn ]

  AppSyncResolverA:
    Type: AWS::AppSync::Resolver
    Properties:
      ApiId: !GetAtt [ AppSyncAPI, ApiId ]
      TypeName: Query
      FieldName: fieldA
      DataSourceName: !GetAtt [ AppSyncDataSource, Name ]
      RequestMappingTemplate: '{ "version" : "2017-02-28", "operation": "Invoke", "payload": { "field": "fieldA", "arguments": $utils.toJson($context.arguments) } }'
      ResponseMappingTemplate: $util.toJson($context.result)

  AppSyncResolverB:
    Type: AWS::AppSync::Resolver
    Properties:
      ApiId: !GetAtt [ AppSyncAPI, ApiId ]
      TypeName: Query
      FieldName: fieldB
      DataSourceName: !GetAtt [ AppSyncDataSource, Name ]
      RequestMappingTemplate: '{ "version" : "2017-02-28", "operation": "Invoke", "payload": { "field": "fieldB", "arguments": $utils.toJson($context.arguments) } }'
      ResponseMappingTemplate: $util.toJson($context.result)

See [appsync-router-example] for a full working example how to use appsync-router and [Amazon Serverless Application Model] to deploy a GraphQL API using AppSync.

License

Feel free to use the code, it's released using the MIT license.

Contribution

You are welcome to contribute to this project! 😘

To make sure you have a pleasant experience, please read the code of conduct. It outlines core values and beliefs and will make working together a happier experience.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Handler added in v0.0.2

type Handler struct {
	// contains filtered or unexported fields
}

Handler is an abstract function

func (*Handler) Call added in v0.0.2

func (h *Handler) Call(args []reflect.Value) (interface{}, error)

Call the handler and pass event

func (*Handler) Prepare added in v0.0.2

func (h *Handler) Prepare(payload json.RawMessage) ([]reflect.Value, error)

Prepare parses event payload

type Request

type Request struct {
	Field     string          `json:"field"`
	Arguments json.RawMessage `json:"arguments"`
}

Request stores all information from AppSync request

type Router

type Router map[string]Handler

Router stores all routes and handlers

func New

func New() Router

New returns a new Router

func (Router) Add

func (r Router) Add(route string, function interface{}) error

Add stores a new route with handler

func (Router) Get added in v0.0.2

func (r Router) Get(route string) (*Handler, error)

Get return handler for route or error

func (Router) Serve

func (r Router) Serve(req Request) (interface{}, error)

Serve parses the AppSync request

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL