The typical use of this is to provide two implementations of the repository API's:
one for local (in-server) use, and one for remote (= client) use, by only having to
implement twice those aspects which differ in each implementation.
The most important difference between the client and server API implementations
will be how they load and store entities (such as Document objects): the client API
implementation will do this by contacting the server, the server implementation will
do this by using its persistence mechanisms (such as an RDBMS).
Note that this API is not really meant for public consumption, and the correct
workings of its implementations (especially the server-side one) are crucial for
the correct operation of the repository.