- Go (Gin-Gonic)
- Redis
- Elastic Search
- RabbitMQ
- Authentication using GCP OAuth2.0
- 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
- Generate OAuth token using authorization work flow
- Validate further API requests using the received ID token
- Create JSON Object using the
POST
HTTP method - Validate incoming JSON Object using the respective JSON Schema
- De-Structure hierarchial JSON Object while storing in Redis key-value store
- Enqueue object in RabbitMQ queue to index the object
- Dequeue from RabbitMQ queue and index data in ElasticServer
- Implement Search queries using Kibana Console to retrieve indexed data
- Clone the repository
- Run docker compose up -d (This will start Redis, ElasticSearch, RabbitMQ, Kibana)
- Run the Go application using
go run main.go
- Run the Listener to listen to RabbitMQ queue using
go run listener/main.go
- POST
/v1/plan
- Creates a new plan provided in the request body - PUT
/v1/plan/{id}
- Updates an existing plan provided by the id- 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
/v1/plan/{id}
- Patches an existing plan provided by the id- 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
/v1/plan/{id}
- Fetches an existing plan provided by the id- 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
/v1/plan/{id}
- Deletes an existing plan provided by the id- 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