向下为REST API创建动态的Ruby OpenAPI/Swagger客户端



我使用bravado创建了一个python客户端,以供宠物store。

我需要做同样的事情,以使一个动态的红宝石客户端进入REST API。

  • 我在OS Integrations Swagger页面中看到了一系列工具列表,但其中大多数似乎是使用Swagger自动测试或创建Swagger/OpenAPI API,而不是创建消耗Swagger API的客户端。/p>

  • svelte,是上面列表中的"来自Swagger JSON Spec的动态Ruby API客户端"。它可能是一个很好的候选人,看起来与我已经使用的Bravado Python Lib相似,但是:

    • 看来请求参数验证仅针对基于URL的参数进行,因此它不会提供请求,并且对此处的Swagger 2.0规格的响应验证。
    • Svelte返回Faraday ::请求而不是模型实例。
  • Ruby Gem Openapi正式是红宝石包装纸,这是我们正在寻找的内容,但尚无任何文档cf。主要读数:"在Active Dev。文档来了"
  • excon(谢谢 @kevin-burnett指向它(并未为Swagger描述API的自动包装器,它是HTTP客户端,与Python的请求相对应,因此可以手动消耗API的LIB。li>

这是Python中的代码,它是我们在Ruby中寻找的功能:

获得简单的dict答案(不使用模型(:

from bravado.client import SwaggerClient
from bravado.fido_client import FidoClient
client = SwaggerClient.from_url(
    'http://petstore.swagger.io/v2/swagger.json',
    config={'use_models': False}
)
result = client.pet.getPetById(petId=42).result(timeout=4)

提供:

>>> result
{'category': {'id': 42, 'name': 'string'},
 'id': 42,
 'name': 'doggie',
 'photoUrls': ['string', 'string2'],
 'status': 'available',
 'tags': [{'id': 42, 'name': 'string'}]}

,甚至更好,默认情况下使用模型:

> from bravado.client import SwaggerClient
> client = SwaggerClient.from_url("http://petstore.swagger.io/v2/swagger.json")
> pet = client.pet.getPetById(petId=42).result()
> print(pet)
Pet(category=Category(id=42, name='string'), id=42,
    name='doggie', photoUrls=['string', 'string2'],
    status='available',
    tags=[Tag(id=42, name='string')])
>

您可以使用Ruby-Swagger将Swagger.json转换为API客户端

您可以查看此命令:

 rake swagger:generate_client:ruby

您也可以查看Swagger-Codegen

还有很多其他,但是Excon很甜。

将其包括在您的gemfile中:

gem 'excon'

然后,要执行get请求,例如:

require 'json'
require 'excon'
excon_result = Excon.get('http://petstore.swagger.io/v2/pet/findByStatus?status=pending')
response_body_as_string = excon_result.body
pets = JSON.parse(response_body_as_string)
pets.first['name'] # "hello kity with form updated" (sic)

Excon具有许多整洁的功能,例如expects选项,它允许您指定您期望的HTTP状态代码列表。如果响应不超出期望,它将自动提高。

最新更新