architecture
The ZimpleMoney online system is relatively mature, developed over ten years, and its capabilites have evolved over the years to meet many, many user requests and through ongoing feedback.
Developing an API to such a system in parallel with it might have involved duplicating a lot of complex and refined business rules. (For example, creating a new contract / loan is not merely a matter of adding a row to a table!) Not to mention authorization heirarchies, auditing, reporting, and all the other considerations for a system which manages money.
Consequently, as shown in the diagram above, the API uses the online system directly to perform all processing. Each request is executed by the same business logic as found in the online application.
In this diagram, web users are represented by the purple boxes at left, accessing the ZimpleMoney online system (purple arrow). The system has a database (green drum) and interfaces to the outside world - banks, credit cards, emails + SMS - as shown by the purple arrows extending up.
There is considerable complexity to the online system which is glossed over by representing it as a rectangle, but from an API perspective it is a "black box", securely and robustly executing the business logic of the system.
The API is a separate system, but running on the same servers. There are two ways to use it: view the documentation from a web browser (brown line - you might be doing that right now :), or execute API functions from third party software (red line).
The API interfaces to the online system through its web interface (pink line). The API implements an Open API interface, driven off a definition file (which also drives the documentation). A package called apiengine "glues" the API to the online system, also driven off a configuration file.
