规范

API 指令规范

ApiHug swagger 扩展使用手册

Maven Central version badge for com.apihug/it-bom

把 protobuf service / rpc 映射为 HTTP API,并生成 OpenAPI 文档。

  • 扩展包: apihug/protobuf/swagger/swagger.proto + annotations.proto
  • 作用范围: service / rpc / message / field / enum
  • 场景: HTTP API、OpenAPI 文档、前后端契约、AI 工具描述

导入

Proto
import "apihug/protobuf/swagger/annotations.proto";

如果字段或响应需要 mock 规则,再额外引入:

Proto
import "apihug/protobuf/mock/mock.proto";

扩展点

层级proto 元素扩展点
Serviceservice(hope.swagger.svc)
Methodrpc(hope.swagger.operation)
Messagemessage(hope.swagger.schema)
Fieldfield(hope.swagger.field)
Enumenum(hope.swagger.enm)

Service 级扩展

Proto
service PetService {
  option (hope.swagger.svc) = {
    path: "/pet";
    description: "宠物管理服务";
  };
}

Operation 级扩展

基础 HTTP 映射

Proto
rpc ListPets (PetQueryRequest) returns (Pet) {
  option (hope.swagger.operation) = {
    post: "/list";
    description: "分页查询宠物列表";
    tags: "pet";
  };
}

支持:

  • get
  • post
  • put
  • patch
  • delete

常用字段

字段说明
description接口说明
summary短摘要
tags分组标签
request_name请求体名称
pageable分页查询
input_repeated请求为列表
output_repeated响应为列表
raw返回原始响应,不再包装
session运行时需要 HttpSession
groupCUSTOMER / TENANT / PLATFORM
authorization授权规则
priority优先级
response_media_type响应媒体类型
request_schema请求体 schema 补充描述
response_schema响应 schema 补充描述
body_empty允许空响应体
multipartmultipart 请求
questions面向 AI 的自然语言提示
internal仅内部使用
hide文档中隐藏

兼容旧字段:

  • input_plural 已废弃,请使用 input_repeated
  • out_plural 已废弃,请使用 output_repeated
  • multiple 已废弃,请使用 multipart

分页与列表

分页查询:

Proto
option (hope.swagger.operation) = {
  post: "/pets/search";
  pageable: true;
};

普通列表:

Proto
option (hope.swagger.operation) = {
  post: "/pets/batch";
  input_repeated: true;
  output_repeated: true;
};

参数定义

路径、查询、Header、Cookie、Session 参数统一放在 parameters 中。

Proto
parameters: {
  parameter: {
    name: "id";
    in: PATH;
    schema: {
      format: LONG;
      minimum: 1;
    };
  };
  parameter: {
    name: "include-deleted";
    in: QUERY;
    schema: {
      format: BOOLEAN;
    };
  };
}

参数数组使用 is_repeated,不要再写 plural

Proto
parameter: {
  name: "user-id";
  in: QUERY;
  is_repeated: true;
  schema: {
    format: INTEGER;
  };
}

注意:session: true 是 operation 级运行时开关,不等于在 OpenAPI 参数列表里声明一个 SESSION 参数。

媒体类型

常用 response_media_type

枚举值MIME
APPLICATION_JSONapplication/json
TEXT_PLAINtext/plain
TEXT_HTMLtext/html
APPLICATION_PDFapplication/pdf
APPLICATION_ZIPapplication/zip
APPLICATION_VND_OPEN_XML_FORMATS_XLSXapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet
IMAGE_PNGimage/png
MULTIPART_FORM_DATAmultipart/form-data
APPLICATION_OCTET_STREAMapplication/octet-stream
TEXT_CSVtext/csv
APPLICATION_XMLapplication/xml

授权

Proto
authorization: {
  rbac: {
    authorities: ["PET_VIEW"];
  };
}

也可以使用:

  • low_limit_risky_mode
  • roles
  • expression

Message / Field 级扩展

message

Proto
message PlaceOrderRequest {
  option (hope.swagger.schema) = {
    json_schema: {
      title: "PlaceOrderRequest";
      description: "下单请求";
    };
  };
}

field

Proto
uint64 id = 1 [(hope.swagger.field) = {
  description: "请求 ID";
  empty: false;
  minimum: 1;
  maximum: 12345;
  example: "1111";
}];

字段约束规则

  • 布尔值直接写 true / false
  • 数字、长度直接写标量
  • 不再使用旧包装语法

正确示例:

Proto
max_length: 64;
maximum: 12345;
nullable: false;

错误示例:

Proto
max_length: {value: 64}
maximum: {value: 12345}
nullable: "false"

field_configuration.path_param_name

当字段被用作路径参数,且默认生成的参数名不合适时,可以显式指定:

Proto
string owner_id = 1 [(hope.swagger.field) = {
  field_configuration: {
    path_param_name: "owner-id";
  };
}];

Mock

字段 mock:

Proto
string phone = 1 [(hope.swagger.field) = {
  mock: {
    nature: CN_PHONE;
  };
}];

operation 级响应 mock:

Proto
option (hope.swagger.operation) = {
  post: "/ping";
  mock: {
    nature: GUID;
  };
};

更完整的 mock 规则请看 Mock 指令规范

最佳实践

  • Service 层只定义服务级路径和说明
  • 每个 RPC 明确 HTTP 方法与路径
  • 分页用 pageable,普通列表用 input_repeated / output_repeated
  • 参数数组用 is_repeated
  • 文档隐藏与内部接口分别使用 hideinternal
  • 媒体类型优先使用 proto 已定义枚举,不手写自造常量
  • 所有例子都用当前标量语法,不再使用 {value: ...} 包装写法
Copyright © 2026 ApiHug·AI-native Enterprise Architecture Factory