gRPC-GraphQL 网关项目使用指南
1. 项目的目录结构及介绍
grpc-graphql-gateway/
├── include/
│ └── graphql/
│ └── graphql.proto
├── service/
│ └── main.go
├── gateway/
│ └── main.go
├── example/
│ ├── greeter/
│ └── starwars/
├── README.md
└── LICENSE
include/graphql/graphql.proto
: 包含 GraphQL 相关的 Protobuf 定义。service/main.go
: gRPC 服务的启动文件。gateway/main.go
: GraphQL 网关服务的启动文件。example/
: 包含示例项目,如greeter
和starwars
。README.md
: 项目说明文档。LICENSE
: 项目许可证。
2. 项目的启动文件介绍
gRPC 服务启动文件
service/main.go
文件负责启动 gRPC 服务:
package main
import (
"log"
"net"
"google.golang.org/grpc"
"github.com/your/project/greeter"
)
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
greeter.RegisterGreeterServer(s, &greeter.Server{})
log.Printf("server listening at %v", lis.Addr())
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
GraphQL 网关服务启动文件
gateway/main.go
文件负责启动 GraphQL 网关服务:
package main
import (
"log"
"net/http"
"github.com/ysugimoto/grpc-graphql-gateway/runtime"
"github.com/your/project/greeter"
)
func main() {
mux := runtime.NewServeMux()
err := greeter.RegisterGreeterGraphql(mux)
if err != nil {
log.Fatalln(err)
}
http.Handle("/graphql", mux)
log.Fatalln(http.ListenAndServe(":8888", nil))
}
3. 项目的配置文件介绍
项目中没有显式的配置文件,所有配置都是通过代码中的硬编码或环境变量来完成的。例如,gRPC 服务的监听地址和端口在 service/main.go
中通过 net.Listen("tcp", ":50051")
指定,而 GraphQL 网关服务的监听地址和端口在 gateway/main.go
中通过 http.ListenAndServe(":8888", nil)
指定。
如果需要更多的配置,可以考虑使用环境变量或在代码中添加配置文件解析逻辑。