- Authentication using Bearer Token generated by JWT
- Validate request JSON object with JSON Schema
- Cache Server Response and validate cache using ETag
- Support POST, PUT, PATCH, GET and DELETE Http Methods for the REST API
- Store JSON Objects in Redis key-value store for data persistence
- Index the JSON Objects in Elastic Server for Search capabilities
- Queueing indexing requests to Elastic Server using RabbitMQ
- Spring Boot (Java)
- Redis
- Elastic Search
- RabbitMQ
- Obtain a token by utilizing the /token endpoint.
- Subsequently, authenticate additional API requests using the acquired Bearer Token.
- Employ the POST HTTP method to construct a JSON Object.
- Verify incoming JSON Objects by applying the corresponding JSON Schema validation.
- Deconstruct complex JSON Objects and efficiently store them within the Redis key-value store.
- Place objects within the RabbitMQ queue to initiate the indexing process.
- Extract objects from the RabbitMQ queue, facilitating their indexing within ElasticServer.
- Implement search queries via the Kibana Console for the purpose of retrieving the indexed data.
- Elasticsearch - http://localhost:9200
- Kibana - http://localhost:5601
- RabbitMQ - http://localhost:15762
- Application - http://localhost:8080
- Start the services - Elasticsearch, Kibana, and RabbitMQ
- Run as Spring Boot Application in any IDE
Initiate the server to begin operations. Utilize the REST API endpoints to generate data and subsequently execute queries on the indexed data via the Kibana Console.
- GET
/token
- This generates an RSA-signed JWT token used to authenticate requests - POST
/validate
- This validates the token - POST
/plan
- Creates a new plan provided in the request body - PUT
/{objectType}/{objectId}
- Updates an existing plan provided by the objectId- A valid Etag for the object should also be provided in the
If-Match
HTTP Request Header
- A valid Etag for the object should also be provided in the
- PATCH
/{objectType}/{objectId}
- Patches an existing plan provided by the objectId- A valid Etag for the object should also be provided in the
If-Match
HTTP Request Header
- A valid Etag for the object should also be provided in the
- GET
/{objectType}/{objectId}
- Fetches an existing plan provided by the objectId- An Etag for the object can be provided in the
If-None-Match
HTTP Request Header - If the request is successful, a valid Etag for the object is returned in the
ETag
HTTP Response Header
- An Etag for the object can be provided in the
- DELETE
/{objectType}/{objectId}
- Deletes an existing plan provided by the objectId- A valid Etag for the object should also be provided in the
If-Match
HTTP Request Header
- A valid Etag for the object should also be provided in the