@lsendel/claude-agents
Version:
Supercharge Claude Code with specialized AI sub-agents for code review, testing, debugging, documentation & more. Now with process & standards management! Easy CLI tool to install, manage & create custom AI agents for enhanced development workflow
315 lines (267 loc) • 7.16 kB
Markdown
name: api-design
type: standard
version: 1.0.0
description: LLM-optimized RESTful API design patterns with OpenAPI specifications and best practices
author: Claude
tags: [api, rest, design, standards, openapi, llm-guide]
related_commands: [/design-api, /api-review, /generate-openapi]
# API Design Standards for LLMs
> Version: 1.0.0
> Last updated: 2025-07-29
> Purpose: Enable LLMs to design and review REST APIs consistently
> Target: Language models creating or reviewing API specifications
## Context for LLM Usage
This guide is specifically designed for language models designing REST APIs. When creating APIs:
- You will receive requirements in various formats (user stories, technical specs, existing code)
- You should generate OpenAPI specifications following these patterns
- Your output should include examples, error cases, and integration documentation
- You must consider security, performance, and maintainability from the start
## Reading API Requirements
When analyzing API requirements:
1. **Identify Resources**: Extract nouns that represent entities
2. **Map Operations**: Determine CRUD operations needed
3. **Define Relationships**: Understand resource hierarchies
4. **Extract Constraints**: Note rate limits, auth requirements, validation rules
## Core Principles
- Use consistent naming conventions (lowercase, hyphens for word separation)
- Keep endpoints focused and RESTful (one resource per endpoint)
- Standardize response formats (consistent envelope structure)
- Version breaking changes (use /v1, /v2 prefixes)
- Design for pagination from the start
- Include filtering and sorting capabilities
- Plan for future expansion with extensible schemas
## URL Structure
### General Format
```
https://api.example.com/v1/resources/{id}/sub-resources
```
### Rules
- Use lowercase letters
- Separate words with hyphens
- Use plural nouns for collections
- Avoid verbs in URLs (use HTTP methods)
### Examples
```
GET /api/v1/users # List users
POST /api/v1/users # Create user
GET /api/v1/users/123 # Get specific user
PUT /api/v1/users/123 # Update user
DELETE /api/v1/users/123 # Delete user
GET /api/v1/users/123/orders # Get user's orders
```
## HTTP Methods
- **GET**: Retrieve resources (safe, idempotent)
- **POST**: Create new resources
- **PUT**: Update entire resource (idempotent)
- **PATCH**: Partial update (idempotent)
- **DELETE**: Remove resources (idempotent)
## Request Standards
### Headers
```http
Content-Type: application/json
Accept: application/json
Authorization: Bearer {token}
X-Request-ID: {unique-id}
```
### Request Body
```json
{
"data": {
"type": "user",
"attributes": {
"email": "user@example.com",
"name": "John Doe"
}
}
}
```
## Response Standards
### Success Response
```json
{
"data": {
"id": "123",
"type": "user",
"attributes": {
"email": "user@example.com",
"name": "John Doe",
"createdAt": "2024-01-15T10:30:00Z"
},
"links": {
"self": "/api/v1/users/123"
}
},
"meta": {
"timestamp": "2024-01-15T10:30:00Z"
}
}
```
### Collection Response
```json
{
"data": [
{
"id": "123",
"type": "user",
"attributes": { ... }
}
],
"meta": {
"total": 150,
"page": 1,
"perPage": 20
},
"links": {
"self": "/api/v1/users?page=1",
"next": "/api/v1/users?page=2",
"last": "/api/v1/users?page=8"
}
}
```
## Status Codes
### Success Codes
- **200 OK**: Successful GET, PUT, PATCH
- **201 Created**: Successful POST
- **204 No Content**: Successful DELETE
- **202 Accepted**: Request accepted for async processing
### Client Error Codes
- **400 Bad Request**: Invalid request format
- **401 Unauthorized**: Missing or invalid authentication
- **403 Forbidden**: Authenticated but not authorized
- **404 Not Found**: Resource doesn't exist
- **409 Conflict**: Request conflicts with current state
- **422 Unprocessable Entity**: Validation errors
### Server Error Codes
- **500 Internal Server Error**: Generic server error
- **502 Bad Gateway**: Invalid response from upstream
- **503 Service Unavailable**: Service temporarily down
- **504 Gateway Timeout**: Upstream timeout
## Error Handling
### Error Response Format
```json
{
"errors": [
{
"id": "unique-error-id",
"status": "422",
"code": "VALIDATION_ERROR",
"title": "Validation Failed",
"detail": "Email format is invalid",
"source": {
"pointer": "/data/attributes/email"
},
"meta": {
"timestamp": "2024-01-15T10:30:00Z"
}
}
]
}
```
### Error Codes
- Use consistent, descriptive error codes
- Include both HTTP status and application-specific codes
- Provide actionable error messages
## Pagination
### Query Parameters
```
GET /api/v1/users?page=2&per_page=20
GET /api/v1/users?offset=20&limit=20
GET /api/v1/users?cursor=eyJpZCI6MTIzfQ
```
### Pagination Headers
```http
X-Total-Count: 150
X-Page: 2
X-Per-Page: 20
Link: <...?page=3>; rel="next", <...?page=1>; rel="prev"
```
## Filtering and Sorting
### Filtering
```
GET /api/v1/users?filter[status]=active
GET /api/v1/users?filter[created_at][gte]=2024-01-01
GET /api/v1/users?q=john
```
### Sorting
```
GET /api/v1/users?sort=created_at
GET /api/v1/users?sort=-created_at,name
```
## Versioning
### URL Versioning (Recommended)
```
https://api.example.com/v1/users
https://api.example.com/v2/users
```
### Header Versioning
```http
Accept: application/vnd.api+json;version=1
API-Version: 1
```
### Version Deprecation
- Announce deprecation well in advance
- Include deprecation warnings in responses
- Provide migration guides
- Support old versions for reasonable time
## Authentication
### Bearer Token
```http
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
```
### API Key
```http
X-API-Key: your-api-key-here
```
### OAuth 2.0
- Use for third-party integrations
- Implement proper scopes
- Regular token rotation
## Rate Limiting
### Headers
```http
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 999
X-RateLimit-Reset: 1640995200
```
### Rate Limit Response
```json
{
"errors": [{
"status": "429",
"code": "RATE_LIMIT_EXCEEDED",
"title": "Too Many Requests",
"detail": "Rate limit exceeded. Try again in 60 seconds."
}]
}
```
## Caching
### Cache Headers
```http
Cache-Control: public, max-age=3600
ETag: "33a64df551425fcc55e4d42a148795d9f25f89d4"
Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
```
### Conditional Requests
```http
If-None-Match: "33a64df551425fcc55e4d42a148795d9f25f89d4"
If-Modified-Since: Wed, 21 Oct 2023 07:28:00 GMT
```
## Best Practices
- Always use HTTPS
- Don't break existing endpoints
- Implement pagination for collections
- Validate all inputs
- Use parameterized queries
- Implement rate limiting
- Cache appropriately
## Implementation Checklist
- [ ] Consistent URL structure
- [ ] Proper HTTP method usage
- [ ] Standardized responses
- [ ] Error format consistency
- [ ] Pagination for collections
- [ ] Authentication implemented
- [ ] Rate limiting configured
- [ ] API versioning strategy