golang:Kratos 微服务框架 API 工程化指南

准备

后端工具

命令作用当前版本
bash go install google.golang.org/protobuf/cmd/protoc-gen-go@latest用于生成struct代码protoc-gen-go v1.30.0
bash go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest用于生成grpc服务代码
bash go install github.com/go-kratos/kratos/cmd/protoc-gen-go-http/v2@latest用于生成rest服务代码
bash go install github.com/go-kratos/kratos/cmd/protoc-gen-go-errors/v2@latest用于生成kratos的错误定义代码
bash go install github.com/envoyproxy/protoc-gen-validate@latest用于生成消息验证器代码
bash go install github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2@latest用于生成OpenAPI V2文档
bash go install github.com/google/gnostic/cmd/protoc-gen-openapi@latest用于生成OpenAPI V3文档

怎么做

初始化项目

创建项目

命令: kratos new 你的项目

项目编译和运行

命令行运行方式

cd 你的项目
make all
kratos run

Golang运行方式(推荐,支持断点调试)

定义API Protocolbuffers

新建PB文件

cd 你的项目
kratos proto add api/问题域/版本/领域对象.proto

名称解析

在这里插入图片描述

举个例子:
在这里插入图片描述

定义PB文件

初始化PB文件示例
生成的PB文件会有基本的curd的,示例如下

syntax = "proto3";

package api.metadata.v1;

option go_package = "test/api/metadata/v1;v1";
option java_multiple_files = true;
option java_package = "api.metadata.v1";

service Environment {
        rpc CreateEnvironment (CreateEnvironmentRequest) returns (CreateEnvironmentReply);
        rpc UpdateEnvironment (UpdateEnvironmentRequest) returns (UpdateEnvironmentReply);
        rpc DeleteEnvironment (DeleteEnvironmentRequest) returns (DeleteEnvironmentReply);
        rpc GetEnvironment (GetEnvironmentRequest) returns (GetEnvironmentReply);
        rpc ListEnvironment (ListEnvironmentRequest) returns (ListEnvironmentReply);
}

message CreateEnvironmentRequest {}
message CreateEnvironmentReply {}

message UpdateEnvironmentRequest {}
message UpdateEnvironmentReply {}

message DeleteEnvironmentRequest {}
message DeleteEnvironmentReply {}

message GetEnvironmentRequest {}
message GetEnvironmentReply {}

message ListEnvironmentRequest {}
message ListEnvironmentReply {}

添加HTTP支持

初始化文件中仅支持rpc调用,要添加HTTP可以在 service 里具体某个方法中添加以下option

option (google.api.http) = {
    $HTTPMethod: "$URL"
};

举个例子
Get方法为

option (google.api.http) = {
    get: "/api/v1/environment"
};

Post方法为

option (google.api.http) = {
    post: "/api/v1/environment"
    body: "*" # post 方法必须要的body
};

Put方法

option (google.api.http) = {
    put: "/api/v1/environment/{id}"
    body: "*"
};

Delete方法

option (google.api.http) = {
    delete: "/api/v1/environment/{id}"
};

关于message的定义

在message可以定义你的请求参数体和返回体

message UpdateEnvironmentRequest {
  int32 id = 1 [(validate.rules).int32 = {gt:0}];
  string name = 2 [(validate.rules).string.min_len = 1];
  string cnName = 3;
  int32  product_id = 4;
  string region_name = 5;
}

message UpdateEnvironmentReply {
  int32 code = 1;
  string message = 2;
}

关于参数验证

在使用 validate 之前首先需要安装 proto-gen-validate
命令:go get -d github.com/envoyproxy/protoc-gen-validate
需要在pb文件头部导入 validate.proto文件,既 import “validate/validate.proto”;

https://segmentfault.com/a/1190000040818600#item-1

https://xie.infoq.cn/article/bd41985d14ef2bcec04110a91

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值