When considering an integration it is important to be clear about which part is the customer and which is the provider. This is probably fairly obvious in a B2B relationship but may require some thought for internal scenarios. My default position is that the consumer, or customer, should drive the conversations. Consider this high-level scenario:
Fairly typically, A is asking B for some information or to enact a transition. As this may take some time an asynchronous response is required (what is in the response is not important here, it could be some data, the result of a transaction or an error condition). Now it may be tempting to have A initiate the conversation with B when making the request (1) but have B initiate the conversation when providing the response (2). Now this can work well, especially in internal situations but if A and B are in separate organisations, or if B needs to know how to respond to a variety of clients (As), then there is an overhead in that both parties need to build solutions to both act as the initiator and responder in a conversation. I firmly believe that it is simpler to have one party initiate all conversations and the other to only ever respond to requests. Look at the more detailed solution:
Here A initiates all conversations. This has advantages:
- A does not need to open firewall ports to receive responses from B
- A does not need to build an endpoint for B to respond to
- A gets to run things at its own pace
- A does not need to correlate responses from B if using the pattern shown above (it does need to maintain its own state)
- If A is temporarily down B is not impacted (simplifies SLAs)
- A might not need to authenticate B (depending on what is being returned)
Of course there are always exceptions but start with this pattern and then justify changing it based on specific requirements.
2 thoughts on “Integration: who’s driving ?”