支持在 OpenAPI 为特定字段用途限制已曝光的enum 值
□ 特性
问题
当使用原生-gen-openapiv2时,enum 字段总是在生成的Swagger/OpenAPI schemas中暴露出完整的enum定义.
示例
enum 资源类型 { 资源类型=0; 资源类型=1; 资源=2; 资源 类型 服务=3; 资源=4; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
信件资源请求{ 资源类型 类型=1; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
生成的OpenAPI schema 在全球暴露出所有enum值.
然而,在某些API中,我们希望:
使用原生铝进行内部强打字 生成的语言常数 enum 验证
,但仅在OpenAPI中为特定字段使用而暴露的受限制子集(或替代代表).
例如,Resources TYPE INTRNAL可能只用于内部服务,不应出现在公共API文件中.
目前唯一的工作是:
将 enum 字段改为字符串 在验证说明中手动复制 enum names 手动维持enum定义和字符串验证列表之间的同步
实例
字符串资源 类型= 1 [ (验证. rules). 字符串={ 用于: "资源类型", (原始内容存档于2013-10-10). Required Type GROUP",. "资源 类型 服务" [ . ] {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? ; ; ;
这引入了:
重复的真相来源 维修负担 铝/钢丝漂移的风险 API合同中原型活性铝打字损失
** 请求的特征**
支持外地一级的OpenAPI enum投影/限制.
示例想法:
资源类型 类型= 1 [ (grpc.gateway.protoc gen openapiv2. options.openapiv2 field)=/ (原始内容存档于2018-09-30). enum 子集 : [ "资源类型", (原始内容存档于2013-10-10). Required Type GROUP",. "资源 类型 服务" [ . ] {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? ; ; ;
预期行为 :
原生活字段仍为enum型 生成的 SDK 保留 enum 安全 OpenAPI 计划仅显示该字段的选定enum值 避免将enum转换为纯粹用于文档关切的字符串 其他上下文
这对于:
公众与内部API接触 部分
内容来源: grpc-ecosystem/grpc-gateway