![image](https://private-user-images.githubusercontent.com/75880261/270104526-ba4e4282-1faa-404d-804a-cdca5ada0fbd.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1MzEyNzUsIm5iZiI6MTcyMTUzMDk3NSwicGF0aCI6Ii83NTg4MDI2MS8yNzAxMDQ1MjYtYmE0ZTQyODItMWZhYS00MDRkLTgwNGEtY2RjYTVhZGEwZmJkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIxVDAzMDI1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWVlMGQ4ZTE4NTA3OTQ0Y2EwYzgwMmNmNjU3MDVlZTliZTcxOWMyZjYzNmE1MTI3YzgzNDJjZWMxYzk4MGQ1NTQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.QYtPGS-LmsewHhqFBD7WJvnM9zPjhyA8LaQ4YiMEOBw)
A Lightweight API Gateway built in Golang to learn more about API infrastructure and microservices
![image](https://private-user-images.githubusercontent.com/75880261/268230793-d8f3da11-2636-4b74-b59a-110c2e648642.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1MzEyNzUsIm5iZiI6MTcyMTUzMDk3NSwicGF0aCI6Ii83NTg4MDI2MS8yNjgyMzA3OTMtZDhmM2RhMTEtMjYzNi00Yjc0LWI1OWEtMTEwYzJlNjQ4NjQyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIxVDAzMDI1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThlMDg4MGRiOTJmODhjMjlhMDdmZjBjN2E5MjRjNGQxZDZlODkyM2RmMmRiZDAxMTg2M2MzNjhhOGFhMzllYmUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.PWE9A4mjCBPardih5w5MBBcwWh03XkMT8Tg6Yyi7CGA)
![image](https://private-user-images.githubusercontent.com/75880261/270670525-e90b1b0a-ff5d-440c-84e3-66a113795eab.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjE1MzEyNzUsIm5iZiI6MTcyMTUzMDk3NSwicGF0aCI6Ii83NTg4MDI2MS8yNzA2NzA1MjUtZTkwYjFiMGEtZmY1ZC00NDBjLTg0ZTMtNjZhMTEzNzk1ZWFiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MjElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzIxVDAzMDI1NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTk5YzE2NmNiMTYwMzQ0ZDAwYTc1M2E5ZjA5ODZlNGZhMzZjYzE3ZmYzZWQ0MjRkZGYxMWFiZGMwOTc2YTFmZDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.YPBSjGhn0EuUt73PJ-xferEWA0zPuCDRuUyosGNHM5w)
- Request Analytics
- Authentication Provider
- Rate Limiting
- Admin API (API Onboarding and offboarding)
- Reverse Proxy
- API Health Checks
- GUI Application
- The API gateway should be able to route incoming HTTP(S) requests to specific services based on URL paths, HTTP methods, and other request attributes.
- The gateway should be able to validate tokens (e.g., JWT) and decide if a request should proceed.
- To prevent abuse, the gateway should limit the number of requests a client can make in a given time frame. This could be global, per user, per IP, or per service.
- All requests and responses should be logged for auditing and debugging purposes.
- Integrations with monitoring tools to track response times, error rates, and other important metrics.
- As services can be dynamically added or removed, the API gateway should integrate with service discovery mechanisms to know where to route requests.
- Support for HTTPS with SSL/TLS termination.
- The gateway should implement periodic health checks to verify the status and availability of integrated API services.
- The health check mechanism should be configurable, allowing for adjustments to the frequency and conditions of checks.
- Requires big infrastructure refactor (code is messy and in a POC state) can consider clean architecture in golang or domain driven design
- Split the rev. proxy, cron jobs, admin api into different microservices, write docker-compose to start all containers easily
- Introduce redis as caching (lazy loading or write through)
- Introduce rate limiting into rev. proxy
- Incorporate credentials into manager GUI and test functionality
- Write unit tests, integration tests and e2e tests
- Write simple script to startup service with configured environment variables OR kubernetes/helm to deploy
go work init
go work use ./admin-api ./salmon-api ./tuna-api