REST API is the mean of choice to communicate between different loosely coupled applications. There are plenty of REST API implementations but I was looking for a solution as simple as possible with minimal external dependencies or prerequisites. Finally, I ended up with the compact library utilizing existing in Java JDK HttpServer.
Links
Intellij IDEA project, source code and javadoc.
Sample project utilizing the RestService project.
Another project having RestService dependency.
Highlights
- Very lightweight, no external dependency, just Java JDK.
- Can be dockerized, sample Dockerfile.
- Adds-on making a life of developer easier.
- Validating and extracting URL query parameters including type control.
- Upload data
- CORS relaxation
- Sending data with valid HTTP response code.
- "Dynamic" and "static" REST API call. "Dynamic" means that specification of particular REST API endpoint can be defined after the request reached the server but before handling the request thus allowing providing different custom logic according to the URL path.
Usage
The service class should extend RestHelper.RestServiceHelper abstract class and implements two methods:
- getParams : delivers REST API call specification (look below) including URL query parameter definition. The method is called after the REST API request accepted by HTTP Server but before validating and running the call.
- servicehandle: custom logic to serve the particular REST API endpoint. The method should conclude handling the request by proper "produceresponse" call. The "servicehandle" can take a URL query parameters and utilize several helper methods.
REST API specification
The REST API endpoint specification is defined through RestParams class. The specification consists of:- HTTP request method: GET, POST, PUT etc
- List of allowed URL query parameters. Three parameters type are supported: BOOLEAN, INT and STRING (meaning any other).
- CORS should be relaxed for this particular endpoint.
- Response type content (TEXT, JSON or not specified), Content-Type.
- List of methods allowed in the response header, Access-Control-Allow-Methods.
Main
The main class should extend RestStart abstract class.