You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除swagger_yard生成的OpenAPI.yml中的Ruby类型前缀?

解决swagger_yard生成OpenAPI.yml中的Ruby对象标识问题

给你几个实用的解决办法:

1. 配置swagger_yard强制转成原生类型

在项目的config/initializers/swagger_yard.rb初始化文件里添加序列化规则,把YARD的特殊对象直接转成普通字符串:

SwaggerYard.configure do |config|
  config.serializer = lambda do |object|
    # 把Docstring对象转成纯文本
    if object.is_a?(YARD::Docstring)
      object.to_s
    # 把模块/类对象转成名称字符串
    elsif object.is_a?(YARD::CodeObjects::ModuleObject) || object.is_a?(YARD::CodeObjects::ClassObject)
      object.name.to_s
    else
      object
    end
  end
end

重新生成OpenAPI文档后,那些Ruby类型标识就会消失。

2. 用脚本后处理生成的YAML文件

如果不想改gem配置,直接写个Ruby脚本清理已生成的openapi.yml:

require 'yaml'

# 读取原始文件
yaml_data = YAML.load_file('openapi.yml')

# 递归清理所有YARD特殊对象
def clean_up(obj)
  case obj
  when Hash
    obj.each { |k, v| obj[k] = clean_up(v) }
  when Array
    obj.map! { |item| clean_up(item) }
  when YARD::Docstring
    obj.to_s
  when YARD::CodeObjects::ModuleObject, YARD::CodeObjects::ClassObject
    obj.name.to_s
  end
  obj
end

# 处理后写入新文件
cleaned_data = clean_up(yaml_data)
File.write('cleaned_openapi.yml', YAML.dump(cleaned_data))

运行这个脚本后,cleaned_openapi.yml就是干净的版本,适合文档站点和SDK生成工具解析。

3. 定制swagger_yard的序列化逻辑

如果上面的方法都不够,直接修改swagger_yard的源码:找到生成summary、description以及模型引用的代码部分,把YARD对象的调用改成to_s或者直接取名称,避免序列化整个Ruby对象。比如在生成接口描述时,用docstring.to_s代替直接序列化Docstring对象。

内容的提问来源于stack exchange,提问作者RandonneurLibre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 09:55:00