Rails rswag -重写默认服务器以提供不同的基础URL



我正在使用的API有几个端点要通过VeryGoodSecurity进行PCI合规性路由。

似乎OpenAPI V3支持重写服务器,如本页所述

全局服务器数组可以在路径级别或操作级别被覆盖。如果某些端点使用的服务器或基本路径与API的其余部分不同,这将非常方便。常见的例子有:

如何用rswag实现这一点?

我试过这样做:

path('/v1/payment-methods/cards') do
post('Create a payment method from card details') do
tags('Payment Method')
consumes('application/json')
produces('application/json')
# ....
# Rest of the API will be on api.tryedge.com
servers([{
url: 'https://secure.tryedge.com',
description: 'Edge secure card portal'}])

希望在Swagger YML中实现类似的东西:

/v1/payment-methdos/cards:
post:
servers:
- url: https://secure.tryedge.com
description: Edge secure card portal

但是我得到一个错误。

undefined method `servers' for RSpec::ExampleGroups::ApiV1PaymentMethodsController::V1PaymentMethodsCards::Post:Class

非常感谢任何帮助。提前谢谢。

rswag没有定义一套完整的帮助程序(包括上面问题中遇到的servers)来覆盖整个OpenAPI v3模式。

然而,可以通过操纵测试用例元数据来达到相同的结果,正如@engineersmnky上面的注释所突出显示的那样。

path('/v1/payment_methods/cards') do
post('Link a card') do
tags('Payment Method')
consumes('application/json')
produces('application/json')
security([bearerAuth: []])
operationId('linkCard')
description('Links a card to an existing Edge customer.')
metadata[:operation][:servers] = [{ url: 'https://secure.tryedge.com', description: 'Edge secure card portal' }]

这是因为rswag通过更新测试用例的metadata来构建模式。

最新更新