Architecture and API Design
A modular monolith is often a sensible starting point; microservices add operational and network complexity that needs justification.
How to apply it
Separate controllers, domain services, repositories, and integration adapters. Define validation, status codes, pagination, stable error shapes, request IDs, and idempotency for side-effecting requests.
Worked example
POST /api/v1/projects validates input, derives tenant context from authenticated server state, invokes a service, and returns 201. Errors include safe codes and request IDs, not stack traces.
Common mistakes to avoid
Starting with many microservices or trusting tenant IDs sent by the client.
Practice task
Implement this concept in the capstone. Add one positive test, one negative or failure-path test, and a short note explaining the trade-off you chose.
- A modular monolith is often a sensible starting point; microservices add operational and network complexity that needs justification.
- Separate controllers, domain services, repositories, and integration adapters.
What is the strongest production practice for Architecture and API Design?