找回密码
 立即注册
查看: 173|回复: 0

Kratos项目组件——API 定义

[复制链接]
发表于 2024-7-15 18:07 | 显示全部楼层 |阅读模式
API 与用户的通信协议,凡是是 REST API 和 RPC API 作为传输层协议,而 Kratos 主要参考 Google API 指南,实现了对应通信协议撑持,而且遵守了 gRPC API 使用 HTTP 映射功能进行 JSON/HTTP 的撑持。
也就是通过定义 proto 即可使用 REST API 和 RPC API,通过类似 Google API 的仓库方式进行 API Schema 的打点。
定义接口​

通过 Protobuf IDL 定义对应的 REST API 和 gRPC API:
api/helloworld/v1/greeter.proto
  1. syntax = ”proto3”;
  2. package helloworld.v1;
  3. import ”google/api/annotations.proto”;
  4. option go_package = ”github.com/go-kratos/service-layout/api/helloworld/v1;v1”;
  5. option java_multiple_files = true;
  6. option java_package = ”dev.kratos.api.helloworld.v1”;
  7. option java_outer_classname = ”HelloWorldProtoV1”;
  8. // The greeting service definition.
  9. service Greeter {
  10.   // Sends a greeting
  11.   rpc SayHello (HelloRequest) returns (HelloReply)  {
  12.     option (google.api.http) = {
  13.         // 定义一个 GET 接口,而且把 name 映射到 HelloRequest
  14.         get: ”/helloworld/{name}”,
  15.         // 可以添加附加接口
  16.         additional_bindings {
  17.             // 定义一个 POST 接口,而且把 body 映射到 HelloRequest
  18.             post: ”/v1/greeter/say_hello”,
  19.             body: ”*”,
  20.         }
  21.     };
  22.   }
  23. }
  24. // The request message containing the user's name.
  25. message HelloRequest {
  26.   string name = 1;
  27. }
  28. // The response message containing the greetings
  29. message HelloReply {
  30.   string message = 1;
  31. }
复制代码
生成接口​
  1. # 生成 proto 模板
  2. kratos proto add api/helloworld/v1/greeter.proto
  3. # 生成 client 源码
  4. kratos proto client api/helloworld/v1/greeter.proto
  5. # 生成 server 源码
  6. kratos proto server api/helloworld/v1/greeter.proto -t internal/service
复制代码
代码布局
  1. client:
  2. |____api
  3. | |____helloworld
  4. | | |____v1
  5. | | | |____greeter.pb.go
  6. | | | |____greeter.proto
  7. | | | |____greeter_http.pb.go
  8. | | | |____greeter_grpc.pb.go
  9. server:
  10. | |____service
  11. | | |____greeter.go
复制代码
注册接口​

HTTP API 是通过 protoc-gen-go-http 插件进行生成 http.Handler,然后可以注册到 HTTP Server 中:
  1. import ”github.com/go-kratos/kratos/v2/transport/http”
  2. greeter := &GreeterService{}
  3. srv := http.NewServer(http.Address(”:8000”))
  4. srv.HandlePrefix(”/”, v1.NewGreeterHandler(greeter))
复制代码
gRPC API 是通过 protoc-gen-go-grpc 插件进行生成 gRPC Register,然后可以注册到 GRPC Server 中;
  1. import ”github.com/go-kratos/kratos/v2/transport/grpc”
  2. greeter := &GreeterService{}
  3. srv := grpc.NewServer(grpc.Address(”:9000”))
  4. v1.RegisterGreeterServer(srv, greeter)
复制代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-23 18:08 , Processed in 0.099008 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表