我使用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状态代码列表。如果响应不超出期望,它将自动提高。