ruby Rails rswag -覆盖默认服务器以提供不同的基本URL

iswrvxsc  于 2023-01-12  发布在  Ruby
关注(0)|答案(1)|浏览(247)

我正在使用的API有几个端点要通过VeryGoodSecurity路由,以实现PCI遵从性。
OpenAPI V3似乎确实支持this page中提到的覆盖服务器
全局服务器数组可以在路径级别或操作级别上被覆盖。如果某些终结点使用的服务器或基路径与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

任何帮助都非常感谢。先谢了。

uxh89sit

uxh89sit1#

rswag没有定义一个完整的helper集(包括在上面的问题中遇到的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来构建模式。

相关问题