A fully serverless CRUD API built using AWS Lambda, API Gateway, and DynamoDB.
Designed with clean architecture, structured logging and production‑grade error handling.
- 📸 Screenshots
- 🏗 Architecture Overview
- 🌐 Base URL
- 📚 API Documentation
- 🚧 Future Improvements
- 🎉 Final Notes
┌──────────────────────────┐
│ API Gateway │
│ (REST Endpoints Layer) │
└─────────────┬────────────┘
│
┌────────────────────────┼────────────────────────┐
│ │ │
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ POST / │ │ GET /results │ │ GET /results/ │
│process │ │ (list) │ │ {id} │
└────┬─────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────────┐ ┌──────────────┐
│ Lambda │ │ Lambda │ │ Lambda │
│Process │ │ListResults │ │GetResult │
└────┬─────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
└──────────────┬─────────┴──────────┬────────────┘
▼ ▼
┌──────────────────────────────┐
│ DynamoDB Table │
│ TextProcessingResults │
└──────────────────────────────┘
Client
│
│ POST /
▼
API Gateway
│
│ invokes Lambda
▼
ProcessTextFunction
│
│ put_item()
▼
DynamoDB
│
│ success
▼
ProcessTextFunction
│
│ returns JSON
▼
Client
Process text and store the result.
{
"text": "hello world"
}{
"id": "uuid",
"original": "hello world",
"uppercase": "HELLO WORLD",
"length": 11,
"timestamp": 1771283745
}curl -X POST https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/ \
-H "Content-Type: application/json" \
-d '{"text": "hello world"}'List all stored results.
[
{
"id": "uuid",
"original": "hello",
"uppercase": "HELLO",
"length": 5,
"timestamp": 1771283745
}
]curl https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/resultsRetrieve a single result by ID.
GET /results/f5e565d8-bc1f-4911-a810-e1c3e06d8c98
{
"id": "f5e565d8-bc1f-4911-a810-e1c3e06d8c98",
"original": "hello",
"uppercase": "HELLO",
"length": 5,
"timestamp": 1771283745
}curl https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/results/<id>Delete a result by ID.
DELETE /results/f5e565d8-bc1f-4911-a810-e1c3e06d8c98
{ "message": "Item deleted successfully" }curl -X DELETE https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/results/<id>All responses include:
{
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET,POST,DELETE,OPTIONS",
"Access-Control-Allow-Headers": "Content-Type"
}Table: TextProcessingResults
Attribute | Type
------------|--------
id | String (PK)
original | String
uppercase | String
length | Number
timestamp | Number
Every Lambda uses structured JSON logs:
{
"level": "INFO",
"message": "Item stored successfully",
"requestId": "abc-123",
"details": { "id": "uuid" }
}This makes CloudWatch logs:
- searchable
- filterable
- machine‑readable
- consistent across all Lambdas
curl -X POST https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/ \
-H "Content-Type: application/json" \
-d '{"text": "hello"}'curl https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/resultscurl https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/results/<id>curl -X DELETE https://3ki380u3fc.execute-api.eu-north-1.amazonaws.com/results/<id>Planned enhancements for the next iteration:
- Add authentication (Cognito or JWT-based access control)
- Add pagination support to
/results - Add an update endpoint (PATCH)
- Build a frontend UI (React or Svelte)
- Add full infrastructure-as-code deployment (CloudFormation or CDK)
This project demonstrates:
- Clean serverless architecture
- Modular Lambda design
- Consistent structured logging
- DynamoDB best practices
- Production‑grade error handling
A solid showcase of DevOps and backend engineering skills.



