我使用Bravado为petstore的 REST API 创建了一个 Python 客户端。
我需要做同样的事情来获取 REST API 的动态 Ruby 客户端。
我在OS 集成 Swagger 页面中看到了工具列表,但其中大多数似乎是使用 Swagger 自动化测试或创建 Swagger/openapi API,而不是创建使用 Swagger API 的客户端。
Svelte是上面列表中的“来自 Swagger JSON Spec 的动态 Ruby API 客户端”。它可能是一个很好的候选者,并且看起来类似于我已经使用的Bravado Python 库,但是:
- 似乎请求参数验证仅针对基于 URL 的参数进行,因此它不会提供请求,并且针对 Swagger 2.0 规范的响应验证就像这里一样。
- Svelte 返回 Faraday::Request 而不是模型实例。
- Ruby gem OpenAPI是正式的 Ruby 包装器,这是我们正在寻找的,但目前还没有任何文档 Cf. 主要自述文件:“在活动开发中。文档即将推出”
- Excon(感谢@kevin-burnett 指出)没有为 Swagger 描述的 API 提供自动包装器,它是一个 HTTP 客户端,对应于 Python 的Requests,因此是一个手动使用 API 的库。
这是我们在 Ruby 中寻找的那种特性的 Python 代码:
要获得简单的 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')])
>