首页 > 解决方案 > 如何在 Rails 的 rswag/swagger 请求规范中指定 DECIMAL 和 DATE 格式?

问题描述

post('create user') do
  tags 'Jobs'
  consumes 'application/json'
  parameter name: :user, in: :body, schema: {
    type: :object,
    properties: {
      title: { type: :string },
      description: { type: :string },
      date: { type: :datetime  },
      budget: { type: :decimal },
      awarded: { type: :boolean }
    },
  required: [ 'title', 'description' ]
}
  response(201, 'created') do

    after do |example|
      example.metadata[:response][:content] = {
        'application/json' => {
          example: JSON.parse(response.body, symbolize_names: true)
        }
      }
    end
    let(:user) { { title: 'foo', description: 'bar' } }
    run_test!
  end
end

我已经按照上面的方式实现了我的请求,但是 Swagger UI 中的输出显示

Unknown type: datetime
Unknown type: decimal

Rails 的 rswag 文档没有给出如何指定类型的列表 - 有什么想法吗?

标签: ruby-on-railsrubyrspecswaggerswagger-ui

解决方案


您正在寻找的是 swagger/openapi 的一部分。检查数据类型文档;数据类型数量有限。

你想要更接近这个的东西:

date: { type: :string, format: :datetime }
awarded: { type: :string, format: :decimal }

注意:十进制不是“真正的”格式,但格式是一个开放值,因此您可以使用您正在使用的工具支持的任何内容。您可以将format注释与pattern匹配项一起使用,以确保它是小数。


推荐阅读