Idocs and BAPIs are very different so it should be easy to choose between them depending on your requirements.
– System can work even if target system not always online. The Idoc will be created and sending will just continue once you get connected to the other system
– No additional programming required. You just need to set-up the configuration
– Receipt/processing on the target system may not be immediate.
– The sending system has no way to know whether the target system actually recieved what you sent. (Unless you use ALE)
– If there is no SAP standard Idoc available for your reqt, it’s harder to create a customized Idoc than a customized BAPI
– You can tell if your sending was successful or not
– Sending to / processing on the other side is immediate
– Easier to create your own BAPI than your own Idoc
– Will only work if you have an active online connection.
– Some programming required to call the BAPI.
Others interface methods you might also want to consider are ALE and RFCs.