crud-comparison
CRUD API Comparison
This page shows how the same POST /todos endpoint is implemented in each stack.
Note: Code is trimmed for readability; see the repos for full context.
Create todo endpoint (POST /todos)
- Stack 1 – Angular + TS BE (Express)
- Stack 2 – Angular + Python (FastAPI)
- Stack 3 – Next.js + TS API (Express)
- Stack 4 – Next.js + Python (FastAPI)
// Express route (simplified)
router.post('/', async (req, res) => {
const { title } = req.body;
const todo = await todoService.createTodo({ title });
res.status(201).json(todo);
});
@router.post('/', response_model=TodoResponse, status_code=201)
async def create_todo(todo: TodoCreate, db: Session = Depends(get_db)):
service = TodoService(db)
return service.create_todo(todo)
// Same pattern as Stack 1, separate Node API
router.post('/', async (req, res) => {
const { title } = req.body;
const todo = await todoService.createTodo({ title });
res.status(201).json(todo);
});
@router.post('/', response_model=TodoResponse, status_code=201)
async def create_todo(todo: TodoCreate, db: Session = Depends(get_db)):
service = TodoService(db)
return service.create_todo(todo)