gpt4 book ai didi

ruby-on-rails - Rails Rswag Swagger UI 未正确发送 header

转载 作者:行者123 更新时间:2023-12-05 04:59:17 29 4
gpt4 key购买 nike

我将 gem rswag 用于我的 Rails API 文档。我的 Rails API 要求所有请求都包含 headers['Content-Type']='my-fancy-content-type'headers['Accept']='my-fancy-accept 。到目前为止,我已经使用 POSTMAN 完成了测试,并且一切正常。我的 Rspec 测试也全部通过。

http://localhost:3002/api-docs/index.html 使用 swagger UI 时。我输入了正确的参数(在本例中只是 id)和正确的标题,如屏幕截图所示:

swagger UI

似乎没有发送任何 header 。控制台显示它正在执行 curl -X GET "http://localhost:3002/segments/122"-H "accept: */*" 没有任何 header 。

我将我的 spec/swagger_helper.rb 设置为:

require 'rails_helper'

RSpec.configure do |config|
config.swagger_root = Rails.root.join('swagger').to_s
config.swagger_docs = {
'v1/swagger.yml' => {
openapi: '3.0.1',
info: {
title: 'API V1',
version: 'v1'
},
paths: {},
servers: [
{
url: 'http://{defaultHost}',
variables: {
defaultHost: {
default: "localhost:#{ENV['PORT']}"
}
}
}
]
}
}

config.swagger_format = :yaml
end


我的 swagger.yaml 看起来像:

---
openapi: 3.0.1
info:
title: API V1
version: v1
paths:
"/segments/{id}":
get:
summary: Find segment by id
tags:
- Segments
parameters:
- name: Accept
in: header
required: true
schema:
type: string
- name: Content-Type
in: header
required: true
schema:
type: string
- name: id
in: path
required: true
schema:
type: integer
responses:
'200':
description: success
content: {}
'404':
description: not_found
content: {}
servers:
- url: http://{defaultHost}
variables:
defaultHost:
default: localhost:3002
securityDefinitions:
Content-Type:
type: string
description: Content-Type
name: Content-Type
in: header

用于生成 swagger 文档的测试片段是(它正常通过):

path '/segments/{id}' do
get 'Find segment by id' do
tags 'Segments'
parameter name: :Accept, in: :header, type: :string, required: true
parameter name: 'Content-Type', in: :header, type: :string, required: true
parameter name: :id, in: :path, type: :integer
context 'when record exists' do
response '200', :success do
schema type: :object,
properties: {
content: {
id: {type: :string},
type: {type: :string},
attributes: {
id: :integer,
...
}
}
}
run_test! do |response|
expect(response.status).to eq(200)

end
end

我尝试在 Rswag 中添加 c.swagger_headers = { 'Content-Type' => 'my-fancy-content-type', 'Accept' => 'my-fancy-accept' }::Api.config inside config/initializers/rswag_api.rb 但它不起作用(即不发送任何 header )。

预先感谢您的帮助!

最佳答案

在我的 spec/swagger_helper.rb 中,我不再使用 Open API,而是使用 Swagger 2.0。所以改变

config.swagger_docs = {
'v1/swagger.yml' => {
openapi: '3.0.1',

  config.swagger_docs = {
'v1/swagger.json' => {
swagger: '2.0',

现在可以了。

关于ruby-on-rails - Rails Rswag Swagger UI 未正确发送 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63568588/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com