What are the differences between a BAPI (Business Application Programming Interface), BAdI (Business Add-Ins), customer enhancement and customer modification?
A BAPI is an API, which is either designed by you or a simple function module offered by SAP. You can use this API for "business" operations.
BAdI's (Business Add-Ins) are the new form of user exits, designed in form of interface-architecture, where a custom class can implement an interface, and its interface implementation than can be activated to get called before, after or in between sap-standard-procedures. This allows customers to provide custom code and modify data. Usually one uses BAdI's of SAP in a Z-class to add / change some standard logic, which SAP would usually process.
Enhancement's are a possibility to either "contain" BAdI classes or to offer "plain text modification of SAP source codes.
Customer modification is tight bound to enhancements when it deals with coding. With data dictionary objects this simply means the ability of appending Z-structures, for example.