Contents

BufBuild

Contents

BufBuild

https://buf.build/docs/cli/installation/#homebrew

syntax = "proto3";

package example;

import "google/api/annotations.proto";
import "google/protobuf/empty.proto";

message GetUserRequest {
  string id = 1;
}

message User {
  string id = 1;
  string name = 2;
}

service UserService {
  // 定义 HTTP 映射: GET /v1/users/{id}
  rpc GetUser(GetUserRequest) returns (User) {
    option (google.api.http) = {
      get: "/v1/users/{id}"
    };
    // 用于 Swagger 文档的描述
    option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
      summary: "获取用户信息";
      description: "根据 ID 返回用户详细信息";
    };
  }
  
  rpc ListUsers(google.protobuf.Empty) returns (stream User) {
    option (google.api.http) = {
      get: "/v1/users"
    };
  }
}

buf.gen.yaml

version: v2
plugins:
  # 1. 生成 Protobuf Go 代码
  - local: protoc-gen-go
    out: .
    opt: paths=source_relative

  # 2. 生成 gRPC Go 代码
  - local: protoc-gen-go-grpc
    out: .
    # opt: paths=source_relative,require_unimplemented_servers=false
    opt: paths=source_relative

  # 2. 生成 gRPC Go 代码
  - local: protoc-gen-connect-go
    out: .
    opt: paths=source_relative

  # 4. 生成 Swagger/OpenAPI 文档
  - local: protoc-gen-openapiv2
    out: .
    # opt 可以配置 swagger 的具体行为,如输出格式、是否包含服务等
    # opt: logtostderr=true,allow_merge=true,merge_file_name=swagger # 合并为一个文件

buf.yaml

# For details on buf.yaml configuration, visit https://buf.build/docs/configuration/v2/buf-yaml
version: v2
lint:
  use:
    - STANDARD
deps:
  - buf.build/googleapis/googleapis       # Google API 注解 (http, annotations)
  - buf.build/grpc-ecosystem/grpc-gateway
breaking:
  use:
    - FILE

生成

 buf generate