Over the last 1.5 years we at OnTime have been making a serious investment into rewriting our backend for the OnTime Group Calendar product. The most fundamental change has been the change from a traditional Notes/Domino application (if it ever was a such) to be a server/API first approach. This means that there’s now a layer of separation between the business logic on the server and the business login in the clients namely the API. The API is now king!! It means that most, if not all, knowledge about the server operation and data storage has been removed from the clients and server and clients may evolve indepently of one another.
Another key benefit of an “API first” approach is that new exciting UI’s and uses of the OnTime data has started to pop up as it’s now easy to get going. As an application developer you do not have to worry about the OnTime backend or even worry about Domino. As long as you have HTTP access and may use JSON you’re all set.
As an example of where you’ve seen the power of the API approach – maybe without thinking about it – is in Mail and Calendar in Notes 8+. Think about how adding Java views to the “mail and calendar experience” in Notes 8+ has allowed the “mail and calendar experience” to leapfrog the rest of the client. This is because there’s a layer of separation between the data and the views and it allows them to evolve separately and at different paces.
Redesigning OnTime to an “API first approach” hasn’t been a smooth ride all along and sure there has been things we’ve changed along and way and the API backend has been rewritten more than once. The key is however that the interface to the API has only changed once which really wasn’t so much a change as a move to a new, additional, data format for the response messages. This has been key as it allowed the clients to stay constant while the API changed.
The server side API has been written in Java all along which has been a very good choice for us. The request and response messages started out being in plain text in our own proprietary format which worked out well in the beginning but it has become clear that the end user (programmer) still needed a fair amount of knowledge about OnTime to use the API. Over the last 7-9 months we’ve made a transition from first plain text in/plain text out, over plain text in/JSON out to a place where we’re now completely JSON in/JSON out. Taking it slow has been important as not to break any clients meaning our own clients or any customer API programs there might be out there now since we opened up the API for purchase.
One thing we’ve learned however is that API versions in the “real world” needs to coexist and we really couldn’t rip and replace. We’ve now move to a model where the user of the API sends an expected API version number along with the requests to signal what API version he/she expects to be returned and the API will honor that. This means that we’ve managed to move along while still maintaining backwards compatibility. Furthermore we are quite safe that we will be able to futher evolve the API while shielding customers and clients.
The real beauty about the API is the Domino application server though.
We have implemented and evolved on the API from day one using nothing more than a standard Domino server – running the HTTP task if HTTP access to the API is required – using standard Java agents. No fancy OSGi plugins here (yet!) – everything is plain ol’ Domino. Keeping everything on Domino has also allowed us to easily leverage the API in an integration problem we’re doing at a Danish customer at the moment (more on that in a later post). How? Using the web services framework available in Domino of course. Nothing fancy there. Just add a web services endpoint to respond to a SOA server and we were golden – it too scales extremely well.
Builing on Domino hasn’t limited us in any way yet – quite contrary. It has allowed us to add additional application endpoints using the easy of development approach of Domino and it has allowed us to scale well beyond thousands of users (think 15.000+ users) without problems. All this and still allowing us to seamlessly service clients from Domino 7 and upwards. So sweet.
Below is the API stack we’re using as you can see Domino feature prominently at the bottom of the stack.
(click image for a larger version)
So start building you own API’s for your Domino apps. It will be very much needed to get the full potential from Notes 8.5.4 Social Edition and the embedded experiences support in there. It’s all nothing if there is no API to read from. If only there were a Domino oAuth provider… Oh well – I’m sure it will all be there in good time.
I can only agree with you. Domino IS the one of the BEST API application server platform. We’re doing it the same way…except we’ve left ol’ Notes programming nearly completely behind and are on the pure OSGi base.
LikeLike
The web API is a good idea. If frontend and backend code is completely separated, partners can even build their own UI on top of the server platform.
Keeping the API stateless makes it very easy to test as well.
But what about the response time of the Java agent based API compared to a servlet/XPage based solution?
I would expect it to be slower, because the JVM needs to be started or at least re-initialized on each agent call and reload the application code.
A servlet can cache data in between calls and app code stays in memory. Did you did some performance testing on this?
LikeLike
No measurements for that although I’ve thought about it. We really need to run on Domino v7+ why XPages really isn’t an option for us though a dual approach could be doable. Servlets in Domino prior to v 8.5 (pre OSGi) really isn’t an option.
LikeLike
Are you using a particular JSON liibrary e.g. Jackson, gson?
We’ve settled on Jackson but am interested to know what you went with.
Cheers,
Lee
LikeLike
One of the developers here (a really clever guy) wrote the one we’re using – really, really, really fast and actually outperforms the others I tested. So no library here… 🙂
LikeLike
Ah I see, sounds interesting. Keep us updated if you decide to open source it.
Cheers,
Lee
LikeLike