【ruby on rails】rswag使用

这篇具有很好参考价值的文章主要介绍了【ruby on rails】rswag使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

命令

  • 生成文档
rake rswag

一些代码

# frozen_string_literal: true

require 'rails_helper'

RSpec.configure do |config|

  config.swagger_root = Rails.root.join('swagger').to_s

  # the root example_group in your specs, e.g. describe '...', swagger_doc: 'v2/swagger.json'
  config.swagger_docs = {
  	#  'v1/swagger.yaml' => {
    'v1/swagger.json' => {   
      openapi: '3.0.1',
      info: {
        title: 'API V1',
        version: 'v1'
      },
      paths: {},
   	  servers: [
        {
          url: 'http://{defaultHost}',
          description: '本地开发',
          variables: {
            defaultHost: {
              default: '127.0.0.1:3000'
            }
          }
        },
        {
          url: 'https://{defaultHost}',
          description: '测试服',
          variables: {
            defaultHost: {
              default: 'api.xxx.com' # 默认https
            }
          }
        }
      ],
      components: {
        securitySchemes: {
          # Bearer: {
          #   description: 'token necessary to use API calls',
          #   type: :apiKey,
          #   name: 'X-Admin-Authorization',
          #   in: :header
          # }
          bearer_auth: {
            type: :http,
            scheme: :bearer,
            bearerFormat: 'JWT'
          }
        },

        schemas: {
          marks: {
            type: :array,
            items: {
              type: :object,
              properties: {
                date: { type: :string },
                score: { type: :number },
                worksheet: { type: :string }
              }
            }
          },
          importances: {
            type: :array,
            items: {
              type: :object,
              properties: {
                school_id: { type: :integer },
                importance: { type: :integer }
              }
            }
          },
          improvement_priorities: {
            type: :array,
            items: {
              type: :object,
              properties: {
                priority: { type: :integer },
                school_id: { type: :integer }
              }
            }
          },
          subtopics: {
            type: :array,
            items: {
              type: :object,
              properties: {
                id: { type: :integer },
                name: { type: :string },
                marks: { '$ref' => '#/components/schemas/marks' },
                topic_id: { type: :integer },
                difficulty: { type: :integer },
                consistency: { type: :number },
                importances: { '$ref' => '#/components/schemas/importances' },
                proficiency: { type: :number },
                improvement_priorities: { '$ref' => '#/components/schemas/improvement_priorities' }
              }
            }
          },
          topics: {
            type: :array,
            items: {
              type: :object,
              properties: {
                id: { type: :integer },
                name: { type: :string },
                strand_id: { type: :integer },
                subtopics: { '$ref' => '#/components/schemas/subtopics' },
                difficulty: { type: :integer },
                consistency: { type: :number },
                importances: { '$ref' => '#/components/schemas/importances' },
                proficiency: { type: :number },
                improvement_priorities: { '$ref' => '#/components/schemas/improvement_priorities' }
              }
            }
          },
          strands: {
            type: :array,
            items: {
              type: :object,
              properties: {
                id: { type: :integer },
                name: { type: :string },
                topics: { '$ref' => '#/components/schemas/topics' }
              }
            }
          },
          latest_assessment: {
            type: :object,
            properties: {
              name: { type: :string },
              marks: { type: :integer },
              date_done: { type: :string },
              total_marks: { type: :integer }
            }
          },
          subjects: {
            type: :array,
            items: {
              type: :object,
              properties: {
                id: { type: :integer },
                name: { type: :string },
                target: { type: :integer },
                strands: { '$ref' => '#/components/schemas/strands' },
                latest_assessment: { '$ref' => '#/components/schemas/latest_assessment' },
                overall_proficiency: { type: :integer }
              }
            }
          },
          levels: {
            type: :array,
            items: {
              type: :object,
              properties: {
                id: { type: :integer },
                name: { type: :string },
                level: { type: :integer },
                subjects: { '$ref' => '#/components/schemas/subjects' }
              }
            }
          },
          student: {
            type: :object,
            properties: {
              id: { type: :integer },
              student_id: { type: :string },
              first_name: { type: :string },
              last_name: { type: :string },
              registration_date: { type: :string },
              school_id: { type: :integer },
              photo: {
                type: :object,
                properties: {
                  url: { type: :string }
                }
              },
              overview_data: {
                type: :object,
                properties: {
                  levels: { '$ref' => '#/components/schemas/levels' }
                }
              }
            }
          },
          detailed_subtopic: {
            type: :object,
            properties: {
              code: { type: :integer, default: 200 },
              message: { type: :string, default: 'ok' },
              data: { '$ref' => '#/components/schemas/partial_subtopic' },
            }
          },
          detailed_topic: {
            type: :object,
            properties: {
              code: { type: :integer, default: 200 },
              message: { type: :string, default: 'ok' },
              data: {
                type: :array,
                items: {
                  type: :object,
                  properties: {
                    date: { type: :string },
                    proficiency: { type: :number },
                    contributions: { '$ref' => '#/components/schemas/partial_subtopic' },
                    subtopic_id: { type: :integer },
                    subtopic_name: { type: :string }
                  }
                }
              }
            }
          },
          partial_subtopic: {
            type: :array,
            items: {
              type: :object,
              properties: {
                date: { type: :string },
                proficiency: { type: :number },
                contributions: {
                  type: :array,
                  items: {
                    type: :object,
                    properties: {
                      score: { type: :number },
                      worksheet: { type: :string },
                      date: { type: :string }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }

  # Defaults to json. Accepts ':json' and ':yaml'.
  config.swagger_format = :json
end

 path '/api/v1/students/{id}' do
    # You'll want to customize the parameter types...
   parameter name: :'X-Admin-Authorization', in: :header, type: :string, required: false, default: 'sdfsd'
   parameter name: :page, in: :query, type: :integer, required: false
   parameter name: 'id', in: :path, type: :integer, description: 'id'
   
   get('show student') do
      tags 'students'
      security [ bearer_auth: []]  # security [ Bearer: []]
      produces 'application/json'
      
 	  response '401', 'need login to create' do
        let(:id) { 100 }
        run_test!
      end
      
      response(200, 'successful') do
        schema type: :object,
               properties: {
                code: { type: :integer, default: 200 },
                message: { type: :string, default: 'ok' },
                data: { '$ref' => '#/components/schemas/student' }
               }
        # let(:id) { '123' }
        # run_test!  # 运行测试
        xit  # 跳过测试用例
      end
    end
  end
end
  path '/api/v1/pets' do

    post 'Creates a pet' do
      tags 'Pets'
      consumes 'application/json', 'application/xml'
      parameter name: :pet, in: :body, schema: {
        type: :object,
        properties: {
          name: { type: :string },
          photo_url: { type: :string },
          status: { type: :string }
        },
        required: [ 'name', 'status' ]
      }

      response '201', 'pet created' do
        let(:pet) { { name: 'Dodo', status: 'available' } }
        run_test!
      end

      response '422', 'invalid request' do
        let(:pet) { { name: 'foo' } }
        run_test!
      end
    end
  end

文章来源地址https://www.toymoban.com/news/detail-600596.html

到了这里,关于【ruby on rails】rswag使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 框架分析(6)-Ruby on Rails

    link 主要对目前市面上常见的框架进行分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步。 Ruby on Rails(简称Rails)是一种使用Ruby编程语言开发的开源Web应用程序框架。它遵循MVC(Model-View-Controller)架构模式,旨在提供简

    2024年02月10日
    浏览(38)
  • 【ruby on rails】M1遇到的一些安装问题

    1. homebrew位置变了 原来的 Cellar Homebrew Caskroom 都是在 /usr/local/ 下面 M1在 /opt/homebrew 下面 2. 装ruby M1电脑安装ruby,装不上的问题 3. 装puma报错 3. 装nokogiri报错 4. 安装gem报错就用arch -arch x86_64 gem install试试 5. rails c 报错 ruby版本2.7.1的 enum 的bug 解决方案: 把ruby版本升级到2.7.5

    2024年02月15日
    浏览(43)
  • ubuntu 18.04 LTS安装ruby on rails

    由于令人‘烦恼’的网络问题,不用代理来正确安装rails已不可能。我自己配置了一个VirtualBox的ubuntu 18.04 LTS的虚拟机,在其中设置了rails的开发环境,你可以直接在virtualbox中导入它,然后即可拥有rails环境。在百度网盘中下载它,提取码:4zp4。用户名:myubuntu, 密码:123456

    2024年01月20日
    浏览(41)
  • 【漏洞复现】Ruby on Rails 路径穿越与任意文件读取漏洞(CVE-2019-5418)

    1. 漏洞简介 Ruby on Rails使用了指定参数的render file来渲染应用之外的视图,且会根据用户传入的Accept头来确定文件具体位置。我们可以通过修改访问某控制器的请求包,通过…/…/…/…/来达到路径穿越的目的,然后再通过{{来闭合模板查询路径,那我们访问的文件会被当做外部

    2024年02月04日
    浏览(57)
  • [ruby on rails] postgresql分词搜索 pg_jieba 和 zhparser 方案

    安装 测试 在测试时,可以感觉到 jieba 的第一次分词有明显的延迟和卡顿,可以通过 Postgresq 预加载 jieba 的动态库和配置文件改善(/usr/local/var/postgres/postgresql.conf)。 mac 安装 scws intel 安装在/usr/local 下 M1安装在/opt/homebrew 下,M1需要把相关文件拷贝给/usr/local 下载词典文件 测试效

    2024年02月16日
    浏览(49)
  • RubyMine for Mac/win:提升Ruby和Rails开发的强大IDE

    随着Ruby和Rails在Web开发领域的广泛应用,一款高效的开发工具对于提高生产力至关重要。JetBrains RubyMine正是这样一款值得信赖的集成开发环境(IDE)。作为Mac和Windows平台上的强大工具,RubyMine为开发者提供了卓越的代码编辑、实时分析和调试功能。 RubyMine的智能代码编辑器可

    2024年01月18日
    浏览(43)
  • Ruby使用类组织对象

    使用Object.new创建新对象,但是一次只使用一种方法,这是感受以对象为中心的Ruby编程的最佳方式之一。不过这种方式并不能很好地扩展,假如有一个正在运行地在线售票网站,然后其数据库必须处理数以百计地售票记录,那么可以在Ruby程序中寻找另外地一种方式去创建和操

    2024年02月07日
    浏览(34)
  • ruby send call 的简单使用

    refer: ruby on rails - What does .call do? - Stack Overflow Ruby使用call 可以调用方法或者proc send方法也可以调用方法,在本地写一个测试: 运行:ruby hi.rb 得到输出:

    2024年02月13日
    浏览(39)
  • 如何使用Ruby 多线程爬取数据

    现在比较主流的爬虫应该是用python,之前也写了很多关于python的文章。今天在这里我们主要说说ruby。我觉得ruby也是ok的,我试试看写了一个爬虫的小程序,并作出相应的解析。 Ruby中实现网页抓取,一般用的是mechanize,使用非常简单。 首先安装sudo gem install mechanize 然后抓取网

    2024年02月05日
    浏览(35)
  • 在windows下安装ruby使用gem

    ruby下载地址 选择合适的版本进行下载和安装: 在安装的时候,请勾选 Add Ruby executables to your PATH 这个选项,添加环境变量: 安装Ruby成功后,还可以安装一下msys2: 以用 gem 安装 wpscan 为例,直接在命令行中输入 搜索wpscan包: 安装: 国外的源访问太慢,我们换国内的源 查看

    2024年02月14日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包