I’m wrestling with a similar thing conceptually so I’m really interested in your implementation. Apologies if my answers lie somewhere above.
What I want: high level APIs that abstract away the particulars of any single vendors API in my language of choice.
What I’ve come up with: Using my limited/developing engineering toolset the best approach I have found is wrapping each vendor SDK in a web server that exposes their API via REST. So the vendor APIs still have different method signatures but at least there’s some uniform way I can call them from outside of that particular C#/C++ process. Note that I haven’t even made it to the part where I need to forward the streaming data back to the calling context. I just have mocks used for testing that simulate authenticating and instantiating. So we may yet complicate further by using a message bus to handle the actual delivery of data from vendor to the calling context because I’m not sure REST is gonna work there. Trying not to put the horse before the carriage...may end up going entirely message based if half of it is already on a message bus but I’m hoping to not need to do any of this so let’s table it.
Why this approach is bad: I haven’t even made it far enough to determine if it’s my own incompetence or me putting myself in a microservice hell, but this has been extremely difficult to dockerize and deploy. Too many containers being built too many different ways. Even while using gradle to abstract away the different build tool chains I’m still in a place where integration testing is tough.
Would really like to find some way to just magically embed the vendors SDK calls into my calling language of choices runtime, e.g. use JNI from java for example to call the C++ thus freeing me from this microservice debacle, but will that work? I don’t really know how these embedded calls work, but you can’t just call the C++ statically, obviously, right? Your vendor SDK process has some state—needs to know you’re authenticated, what you’re subscribed to, etc. Is there a way I can somehow do these embedded calls and have the vendor SDKs state preserved between calls within one container? Thus I don’t need to have a microservice deployment model that spans multiple languages.
Apologies if that’s unclear, feels very much like I’m attacking the problem incorrectly...
Also would be very interested in hearing more about this R | Protocol. Sounds like it solves the same problem.
EDIT: also, great thread, thanks
@IAS_LLC!