Hello, I'm trying to wrap my head around the implementation for a platform for developing self describing "services" or as we might call them "drivers".
The basic lifecycle of a "driver" is essentially:
1.
Driver describes Service registration requirements: Announce what registration info (keys, permissions, web-hook URLs, etc) it needs to register
2.
User adds Service: Register an instance of Service X by providing "registration info" that were asked for by the driver
3.
Driver describes Service interfaces: Use "registration info" to imperatively declare its interfaces (I have these functions, that take these types, that provide these representations, etc)
4.
User can begin using this
Service from their own code.
This cycle exists to enable something like registering an Airtable database through a driver. We aim to allow for generative interface based on the Airtable's columns. You could just as easily replace "Airtable" as an example with an "SQL DB driver" even.
The main problem I'm wrestling with is mostly in how I would design the Driver SDK for step "3. *Driver describes Service interfaces*". In some respects, I want to allow the SDK developer (myself and my team members for now) to have a lot of flexibility with how they end up describing the Service interfaces & provide that service interface's implementation. But, when it comes to considering how deployment, versioning, and development and debugging for SDK dev I feel quite naive.
Does anyone have reference material or admirable examples of this kind of problem? Even things adjacent could be very inspiring.
cc
@Garth Goldwater @crabl @taowen
P.S. This seems tangential to: reflective type systems / declarative type providers (like building
FSharp Type providers); VS Code Language Server protocol; game dev modding; and maybe
#C01CD90V1NF.