Hi
If the Data Sync is one way, pushing from Plugin calling external API is better for the following reason
01. The update is almost real-time
02. There wont be any batch process so no single point of failure
03. Based on my experience with scheduled tasks, on-demand is always better if its possible.
One negative side to directly calling the API from plugin is that it may hold-up the UI if its Sync plugin and that will affect the user experience and performance.
I had similar experience and here is what I did to solve the problem
01. I created an entity in CRM to queue all the updates - In your case, you could call this intermediate entity as -> ESB Queue or something along the line
02. I then created a workflow that triggers on Create on this queue entity.
03. In the Workflow I used a Custom Workflow Activity (CWA) I created to communicate to external API.
Your plugin will just created a queue record in the custom queue entity mentioned above and the workflow will trigger asynchronously and push that via API
Can an external API service be called from a CRM Plugin? Yes you can call from Plugin or CWA
Are there any requirements for the API service, in order for it to be called successfully? REST API is preferred over WCF or ASMX. As long as you create your API to be RESTful, no special requirement to call this from Plugin or CWA. One thing to note, you cant use any third party libraries in the plugin or CWA as the ILMerge is not supported by CRM Online anymore.
Can a CRM Plugin connect to an MS SQL DB Server and write date in some tables directly? No CRM Online cannot connect to MS SQL Database directly. You could have the DB connection in your API and let CRM call your API to perform any operation or Create an Azure function that can talk to DB and call the function from Plugin.
About API Limit : If you call CRM API over 4000 times within 5 minutes, you may get error, please refer to the following
https://community.dynamics.com/crm/f/117/t/316019
https://community.dynamics.com/crm/f/117/t/317862?pi61802=1#responses