rhasspy/wyoming

Consider defining protocol in an IDL

skewballfox opened this issue · 1 comments

Hey cool project. Something that might be worth considering is defining the RPCs in an IDL. The primary advantage is the generation of client and server functions (in multiple languages), which also makes versioning easier in the event of breaking changes. The secondary advantage is implementers looking to use the protocol can easily see the functions messages and formats (and from that the capabilities), that they need to support if they want to make use of the protocol.

Here's the options I know of:

  • protocol buffers(.proto): primarily used with gRPC but it's encoding agnostic. Supports bidirectional streaming.
  • OpenAPI, more for restful services, not sure if it supports streams, which I think at least one of your functions needs
  • Smithy, less familiar with it, but it does seem to support streams.

There are code generator projects for each, and I think with at least one you could generate the exact same (request, response) pairs of json message you are currently using, to avoid changing current downstream clients.

completely missed the yaml files under wyoming/conf/http my bad.