- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的目标是使用 rspec_api_documentation 和 rswag-ui 或通过将 swagger-ui 直接添加到项目中来显示参数和响应的多个示例。我在用我的配置生成正确的 open_api.json 时遇到了一些问题,我想知道我做错了什么。
gem :
# spec/acceptance_helper.rb
require 'spec_helper'
require 'rspec_api_documentation'
require 'rspec_api_documentation/dsl'
RspecApiDocumentation.configure do |config|
config.app = Rails.application
config.api_name = 'My API'
config.api_explanation = 'API Description'
config.configurations_dir = Rails.root.join('public', 'docs', 'api', 'config')
config.docs_dir = Rails.root.join('public', 'docs', 'api', 'generated')
config.format = :open_api
API_VERSIONS.each do |version|
config.define_group(version) do |config|
config.docs_dir = Rails.root.join('public', 'docs', 'api', 'generated', version.to_s)
end
end
config.client_method = :client
config.io_docs_protocol = 'https'
config.request_headers_to_include = nil
config.request_body_formatter = :json
config.response_headers_to_include = []
config.response_body_formatter = Proc.new { |response_content_type, response_body|
response_body
}
end
swagger: '2.0'
info:
title: My Api
description: Blah.
termsOfService: 'http://open-api.io/terms/'
contact:
name: API Support
url: 'http://www.open-api.io/support'
email: support@domain.com
license:
name: Apache 2.0
url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
version: 1.0.0
host: 'localhost:3000'
schemes:
- http
- https
consumes:
- application/json
produces:
- application/json
require 'documentation_helper'
resource 'Sessions' do
header 'Accept', 'application/json'
header 'Content-Type', 'application/json'
explanation 'Endpoints to start and end API sessions for a user'
route '/api/v1/users/sign_in', 'Sign In' do
route_summary 'Starts a new session for a user'
route_description 'Given valid credentials, will create a new API session for a user'
post 'Signing in a user', document: :v1 do
let(:user) { FactoryBot.create(:user) }
parameter :login, 'The username or email of the user', scope: :user, required: true
parameter :password, 'The password for the user', scope: :user, required: true
example '401 - No user object', document: :v1 do
request = { login: user.email, password: user.password }
do_request(request)
expect(status).to eq(401)
expect(json.keys.size).to eq(1)
expect(json['error']).to eq(I18n.t('devise.failure.unauthenticated'))
end
example '401 - No login', document: :v1 do
request = { user: { password: user.password } }
do_request(request)
expect(status).to eq(401)
expect(json.keys.size).to eq(1)
expect(json['error']).to eq(I18n.t('devise.failure.unauthenticated'))
end
end
end
end
{
"swagger": "2.0",
"info": {
"title": "My Api",
"description": "Blah.",
"termsOfService": "http://open-api.io/terms/",
"contact": {
"name": "API Support",
"url": "http://www.open-api.io/support",
"email": "support@domain.com"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0.0"
},
"host": "localhost:3000",
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {
"/api/v1/users/sign_in": {
"post": {
"tags": [
"Sessions"
],
"summary": "Starts a new session for a user",
"description": "Given valid credentials, will create a new API session for a user",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "body",
"in": "body",
"description": "",
"required": false,
"schema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"login": {
"type": "string",
"description": "The username or email of the user"
},
"password": {
"type": "string",
"description": "The password for the user"
}
},
"required": [
"login",
"password"
]
}
}
}
}
],
"responses": {
"401": {
"description": "No login",
"schema": {
"type": "object",
"properties": {
}
},
"headers": {
},
"examples": {
"application/json": {
"error": "You need to sign in or sign up before continuing."
}
}
}
},
"deprecated": false,
"security": [
]
}
}
},
"tags": [
{
"name": "Sessions",
"description": "Endpoints to start and end API sessions for a user"
}
]
}
{
"swagger": "2.0",
"info": {
"title": "My Api",
"description": "Blah.",
"termsOfService": "http://open-api.io/terms/",
"contact": {
"name": "API Support",
"url": "http://www.open-api.io/support",
"email": "support@domain.com"
},
"license": {
"name": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0.html"
},
"version": "1.0.0"
},
"host": "localhost:3000",
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"paths": {
"/api/v1/users/sign_in": {
"post": {
"tags": [
"Sessions"
],
"summary": "Starts a new session for a user",
"description": "Given valid credentials, will create a new API session for a user",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "body",
"in": "body",
"description": "",
"required": false,
"schema": {
"type": "object",
"properties": {
"user": {
"type": "object",
"properties": {
"login": {
"type": "string",
"description": "The username or email of the user"
},
"password": {
"type": "string",
"description": "The password for the user"
}
},
"required": [
"login",
"password"
]
}
}
}
}
],
"responses": {
"401": {
"description": "Invalid params",
"schema": {
"type": "object",
"properties": {
}
},
"headers": {
},
"examples": {
"No password": {
"error": "You need to sign in or sign up before continuing."
},
"No login": {
"error": "You need to sign in or sign up before continuing."
}
}
}
},
"deprecated": false,
"security": [
]
}
}
},
"tags": [
{
"name": "Sessions",
"description": "Endpoints to start and end API sessions for a user"
}
]
}
最佳答案
对不起,我迟到了一年,但我自己也遇到了这个。我目前正在尝试通过使用 swagger-codegen 将 open_api 输出转换为 open_api v3 来将我们的文档连接到 postman 。
在查看 rspec_api_documentation 的代码后,它看起来像是使用哈希作为构建文档的类型,并且它使用的 key 依赖于 path
+ http_method
.因此,如果您尝试有多个使用相同 key 但具有不同有效负载的示例,那么由于此原因,它将采用第一个:https://github.com/zipmark/rspec_api_documentation/blob/d3892cc7388460a98476734963face5a7a2ac158/lib/rspec_api_documentation/open_api/node.rb#L65
我解决这个问题的方法是将一个虚拟查询参数传递给路径以创建一个唯一的键。例子:
post "/api/v2/foos?example=example1" do
example "example1" do
do_request(payload1)
end
end
post "/api/v2/foos?example=example2" do
example "example2" do
do_request(payload2)
end
end
这并不完全理想,因为我宁愿在同一请求下将示例组合在一起,但它至少为我提供了我想要的文档(减去虚拟参数)。
关于ruby-on-rails - rspec_api_documentation - 如何有多个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60471608/
谁能给我一个关于如何使用函数 crypt_r() 的例子吗? 在手册页中,不清楚返回的 char * 字符串是指向函数本身内部(在堆中)分配的内存块,还是仍然指向静态内存,如 crypt()? 最佳答
在 Spectre 中paper ,有一个利用越界数组访问的示例(第 1.2 节)。代码是 if (x < array1_size) y = array2[ array1[x] * 256 ];
这是 Grammar: difference between a top down and bottom up? 的后续问题 我从这个问题中了解到: 语法本身不是自上而下或自下而上的,而是解析器 有些
在java的构造函数中声明变量合法吗?示例。 Time(){ long timeMill = System.currentTimeMillis(); int secon
我一直在仔细研究 slick grid 的示例,并且想要 ping SO 社区并查询 Excel 电子表格编辑演示的示例?就存储而言,网格仅存储整数数据,并且网格将托管在 mvc3 razor 页面内
我很难将愚蠢的菜单置于我网站页面的中心。我知道我可以将外部 div 的宽度设置为 px 值,但我怎样才能让它以响应式网站为中心?这是页面: http://103.4.17.225/~america/i
我正在寻找可在 wordpress 上使用的主题。有时,页面会在调整大小的网络浏览器上正确加载,但在移动设备上却不能,即使尺寸相同,它也会加载某种错误(通常是错位)。例如,在此页面中 ( http:/
union { unsigned char raw[8]; struct { uint8_t gz_method; uint8_t flag;
我想使用 matchShapes() 函数在查询图像中查找对象。 假设我有一本书的模型图像,我想提取它的形状,然后尝试在另一幅图像中找到这本书(它的形状)。 我在谷歌上搜索了很多,但找不到任何关于如何
我正在寻找一个使用 inotify 的简单、简洁的示例gem 来检测目录的更改。 它缺少示例。 最佳答案 examples/watcher.rb 中有一个示例.该链接指向 aredridel 的 re
我一直在努力学习编程中的递归是什么,我需要有人来确认我是否已经完全理解它是什么。 我尝试考虑的方式是通过对象之间的碰撞检测。 假设我们有一个函数。当确定发生碰撞时调用该函数,并使用对象列表调用它以确定
我正在尝试学习如何在我正在处理的项目中使用 jBullet,我已经查看了源提供的演示,但我只是无法弄清楚这些演示如何显示对象。谁有好的资源可以指点我或提供一个在屏幕上显示一个或两个对象的基本示例? 在
我想在一个简单的 x,y 图表上绘制线条,以使用 JGraphT 在 JApplet 中显示。我找到的例子不是很有帮助。有人可以给我指出一些简单的 JGraphT 示例吗? 最佳答案 这里有一个例子,
在解决几何问题时,我遇到了一种称为滑动窗口算法的方法。 真的找不到任何关于它的学习 Material /细节。 算法是关于什么的? 最佳答案 我认为它更像是一种技术而不是一种算法。这是一种可用于各种算
我正在学习同步方法,以防止 Java 中的竞争条件和不良行为。我看到了以下示例,并被告知竞争条件非常微妙: public class Messages { private String messa
我有 100 万个 pdf,如何使用 hadoop 转换为文本并将其用于分析。目标是利用 hadoop 的强大功能将 pdf 数据提取为文本。 最佳答案 我已经在 Hadoop 上处理了一个 pdf
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我读到过,由于堆栈展开,从析构函数中抛出不是一个好主意。我不确定我是否完全理解。所以我尝试了下面的例子 struct foo { ~foo() { throw 1;
任何人都可以告诉我一个简单的(代码)示例来展示 response.encodeURL() 的用法吗?我所有的搜索(包括 google 和 stackoverflow)只提供了 encodeURL()
我受困于 haskell 类型。 {-# LANGUAGE OverloadedStrings #-} module Main ( main ) where import qualified
我是一名优秀的程序员,十分优秀!