BAPI is a library of function modules released by SAP to the PUBLIC so that they can interface with SAP.
There is a Business Object Associated with a BAPI. So a BAPI has an Interface, Key Field, Attributes, Methods, and Events.
Outside world (JAVA, VB, .Net or any Non SAP system) can connect to SAP using a BAPI.
ERROR or Success messages are returned in a RETURN table.
RFC:
RFC is nothing but a remote enabled function module. So if there is a Function Module in SAP system 1 on server X , it can be called from a SAP system 2 residing on server Y.