Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Helper to create a dynamic Ruby OpenAPI/Swagger client to a REST API

I used Bravado to create a Python client to a REST API for the petstore.

I need to do the same to get a dynamic Ruby client to the REST API.

  • I saw a list of tools in the OS integrations Swagger page but most of them seems to be to automate tests using Swagger or to create a Swagger/openapi API, not to create Client that consume a Swagger API.

  • Svelte, is a "Dynamic Ruby API Client from Swagger JSON Spec" in the above list. It could be a good candidate, and looks similar to the Bravado Python lib I already use, but:

    • it seems that Request parameter validation is only done for URL-based parameters, so it will not provide requests, and the responses validation against the Swagger 2.0 Spec like here.
    • Svelte returns a Faraday::Request not a model instance.
  • Ruby gem OpenAPI is officially a Ruby wrapper, which is what we are looking for, but there is not yet any documentation Cf. the main README: "In Active dev. documentation is coming"
  • Excon (thank you @kevin-burnett to point at it) does not provide an automated wrapper to the API describe by Swagger, it's an HTTP client, corresponding to Python's Requests, so a lib to manually consume the API.

Here is code in Python that is the kind of feature we are looking for in Ruby:

To get simple dict answer (without using models):

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)

provide:

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

And even better, by default using the model:

> 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')])
>
like image 439
user3313834 Avatar asked Apr 29 '17 17:04

user3313834


People also ask

What is the difference between OpenAPI and swagger?

OpenAPI and Swagger used to refer to the same thing. While there are differences today (OpenAPI refers to RESTful API design and Swagger refers to a set of SmartBear tools), this blog will use the terms interchangeably. If you develop software today, chances are you are developing web APIs as well.

Is swagger a REST service client?

Swagger is a Web API specification document that helps developers design, build, document, and consume RESTfulweb services. Swagger tools support automated documentation, code generation, and test-case generation.


1 Answers

You can use ruby-swagger to convert swagger.json to API client

You can look at this command:

 rake swagger:generate_client:ruby

Also you can look at swagger-codegen

like image 188
slal Avatar answered Sep 18 '22 11:09

slal