my advice for creating enterprise systems that contain several components need to work are as follows:
THREE THINGS
0) select one (or more) default application-level protocols for sending data between components (HTTP, CoAP, are the ones i see most often)
1) select one (or more) highly structured message formats that *all* components MUST use when sending data between components (HAL, Siren, Collection+JSON, HTML are the most common ones i see for this kind of work)
2) establish a shared vocabulary of terms (Domain-Driven Design style) that *all* components MUST use when sending data between components
INTEROPERABILITY
With these three elements in place you are assured that any component that is created in the future will have a high-degree of INTEROPERABILITY (not tight integration) with each other. This works no matter what internal data models or object models are implemented inside each component. As long as they all "speak" (for example) using the "Accounting" vocabulary formatted into "Collection+JSON" messages sent over "HTTP" all the components will be able to interact with each other.
VOCABULARIES ARE HARD
Note the first two items in my list (protocol and format) are easy to do since the heavy work is already done for you. the last one (vocabulary) is difficult. you'll need to grow your vocabulary from existing (usually implied) domain knowledge over time. if you have a strong governance model (e.g. one committee that controls vocabulary) then you have a chance -- but only if they act to mange the vocabulary in a speedy and safe manner.
I've used this method (w/ variations) several times over many years. At one company, we kept it up for over seven and, even though we grew the vocabulary and updated components many times, parts of the system built in the first year still worked just fine in year seven.
Cheers.