W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵
API 與用戶的通信協(xié)議,通常是 REST API 和 RPC API 作為傳輸層協(xié)議,而 Kratos 主要參考 Google API 指南,實(shí)現(xiàn)了對應(yīng)通信協(xié)議支持,并且遵守了 gRPC API 使用 HTTP 映射功能進(jìn)行 JSON/HTTP 的支持。
也就是通過定義 proto 即可使用 REST API 和 RPC API,通過類似 Google API 的倉庫方式進(jìn)行 API Schema 的管理。
通過 Protobuf IDL 定義對應(yīng)的 REST API 和 gRPC API:
api/helloworld/v1/greeter.proto
syntax = "proto3";
package helloworld.v1;
import "google/api/annotations.proto";
option go_package = "github.com/go-kratos/service-layout/api/helloworld/v1;v1";
option java_multiple_files = true;
option java_package = "dev.kratos.api.helloworld.v1";
option java_outer_classname = "HelloWorldProtoV1";
// The greeting service definition.
service Greeter {
// Sends a greeting
rpc SayHello (HelloRequest) returns (HelloReply) {
option (google.api.http) = {
// 定義一個 GET 接口,并且把 name 映射到 HelloRequest
get: "/helloworld/{name}",
// 可以添加附加接口
additional_bindings {
// 定義一個 POST 接口,并且把 body 映射到 HelloRequest
post: "/v1/greeter/say_hello",
body: "*",
}
};
}
}
// The request message containing the user's name.
message HelloRequest {
string name = 1;
}
// The response message containing the greetings
message HelloReply {
string message = 1;
}
# 生成 proto 模板
kratos proto add api/helloworld/v1/greeter.proto
# 生成 client 源碼
kratos proto client api/helloworld/v1/greeter.proto
# 生成 server 源碼
kratos proto server api/helloworld/v1/greeter.proto -t internal/service
client:
|____api
| |____helloworld
| | |____v1
| | | |____greeter.pb.go
| | | |____greeter.proto
| | | |____greeter_http.pb.go
| | | |____greeter_grpc.pb.go
server:
| |____service
| | |____greeter.go
HTTP API 是通過 protoc-gen-go-http 插件進(jìn)行生成 http.Handler,然后可以注冊到 HTTP Server 中:
import "github.com/go-kratos/kratos/v2/transport/http"
greeter := &GreeterService{}
srv := http.NewServer(http.Address(":8000"))
srv.HandlePrefix("/", v1.NewGreeterHandler(greeter))
gRPC API 是通過 protoc-gen-go-grpc 插件進(jìn)行生成 gRPC Register,然后可以注冊到 GRPC Server 中;
import "github.com/go-kratos/kratos/v2/transport/grpc"
greeter := &GreeterService{}
srv := grpc.NewServer(grpc.Address(":9000"))
v1.RegisterGreeterServer(srv, greeter)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: