appsync

package module
v0.0.0-...-afb2c6d Latest Latest
Warning

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

Go to latest
Published: Sep 2, 2019 License: MIT Imports: 9 Imported by: 0

README

appsync-client-go

Job Status Report Job Status godoc

AWS AppSync Go client library

Features

  • GraphQL Query(Queries, Mutations and Subscriptions).
  • MQTT over Websocket for subscriptions.

Getting Started

Installation
$ go get github.com/sony/appsync-client-go
Example

See example.

License

This library is distributed under The MIT license. See LICENSE and NOTICE for more information.

Documentation

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Client

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

Client is the AppSync GraphQL API client

func NewClient

func NewClient(graphql GraphQLClient, opts ...ClientOption) *Client

NewClient returns a Client instance.

func (*Client) Post

func (c *Client) Post(request graphql.PostRequest) (*graphql.Response, error)

Post is a synchronous AppSync GraphQL POST request.

Example (Mutation)
package main

import (
	"encoding/json"
	"fmt"
	"log"

	"github.com/rodrigopavezi/appsync-client-go/internal/appsynctest"

	appsync "github.com/rodrigopavezi/appsync-client-go"
	"github.com/rodrigopavezi/appsync-client-go/graphql"
)

func main() {
	server := appsynctest.NewAppSyncEchoServer()
	defer server.Close()

	client := appsync.NewClient(appsync.NewGraphQLClient(graphql.NewClient(server.URL)))
	mutation := `mutation Echo($message: String!) { echo(message: $message) }`
	variables := json.RawMessage(fmt.Sprintf(`{ "message": "%s"	}`, "Hi, AppSync!"))
	response, err := client.Post(graphql.PostRequest{
		Query:     mutation,
		Variables: &variables,
	})
	if err != nil {
		log.Fatal(err)
	}

	data := new(string)
	if err := response.DataAs(data); err != nil {
		log.Fatalln(err, response)
	}
	fmt.Println(*data)

}
Output:

Hi, AppSync!
Example (Query)
package main

import (
	"fmt"
	"log"

	"github.com/rodrigopavezi/appsync-client-go/internal/appsynctest"

	appsync "github.com/rodrigopavezi/appsync-client-go"
	"github.com/rodrigopavezi/appsync-client-go/graphql"
)

func main() {
	server := appsynctest.NewAppSyncEchoServer()
	defer server.Close()

	query := `query Message() { message }`
	client := appsync.NewClient(appsync.NewGraphQLClient(graphql.NewClient(server.URL)))
	response, err := client.Post(graphql.PostRequest{
		Query: query,
	})
	if err != nil {
		log.Fatal(err)
	}

	data := new(string)
	if err := response.DataAs(data); err != nil {
		log.Fatalln(err, response)
	}
	fmt.Println(*data)

}
Output:

Hello, AppSync!
Example (Subscription)
package main

import (
	"encoding/json"
	"fmt"
	"log"

	"github.com/rodrigopavezi/appsync-client-go/internal/appsynctest"

	appsync "github.com/rodrigopavezi/appsync-client-go"
	"github.com/rodrigopavezi/appsync-client-go/graphql"
)

func main() {
	server := appsynctest.NewAppSyncEchoServer()
	defer server.Close()

	client := appsync.NewClient(appsync.NewGraphQLClient(graphql.NewClient(server.URL)))
	subscription := `subscription SubscribeToEcho() { subscribeToEcho }`
	response, err := client.Post(graphql.PostRequest{
		Query: subscription,
	})
	if err != nil {
		log.Fatal(err)
	}

	ext, err := appsync.NewExtensions(response)
	if err != nil {
		log.Fatalln(err)
	}

	ch := make(chan *graphql.Response)
	subscriber := appsync.NewSubscriber(*ext,
		func(r *graphql.Response) { ch <- r },
		func(err error) { log.Println(err) },
	)

	if err := subscriber.Start(); err != nil {
		log.Fatalln(err)
	}
	defer subscriber.Stop()

	mutation := `mutation Echo($message: String!) { echo(message: $message) }`
	variables := json.RawMessage(fmt.Sprintf(`{ "message": "%s" }`, "Hi, AppSync!"))
	_, err = client.Post(graphql.PostRequest{
		Query:     mutation,
		Variables: &variables,
	})
	if err != nil {
		log.Fatal(err)
	}

	response = <-ch
	data := new(string)
	if err := response.DataAs(data); err != nil {
		log.Fatalln(err, response)
	}
	fmt.Println(*data)

}
Output:

Hi, AppSync!

func (*Client) PostAsync

func (c *Client) PostAsync(request graphql.PostRequest, callback func(*graphql.Response, error)) (context.CancelFunc, error)

PostAsync is an asynchronous AppSync GraphQL POST request.

type ClientOption

type ClientOption interface {
	Apply(*Client)
}

ClientOption represents options for an AppSync client.

func WithSubscriberID

func WithSubscriberID(subscriberID string) ClientOption

WithSubscriberID returns a ClientOption configured with the given AppSync subscriber ID

type Extensions

type Extensions struct {
	Subscription struct {
		Version         string `json:"version"`
		MqttConnections []struct {
			URL    string   `json:"url"`
			Topics []string `json:"topics"`
			Client string   `json:"client"`
		} `json:"mqttConnections"`
	} `json:"subscription"`
}

Extensions represents AWS AppSync subscription response extensions

func NewExtensions

func NewExtensions(response *graphql.Response) (*Extensions, error)

NewExtensions returns Extensions instance

type GraphQLClient

type GraphQLClient interface {
	Post(header http.Header, request graphql.PostRequest) (*graphql.Response, error)
	PostAsync(header http.Header, request graphql.PostRequest, callback func(*graphql.Response, error)) (context.CancelFunc, error)
}

GraphQLClient is the interface to access GraphQL server.

func NewGraphQLClient

func NewGraphQLClient(client *graphql.Client) GraphQLClient

NewGraphQLClient returns a GraphQLClient interface

type Subscriber

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

Subscriber has MQTT connections and subscription information.

func NewSubscriber

func NewSubscriber(extensions Extensions, callback func(response *graphql.Response), onConnectionLost func(err error)) *Subscriber

NewSubscriber returns a new Subscriber instance.

func (*Subscriber) Start

func (s *Subscriber) Start() error

Start starts a new subscription.

func (*Subscriber) Stop

func (s *Subscriber) Stop()

Stop ends the subscription.

Directories

Path Synopsis
internal

Jump to

Keyboard shortcuts

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