backend-development
A reference guide and framework for building RESTful APIs, SQL database schemas, and JWT authentication.
Install
mkdir -p .claude/skills/backend-development && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/1186" && unzip -o skill.zip -d .claude/skills/backend-development && rm skill.zipInstalls to .claude/skills/backend-development
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Backend API design, database architecture, microservices patterns, and test-driven development. Use for designing APIs, database schemas, or backend system architecture.Key capabilities
- →Define RESTful API endpoint conventions
- →Specify standard JSON response and error formats
- →Design PostgreSQL database schemas with UUIDs and soft deletes
- →Implement JWT authentication with token verification
- →Apply cache-aside and cache invalidation patterns
How it works
The skill provides code examples and structural guidelines for common backend development tasks, including API design, database schema creation, authentication, caching, and rate limiting.
Inputs & outputs
When to use backend-development
- →Designing RESTful API endpoints
- →Defining efficient SQL database schemas
- →Implementing JWT authentication flows
About this skill
Backend Development
API Design
RESTful Conventions
GET /users # List users
POST /users # Create user
GET /users/:id # Get user
PUT /users/:id # Update user (full)
PATCH /users/:id # Update user (partial)
DELETE /users/:id # Delete user
GET /users/:id/posts # List user's posts
POST /users/:id/posts # Create post for user
Response Format
{
"data": { ... },
"meta": {
"page": 1,
"per_page": 20,
"total": 100
}
}
Error Format
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid input",
"details": [
{ "field": "email", "message": "Invalid format" }
]
}
}
Database Patterns
Schema Design
-- Use UUIDs for public IDs
CREATE TABLE users (
id SERIAL PRIMARY KEY,
public_id UUID DEFAULT gen_random_uuid() UNIQUE,
email VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT NOW(),
updated_at TIMESTAMPTZ DEFAULT NOW()
);
-- Soft deletes
ALTER TABLE users ADD COLUMN deleted_at TIMESTAMPTZ;
-- Indexes
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_created ON users(created_at DESC);
Query Patterns
-- Pagination with cursor
SELECT * FROM posts
WHERE created_at < $cursor
ORDER BY created_at DESC
LIMIT 20;
-- Efficient counting
SELECT reltuples::bigint AS estimate
FROM pg_class WHERE relname = 'users';
Authentication
JWT Pattern
interface TokenPayload {
sub: string; // User ID
iat: number; // Issued at
exp: number; // Expiration
scope: string[]; // Permissions
}
function verifyToken(token: string): TokenPayload {
return jwt.verify(token, SECRET) as TokenPayload;
}
Middleware
async function authenticate(req: Request, res: Response, next: Next) {
const token = req.headers.authorization?.replace('Bearer ', '');
if (!token) {
return res.status(401).json({ error: 'Unauthorized' });
}
try {
req.user = verifyToken(token);
next();
} catch {
res.status(401).json({ error: 'Invalid token' });
}
}
Caching Strategy
// Cache-aside pattern
async function getUser(id: string): Promise<User> {
const cached = await redis.get(`user:${id}`);
if (cached) return JSON.parse(cached);
const user = await db.users.findById(id);
await redis.setex(`user:${id}`, 3600, JSON.stringify(user));
return user;
}
// Cache invalidation
async function updateUser(id: string, data: Partial<User>) {
await db.users.update(id, data);
await redis.del(`user:${id}`);
}
Rate Limiting
const limiter = rateLimit({
windowMs: 60 * 1000, // 1 minute
max: 100, // 100 requests per window
keyGenerator: (req) => req.ip,
handler: (req, res) => {
res.status(429).json({ error: 'Too many requests' });
}
});
Observability
- Logging: Structured JSON logs with request IDs
- Metrics: Request latency, error rates, queue depths
- Tracing: Distributed tracing with correlation IDs
- Health checks:
/healthand/readyendpoints
When not to use it
- →When the project does not use RESTful APIs
- →When the project does not use PostgreSQL for its database
- →When the project does not use JWT for authentication
Limitations
- →It focuses on RESTful API conventions
- →It provides patterns for PostgreSQL database design
- →It details JWT authentication
How it compares
This skill offers standardized, opinionated patterns for backend components, contrasting with ad-hoc or unguided development approaches.
Compared to similar skills
backend-development side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| backend-development (this skill) | 17 | 4mo | No flags | Intermediate |
| backend-patterns | 0 | 1mo | No flags | Advanced |
| drizzle-orm | 32 | 2mo | No flags | Intermediate |
| event-store-design | 5 | 2mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
More by skillcreatorai
View all by skillcreatorai →You might also like
backend-patterns
chenqin231
Backend architecture patterns, API design, database optimization, and server-side best practices for Node.js, Express, and Next.js API routes.
drizzle-orm
EpicenterHQ
Drizzle ORM patterns for type branding and custom types. Use when working with Drizzle column definitions, branded types, or custom type conversions.
event-store-design
wshobson
Design and implement event stores for event-sourced systems. Use when building event sourcing infrastructure, choosing event store technologies, or implementing event persistence patterns.
springboot-patterns
affaan-m
Spring Boot 架构模式、REST API 设计、分层服务、数据访问、缓存、异步处理和日志记录。适用于 Java Spring Boot 后端工作。
postgresql
sickn33
Design a PostgreSQL-specific schema. Covers best-practices, data types, indexing, constraints, performance patterns, and advanced features
epic-database
epicweb-dev
Guide on Prisma, SQLite, and LiteFS for Epic Stack