Knowledge and patterns for designing RESTful and GraphQL APIs.
View on GitHubdrewdresser/ai-dev-settings
ai-dev
skills/designing-apis/SKILL.md
January 22, 2026
Select agents to install to:
npx add-skill https://github.com/drewdresser/ai-dev-settings/blob/main/skills/designing-apis/SKILL.md -a claude-code --skill designing-apisInstallation paths:
.claude/skills/designing-apis/# Designing APIs Skill
This skill provides patterns and best practices for API design.
## REST API Design
### URL Structure
```
# Resources (nouns, plural)
GET /users # List users
POST /users # Create user
GET /users/{id} # Get user
PUT /users/{id} # Update user
DELETE /users/{id} # Delete user
# Nested resources
GET /users/{id}/orders # User's orders
POST /users/{id}/orders # Create order for user
# Actions (when CRUD doesn't fit)
POST /users/{id}/activate
POST /orders/{id}/cancel
```
### HTTP Methods
| Method | Purpose | Idempotent | Safe |
|--------|---------|------------|------|
| GET | Read resource | Yes | Yes |
| POST | Create resource | No | No |
| PUT | Replace resource | Yes | No |
| PATCH | Partial update | No | No |
| DELETE | Remove resource | Yes | No |
### Status Codes
| Code | Meaning | When to Use |
|------|---------|-------------|
| 200 | OK | Successful GET, PUT, PATCH |
| 201 | Created | Successful POST |
| 204 | No Content | Successful DELETE |
| 400 | Bad Request | Invalid input |
| 401 | Unauthorized | Missing/invalid auth |
| 403 | Forbidden | Authenticated but not allowed |
| 404 | Not Found | Resource doesn't exist |
| 409 | Conflict | Duplicate, version conflict |
| 422 | Unprocessable | Valid format, invalid data |
| 429 | Too Many Requests | Rate limited |
| 500 | Internal Error | Server error |
### Request/Response Format
#### Request
```json
POST /users
Content-Type: application/json
Authorization: Bearer <token>
{
"email": "user@example.com",
"name": "John Doe",
"role": "user"
}
```
#### Success Response
```json
HTTP/1.1 201 Created
Content-Type: application/json
{
"data": {
"id": "usr_123",
"email": "user@example.com",
"name": "John Doe",
"role": "user",
"created_at": "2024-01-15T10:30:00Z"
}
}
```
#### Error Response
```json
HTTP/1.1 400 Bad Request
Content-Type: application/json
{
"error": {
"code": "VALIDATION_