How izenberk/url-shortener-api works
This Go/Fiber service creates expiring short links and redirects requests for them, using Redis for link mappings and per-IP quotas. The main workflow is POST creation: validate input, enforce quota, generate or accept a code, and store the mapping; GET resolves the code and returns a redirect. It also serves embedded Swagger UI and an OpenAPI contract. The README documents the broader behavior; unsampled routing details are omitted where wiring is uncertain.
Main entry points: main.go Fiber app · shorten.go Create link · database.go Redis DB 1 · resolve.go Resolve redirect
Components 15
API runtime
- Fiber app
main.go - Logging and CORS
main.go
Link workflow
- Create link
internal/handlers/shorten.go - Request validation
internal/validation/validation.go - Code generation
internal/handlers/shorten.go - Resolve redirect
internal/handlers/resolve.go - URL formatting
internal/handlers/url.go
Redis state
- Redis clients
internal/database/database.go - Redis DB 0
internal/database/database.go - Redis DB 1
internal/database/database.go
API documentation
- Docs routes
docs.go - Swagger UI assets
docs/index.html - OpenAPI contract
openapi.yaml
Other components
- API client
- Browser
Connections 22
- API client → Fiber app: HTTP requests
- Browser → Fiber app: HTTP requests
- Fiber app → Logging and CORS: applies
- Fiber app → Redis clients: initializes
- Fiber app → Create link: dispatches POST
- Fiber app → Resolve redirect: dispatches GET
- Fiber app → Docs routes: registers routes
- Create link → Request validation: validates input
- Create link → Redis DB 1: checks quota
- Create link → Code generation: generates code
- Create link → Redis DB 0: stores mapping
- Create link → Redis DB 1: updates quota
- Create link → URL formatting: formats link
- Resolve redirect → Redis DB 0: looks up code
- Resolve redirect → Redis DB 1: increments counter
- Redis clients → Redis DB 0: connects
- Redis clients → Redis DB 1: connects
- Docs routes → Swagger UI assets: serves
- Docs routes → OpenAPI contract: serves
- Swagger UI assets → OpenAPI contract: loads contract
- Fiber app → API client: returns creation result
- Fiber app → Browser: returns redirect