APIs are the backbone of modern applications.
But here’s the uncomfortable truth: most APIs are technically functional… and architecturally flawed.
After reviewing common patterns highlighted in Top 10 Mistakes in REST API Design, I realized something important:
👉 Most API problems aren’t about code.
👉 They’re about design decisions.
Let’s break down the 10 most common REST API mistakes and what to do instead.
1. Using Verbs in Endpoint URLs
❌ Mistake:
/createUser
/deleteOrder/:id
This mixes actions into URLs.
✅ Best Practice:
Use nouns. Let HTTP methods define the action.
POST /users → create user
DELETE /orders/{id} → delete order
Your endpoints should represent resources, not actions.
2. Ignoring Proper Use of HTTP Methods
Each HTTP method has a semantic meaning:
GET→ ReadPOST→ CreatePUT/PATCH→ UpdateDELETE→ Remove
❌ Mistake:
Using GET to delete something or POST for idempotent updates.
This breaks expectations and can cause serious caching or security issues.
3. Overloading 200 OK
Returning 200 OK for everything — even errors — is one of the most common API design sins.
❌ Example:
200 OK
{
"error": "User not found"
}
✅ Use proper status codes:
201→ Created400→ Bad Request404→ Not Found409→ Conflict500→ Server Error
Status codes are not optional metadata — they are part of the API contract.
4. Inconsistent or Vague Error Handling
Two dangerous patterns:
Generic error messages
Exposing stack traces to clients
✅ Better approach:
Standardize error responses:
{
"code": "USER_NOT_FOUND",
"message": "User with ID 123 does not exist."
}
Clear. Actionable. Secure.
5. Not Versioning Your API
Launching without versioning feels fast.
It’s also short-sighted.
❌ Mistake:
/users
✅ Better:
/v1/users
Or use header-based versioning.
Versioning allows:
Backward compatibility
Gradual deprecation
Safer evolution
Without it, every breaking change becomes a production risk.
6. Poor Resource Structure & Over-Nesting
Deeply nested URLs become painful quickly.
❌ Example:
/users/{id}/orders/{orderId}/items/{itemId}/reviews/{reviewId}
Hard to maintain. Hard to scale.
✅ Instead:
Use logical nesting but avoid excessive depth.
Consider top-level resources with relational links.
Example:
/reviews/{id}
Keep URLs clean and predictable.
7. No Pagination, Filtering, or Sorting
Returning entire datasets is a performance disaster waiting to happen.
❌ Mistake:
GET /users
Returns 50,000 records.
✅ Implement pagination:
GET /users?limit=20&offset=40
Also allow:
Filtering (
?status=active)Sorting (
?sort=created_at)
This dramatically improves performance and client flexibility.
8. Ignoring Security & Throttling
APIs without HTTPS, authentication, or rate limiting are exposed systems.
Minimum standards today:
Always use HTTPS
Implement authentication (OAuth2, JWT)
Add rate limiting
Even a simple limit like 100 requests per minute per user can prevent abuse.
Security is not an enhancement. It’s foundational.
9. Inconsistent Naming Conventions
Mixing naming styles makes APIs confusing:
/user/users/userListcamelCase vs snake_case
✅ Best Practice:
Use plural nouns:
/usersChoose one casing style and stick to it
Consistency reduces cognitive load for developers.
10. Ignoring Caching & Performance Tools
APIs that don’t use caching headers are wasting performance potential.
Use:
ETagCache-Control
For long-running tasks:
202 Accepted
Then provide a status endpoint.
Example:
POST /reports
→ 202 Accepted
GET /reports/{id}/status
Asynchronous processing makes your API scalable.
The Real Pattern Behind These Mistakes
Notice something?
Every mistake above falls into one of three categories:
Breaking HTTP semantics
Ignoring scalability
Failing to think long-term
Good API design isn’t about being clever.
It’s about being predictable.
Because predictable APIs:
Scale better
Break less
Are loved by developers
REST API Design Checklist (Save This)
Before shipping your next API:
✔ Resource-based URLs
✔ Correct HTTP methods
✔ Meaningful status codes
✔ Standardized error responses
✔ Versioning strategy
✔ Logical, shallow structure
✔ Pagination + filtering + sorting
✔ HTTPS + authentication + rate limiting
✔ Consistent naming conventions
✔ Caching + async support
If you get these 10 right, you’re ahead of most APIs in production.
Ship thoughtfully.
Your future self (and every developer who integrates with you) will thank you.
I hope you found this guide helpful and informative.
Thanks for reading!
If you enjoyed this article, feel free to share it and follow me for more practical, developer-friendly content like this.


