api-design
REST API design patterns including resource naming, status codes, pagination, filtering, error responses, versioning, and rate limiting for production APIs. Use when designing or reviewing REST endpoints, resource names, status codes, pagination, or versioning.
By affaan-m · 3,495 installs
npx skills add affaan-m/ecc --skill api-design
Source repository · Upstream listing
API Design Patterns
Conventions and best practices for designing consistent, developer friendly REST APIs.
When to Activate
Designing new API endpoints
Reviewing existing API contracts
Adding pagination, filtering, or sorting
Implementing error handling for APIs
Planning API versioning strategy
Building public or partner facing APIs
Resource Design
URL Structure
Naming Rules
HTTP Methods and Status Codes
Method Semantics
Method Idempotent Safe Use For
GET Yes Yes Retrieve resources
POST No No Create resources, trigger actions
PUT Yes No Full replacement of a resource
PATCH No No Partial update of a resource
DELETE Yes No Remove a resource
PATCH can be made idempotent with proper implementation
Status Code Reference
Common Mistakes
Response Format
Success Response
Collection Response (with Pagination)
Error Response
Response Envelope Variants
Pagination
Offset Based (Simple)
Pros: Easy to implement, supports "jump to page N"
Cons: Slow on large offsets (OFFSET 100000), inconsistent with concurrent inserts
Cursor Based (Scalable)
Pros: Consistent performance regardless of position, stable with concurrent inserts
Cons: Cannot jump to arbitrary page, cursor is opaque
When to Use Which
Use Case Pagination Type
Admin dashboards, small datasets (<10K) Offset
Infinite scroll, feeds, large datasets Cursor
Public APIs Cursor (default) with offset (optional)
Search results Offset (users expect page numbers)
Filtering, Sorting, and Search
Filtering
Sorting
Full Text Search
Sparse Fieldsets
Authentication and Authorization
Token Based Auth
Authorization Patterns
Rate Limiting
Headers
Rate Limit Tiers
Tier Limit Window Use Case
Anonymous 30/min Per IP Public endpoints
Authenticated 100/min Per user Standard API access
Premium 1000/min Per API key Paid API plans
Internal 10000/min Per service Service to service
Versioning
URL Path Versioning (Recommended)
Pros: Explicit, easy to route, cacheable
Cons: URL changes between versions
Header Versioning
Pros: Clean URLs
Cons: Harder to test, easy to forget
Versioning Strategy
Implementation Patterns
TypeScript (Next.js API Route)
Python (Django REST Framework)
Go (net/http)
API Design Checklist
Before shipping a new endpoint:
[ ] Resource URL follows naming conventions (plural, kebab case, no verbs)
[ ] Correct HTTP method used (GET for reads, POST for creates, etc.)
[ ] Appropriate status codes returned (not 200 for everything)
[ ] Input validated with schema (Zod, Pydantic, Bean Validation)
[ ] Error responses follow standard format with codes and messages
[ ] Pagination implemented for list endpoints (cursor or offset)
[ ] Authentication required (or explicitly marked as public)
[ ] Authorization checked (user can only access their own resources)
[ ] Rate limiting configured
[ ] Response does not leak internal details (stack traces, SQL errors)
[ ] Consistent naming with existing endpoints (camelCase vs snake case)
[ ] Documented (OpenAPI/Swagger spec updated)