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

猜你喜欢

转载自blog.csdn.net/zhizhengguan/article/details/129759656