URL shortener service
http://reduc.io/wuXaq
We could use following short code gen also:
substr(base62(md5(url)), 6) = 62 ^ 6 //unique short urls
Run docker-compose, it will start api, redis and will expose api port to host.
docker-compose up# Shorten
curl -i http://localhost:9001 -F "url=https://www.amazon.com/Star-Wars-Battlefront-II-Digital/dp/B072JZZ4XD"
# Call shortened url
for ((i=1;i<=100;i++)); do curl -i "http://localhost:9001/SEwuXHhBQw"; done
# Get Stats
curl -i "http://localhost:9001/stats/?url=https://www.amazon.com/Star-Wars-Battlefront-II-Digital/dp/B072JZZ4XD"
# returns: {"callCount":100}sbt packageBinsbt testSimulation users count can be set in application.conf in test resources.
# terminal 1
sbt run
# Run simulation in terminal 2
sbt gatling:test gatling:latestReportsbt clean coverage test coverageReport- Seperate read and write API's
- Move statistics to different data store and API
- Add DB support by having write master/replicas and have read replicas
- Move hit counts to MapReduce job and generate them from the Web Server logs
- Implement Authentication using JWT authentication protocol with OAuth2 authentication framework
- API Documentation using swagger or similar
- Add Host denyList
- Add Retry policies for
Rediscalls using Retry or similar one - Add Throttling using akka-http-contrib
- Add Metrics support using akka-http-metrics
z i λ a s a l.