Web services became a necessity in today’s web development world. It helps add other dimensions to the power of websites for example: a new website can sell their articles for other developers as APIs, also they can use Joomla! API to build a mobile application for their news and articles to help them reach more audiences.
As Joomla! is one of the most famous CMSs in the world, with millions of websites that use it, It would be great that Joomla! have the capability to provide APIs for websites owners.
We are Mohamed Karam and Altay Adademir, we work together on adding web-services support to Joomla! as a part of its core. Here are some information about both of us.
I’m Mohamed Karam, a final year student at the department of computer and systems engineering at Ain Shams University, Egypt. I started writing code at high school using PHP. I also know C++ from college which I use in problem solving (no real competitions, just for fun) and I know python and Django as well. I have interest in machine learning with a bias towards natural language processing.
I participated with Joomla! last year with Google Summer of Code and this is my second year with Joomla.
I’m a third year software engineering student from the University of Southampton, UK. I have been into programming since early ages and have been interested in object-oriented web development since 2013. I am also experienced with Java, Java FX and Python. This is my first year with Joomla! and Google Summer of Code.
This project aims to provide a REST interface for Joomla! 4. As discussed by the mentors, it would be a standalone web application that integrates with the Joomla! CMS extensions. This application will be built using Joomla! Framework v2 as it is another powerful open-source framework which is also developed and managed by the Joomla! Project. In addition, the upcoming Joomla! 4 is also built with using Joomla! Framework v2.
We are thinking of the application as two parts, request and response handling. The request will be routed by the application router to reach the corresponding components and retrieve the data related to the user’s request. The response is when the component receives the request from the router, it will run its logic to respond to that request and then serialize the response to follow the REST specifications. We are planning to implement JSON API standard as response format. Further details can be found on jsonapi.org.
So, now let’s see what a final user can get from this project.
The users of this project are either API consumer, as frontend developer, mobile developer or at some point it could be a data analyst or Joomla! component developers who want their component to have REST interface. All these kinds of users must find their end of the project understandable and easy to use.
For component developers, this project provides them with routing and serialization. As routing is the entry point for the component’s REST APIs, for example, the api for ‘com_content’ is :
- /api for Articles
- List Articles (/api/v1/articles)
- Single Article (/api/articles/v1/999)
- Retrieve an Article (GET request)
- Create a Article (POST request)
- Update an Article (POST request)
- Delete an Article (DELETE request)
While serialization is turning the data into other a shape that is going to be delivered to the consuming client. The component developer will serialize the data using the serializer in our project. In this project, we will implement a simple serialization. Entity access level - Serialization from a model's getItem() and for further development full serialization will be implemented.
For API consumers, the impact of this project won’t be as strong as its impact on component developers, but the project is about the infrastructure of the web services of Joomla, so any API in a component would be as it’s designed in this project.