MongooseIM 2.0.0beta2: the power of an XMPP platform, with the simplicity of a REST API
2016-10-11 by Nicolas Verite, Michał Piotrowski
We are thrilled to announce the MongooseIM platform version 2.0.0beta2. MongooseIM platform 2.0.0beta2 is about one massive change: a REST API, both for backend integration, and for client/server development. This is a major step towards the game-changing version 2.0.0, which will be released in the coming weeks. MongooseIM 2.0.0 will tremendously lower the barrier of entry to our platform for most developers worldwide.
REST API for backend integration
Following popular and obvious demand, MongooseIM now implements a new REST API, for backend integration.
Integration problem for backend developers and DevOps
The MongooseIM platform is mostly used in very large and complex infrastructures, in various types of data centers (cloud, bare metal, or hybrid). In that context, there is always a high need for tight integration and coupling between the MongooseIM platform, and the full ecosystem in the data center.
For most backend developers, as well as for DevOps, this is very difficult as such an integration requires understanding the powerful hooks system in the core of MongooseIM server or the command line interface, and how they relate to the purpose of the infrastructure.
It was thus very difficult to develop interconnected pieces of architectures.
The obvious solution: a REST API
Since most techies use modern REST APIs these days, this was the obvious and natural choice, and our customers and prospects confirmed and supported this thinking.
The MongooseIM platform now offers a very simple backend REST API:
- management: users and sessions
- send one-to-one messages
- send group chat messages (both MUC and MUC light)
- retrieve users’ message history
The documentation is simply the de facto standard: Swagger. With Swagger, it is even more handy, as many code generators can help build code from scratch, with little human customisation. This doc is supporting the Open API Specification. Check out the backend REST API of MongooseIM.
Ease of development and maintenance, plus consistency in infrastructure
As a result, it is now much easier for backend developers to write code against MongooseIM, and maintain it. Also it is much easier for DevOps to interconnect MongooseIM with other servers. Overall, CTOs will be thrilled to have a more consistent set of backends that all discuss over REST APIs, for a seamless infrastructure maintenance experience.
The list of methods made available today is quite narrow, and it is on purpose: we will extend the MongooseIM REST API methods to answer your needs.
REST API for the clients developers
This part may sound less understandable, maybe a bit “revolutionary” and unorthodox for an XMPP platform. To be honest, we thought a lot about it, and hesitated for a long time. But our customers and prospects have sent the signal loud and clear.
Putting it simply: we are not breaking out of XMPP! We are offering the power of an XMPP platform to REST API developers worldwide!
Let us walk you through this thinking.
The problem with XMPP and XML
The MongooseIM platform is based on the XMPP protocol and philosophy. And XMPP is awesome. It is an open standards protocol, backed by both the XSF and the IETF, offering high flexibility and outstanding extensibility. It is always surprising in many ways, as mature features often reveal themselves as highly efficient in modern and contemporary contexts.
XMPP has evolved a lot over the years, to the point that it can look complex and too massive for a lot of developers. As a result, it might seem discouraging to learn so much for most developers.
Additionally, XMPP relies on XML, which is not very trendy, to say the least. The crowds massively prefer JSON these days. We won’t argue here.
As a result, a large audience of developers do not like XMPP nor XML anymore. The consequence for business owners and recruiters is that it has become difficult and painful to find good (and available) XMPP developers. It would be a missed opportunity, as the MongooseIM platform is highly performant and flexible.
The REST API solution for client/server developers
The MongooseIM platform now implements a very simple REST API for client-side developers, with JSON format.
The current implementation covers a minimal set of use cases:
- send one-to-one messages
- retrieve message history
In other words, we have created a REST API interface to the MongooseIM platform, by removing all the complexities of XMPP, and by switching from XML to JSON. We have kept only the bare minimal: all you need to quickstart a highly efficient application, with a flexible and powerful backend that will scale to millions.
Lowering the barrier of entry to MongooseIM
This client/server REST API with JSON format allows most client-side developers to access the power and massive scalability of MongooseIM, yet maintaining a very simple and efficient codebase on the client.
It is now possible to build massively scalable chat system with the MongooseIM platform, yet keeping a very fast time-to-market, with minimal initial developers investment, virtually no learning curve, and lowering the risk of developer turnover.
It is especially true for applications builders who want to add chat (instant messaging features) in their multi-screen apps, for higher and sustainable acquisition, retention, and engagement.
Please send your needs and pain points, in order to grow further the feature set. That way it will be easier for your apps to sustain your growth.
We are even planning a custom hosting solution, and a standard SaaS. Please contact us for more information.
MongooseIM = XMPP + REST API
A simple REST API with JSON format might sound antagonist to XMPP. Our client-side REST API is an addition to XMPP in MongooseIM. Messaging features will all remain available using the XMPP protocol, and more and more will be available through our REST API.
In other words, we keep the powerful XMPP protocol, we just add a simple client/server REST API for more developers and simpler coding.
A lot of developers, devops, sysadmins, and CTOs just have difficulties understanding how things work at a high level. As MongooseIM has quite a different architecture than the more classical web applications, there was indeed some explanations due here on the high-level architecture.
We added explanations and schemas for some key concepts, such a transient vs persistent data, nodes joining or leaving a cluster, RDBMS vs NOSQL data storage.
We also created a few new documentation pages to explain the basics on some of the clustering considerations, and also detailed to global architectures, like multi-datacenter setups for very large deployments.
Our contributions to the ecosystem (outside the scope of the MongooseIM server) were not clear, they are documented now. We contribute to both open standards, and open source software, whether we maintain it, or it is maintained by friends. For example, we contribute to XMPPFramework for iOS, and Smack for Android. We now offer a consistent set of features over MongooseIM server, Smack, and XMPPFramework: a given feature we support is available and tested on the three.
Please read our draft roadmap, offering enhanced visibility over where the MongooseIM platform is going next. Feel free to comment on it, and influence the journey!
Many thanks to our contributors on the MongooseIM server
During this development cycle, we received some code contributions to server. Special thanks to our contributors: @bernardd, @igors, @arkdro
Our contributions to the ecosystem
We have again contributed to XMPPFramework for iOS, Smack for Android, and Movim.
Many thanks to Florian Schmaus (Smack @Flowdalic), Chris Ballinger (XMPPFramework @chrisballinger), and Timothée Jaussoin (Movim @edhelas) for the strong support in our contributions with their kindness, availability, openness, and guidance.
Call for tests and comments: REST API, PubSub, MUC light
This 2.0.0beta2 will be our last beta before 2.0.0, so this is a call for tests, all comments welcome. We encourage everyone to play with the REST API on both backend and clients, but also MongooseIM 2.0.0beta1’s PubSub and MUC light.
With all your feedback, we will release the full, final 2.0.0 in the coming weeks, roughly with the same featureset, with the obvious additional bugfixes and polishing.
This is the last beta before the 2.0.0 version that will be available in the coming weeks. Please feel free to download MongooseIM 2.0.0beta2 and test it extensively. Some rough edges have already been fixed, and we encourage to report any further inconvenience.
We will not add any big new feature before our 2.1.x series, as after the 2.0.0 release we will enter maintenance mode, with bug fixing and optimisations, with probable 2.0.1 and 2.0.2 versions.
Get the fresh news!
Meanwhile, get our fresh news: subscribe our announcement mailing list.Go back to the blog