Designing a good API is known to be a difficult task, which only becomes more challenging when it comes to creating an HTTP API. You need to take into account some additional constraints such as network efficiency and granularity.
Typically, if you want your JavaScript client to choose what data should be returned, as well as the granularity of the call, you need to have an architecture that allows you to expose your core API in a flexible and composable way. The problem becomes even more complicated if you also want to let developers contribute new services that should then be exposed as a first-class citizen through your API.
This presentation is a summary of the challenges we solved to provide an HTTP API on top of our open source platform.
In this talk, we will explain the design principles and techniques we have used to publish our core API as a REST API while maintaining extensibility and giving full power to the client over the granularity of the calls and the data.