GraphQL over gRPC.
GraphQL has made query and mutating data easier for front-end. How about using GraphQL to communicate between microservices? And lately, gRPC has been choosen over REST to communicate between microservices in backend because of the speed.
Here, GraphRPC made the transport of the GraphQL query to gRPC for easy communicate between microservices without neglecting the speed
Note: GraphRPC intended to extend graph-gophers handler over gRPC. GraphRPC need GraphQL resolver implementation from it.
Complete example see examples folder
go get -u github.com/aeramu/graphrpcpackage main import ( "net" "github.com/aeramu/graphrpc" "github.com/graph-gophers/graphql-go" ) func main() { schema := graphql.MustParseSchema(schemaString, &resolver{}) server := graphrpc.NewGraphRPCServer(schema) listener, _ := net.Listen("tcp", ":8000") server.Serve(listener) }package main import ( "context" "log" "github.com/aeramu/graphrpc" "google.golang.org/grpc" ) func main() { conn, _ := grpc.Dial("localhost:8000", grpc.WithInsecure()) client := graphrpc.NewGraphRPCClient(conn) res, err := client. WithQuery( `query($id: ID!){ getFilm(id: $id) { id title synopsis rating } }`). ExecWithVariables(context.Background(), map[string]interface{}{ "id": "e7098dc0-b407-41e2-9a60-aca4c9638bea", }) if err != nil { log.Println(err) return } var data Data if err := res.Consume(&data); err != nil { log.Println(err) return } fmt.Println(data) }- Testing
- Is API good enough? (Exec Request Builder)
- Is it concurrency safe?
- Add support to different GraphQL library(?) (or maybe make another own)