Skip to content

[PROPOSAL] Use API specification to generate clients #19

@dblock

Description

@dblock

What kind of business use case are you trying to solve? What are your requirements?

There are 9 language clients for OpenSearch in this organization. Each client is significantly different from another in their implementation (e.g. different pagination support or transport layer), but implement the exact same API (e.g. creating an index). That API matrix is huge, including multiple versions of OpenSearch and plugins that bring their own API.

What is the problem? What is preventing you from meeting the requirements?

The maintenance of clients is a large burden. Every time a new API is added or changed, every client needs to be updated, along with tests.

What are you proposing? What do you suggest we do to solve the problem or improve the existing situation?

Automate the update process by auto-generating non-interesting parts of the client.

  • Generate RESTful APIs from spec OpenSearch#3090.
  • Generate non-interesting parts of each client based on the API specification with templates
  • Implement additional layers in the client such as pagination or Sigv4 signing
  • Add support for consuming multiple versions of the API spec in clients
  • Automate API updates via GHA, such as every time the specification changes, a PR is raised for each client

As an example, https://github.com/slack-ruby/slack-ruby-client is built this way. The API specification is scraped from Slack in https://github.com/slack-ruby/slack-api-ref and the client uses templates for about 75% of its code.

Which clients use a generator today?

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions