backend-skills
Master Node.js, Express, PHP, Laravel, Java, Spring Boot, API design, and database integration. Build scalable APIs and server applications.
Best use case
backend-skills is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Master Node.js, Express, PHP, Laravel, Java, Spring Boot, API design, and database integration. Build scalable APIs and server applications.
Teams using backend-skills should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/backend-skills/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How backend-skills Compares
| Feature / Agent | backend-skills | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Master Node.js, Express, PHP, Laravel, Java, Spring Boot, API design, and database integration. Build scalable APIs and server applications.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Backend Development Skills
## Express.js Fundamentals
```javascript
const express = require('express');
const app = express();
app.use(express.json());
// Routes with error handling
app.get('/api/users/:id', async (req, res, next) => {
try {
const user = await User.findById(req.params.id);
if (!user) {
return res.status(404).json({ error: 'User not found' });
}
res.json(user);
} catch (error) {
next(error);
}
});
// Global error handler
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({
error: 'Internal Server Error',
requestId: req.id
});
});
app.listen(3000);
```
## RESTful API Design
```
HTTP Methods:
GET /api/v1/users - List all
GET /api/v1/users/:id - Get one
POST /api/v1/users - Create
PUT /api/v1/users/:id - Full update
PATCH /api/v1/users/:id - Partial update
DELETE /api/v1/users/:id - Delete
Status Codes:
200 OK - Success
201 Created - Resource created
204 No Content - Success, no body
400 Bad Request - Validation error
401 Unauthorized- Auth required
403 Forbidden - No permission
404 Not Found - Resource missing
409 Conflict - State conflict
429 Too Many - Rate limited
500 Server Error- Unexpected error
```
## Database Operations with Retry
```javascript
// Connection pool with retry logic
const { Pool } = require('pg');
const pool = new Pool({
max: 20,
idleTimeoutMillis: 30000,
connectionTimeoutMillis: 2000,
});
async function queryWithRetry(sql, params, maxRetries = 3) {
for (let attempt = 1; attempt <= maxRetries; attempt++) {
try {
const result = await pool.query(sql, params);
return result;
} catch (error) {
if (attempt === maxRetries) throw error;
const delay = Math.pow(2, attempt) * 1000;
await new Promise(r => setTimeout(r, delay));
}
}
}
```
## Authentication & Security
```javascript
// JWT Authentication with validation
const jwt = require('jsonwebtoken');
function generateToken(payload) {
return jwt.sign(payload, process.env.JWT_SECRET, {
expiresIn: '24h',
issuer: 'api.example.com',
audience: 'example.com'
});
}
// Middleware with proper error handling
const authenticateToken = async (req, res, next) => {
try {
const authHeader = req.headers.authorization;
if (!authHeader?.startsWith('Bearer ')) {
return res.status(401).json({ error: 'Missing token' });
}
const token = authHeader.split(' ')[1];
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
next();
} catch (error) {
if (error.name === 'TokenExpiredError') {
return res.status(401).json({ error: 'Token expired' });
}
return res.status(403).json({ error: 'Invalid token' });
}
};
```
## Input Validation Pattern
```javascript
const Joi = require('joi');
const userSchema = Joi.object({
email: Joi.string().email().required(),
password: Joi.string().min(8).required(),
name: Joi.string().max(100).required()
});
const validate = (schema) => (req, res, next) => {
const { error, value } = schema.validate(req.body);
if (error) {
return res.status(400).json({
error: 'Validation failed',
details: error.details.map(d => ({
field: d.path.join('.'),
message: d.message
}))
});
}
req.validated = value;
next();
};
app.post('/api/users', validate(userSchema), createUser);
```
## Database Query Optimization
| Technique | Impact | When to Use |
|-----------|--------|-------------|
| Indexing | High | Frequently queried columns |
| Connection Pooling | High | Always in production |
| Query Optimization | Medium | SELECT only needed columns |
| N+1 Prevention | High | Use JOINs/eager loading |
| Caching | High | Frequently accessed data |
| Pagination | Medium | Large result sets |
## Error Handling Best Practices
```javascript
// Structured error response
class ApiError extends Error {
constructor(statusCode, code, message, details = null) {
super(message);
this.statusCode = statusCode;
this.code = code;
this.details = details;
}
toJSON() {
return {
error: {
code: this.code,
message: this.message,
details: this.details
}
};
}
}
// Usage
throw new ApiError(400, 'VALIDATION_ERROR', 'Email is required', [
{ field: 'email', message: 'Must be valid email' }
]);
```
## Unit Test Template
```javascript
const request = require('supertest');
const app = require('../app');
describe('Users API', () => {
beforeEach(async () => {
await db.truncate('users');
});
describe('GET /api/users/:id', () => {
test('returns user when found', async () => {
const user = await createUser({ email: 'test@example.com' });
const res = await request(app)
.get(`/api/users/${user.id}`)
.set('Authorization', `Bearer ${token}`)
.expect(200);
expect(res.body.email).toBe('test@example.com');
});
test('returns 404 when not found', async () => {
await request(app)
.get('/api/users/999')
.set('Authorization', `Bearer ${token}`)
.expect(404);
});
});
});
```
## Troubleshooting Guide
| Symptom | Cause | Solution |
|---------|-------|----------|
| ECONNREFUSED | Service not running | Check service status |
| ER_DUP_ENTRY | Duplicate key | Handle upsert properly |
| ETIMEDOUT | Slow query | Add timeout, optimize |
| ECONNRESET | Connection dropped | Implement retry logic |
## Key Concepts Checklist
- [ ] Express routing and middleware
- [ ] Request/response handling
- [ ] JSON parsing and validation
- [ ] Database CRUD operations
- [ ] SQL query optimization
- [ ] Authentication (JWT, OAuth)
- [ ] Error handling
- [ ] API versioning
- [ ] Rate limiting
- [ ] CORS configuration
- [ ] Environment variables
- [ ] Testing with Jest/Supertest
- [ ] Logging and monitoring
- [ ] Security best practices
---
**Source**: https://roadmap.sh
**Version**: 2.0.0
**Last Updated**: 2025-01-01Related Skills
mixseek-skills
MixSeek Agent Skills collection for AI coding assistants. Provides workspace management, team configuration, evaluation setup, and debugging tools for MixSeek-Core.
managing-skills
Install, find, update, and manage agent skills. Use when the user wants to add a new skill, search for skills that do something, check if skills are up to date, or update existing skills. Triggers on: install skill, add skill, get skill, find skill, search skill, update skill, check skills, list skills.
find-skills
Find and install agent skills with `npx playbooks find skill` and `npx playbooks add skill`. Use whenever a skill needs to be discovered or installed.
fenxi-skills
分析指定skills的工作流程,通过中文图文结合方式让使用者了解目标skills的工作方式
dozu-ui-service-skills
Index of AI agent skills and how to use them when implementing features in this repo.
criador-skills
Helper skill to create new agent skills following the standard structure. Use this when you want to define a new capability or workflow for the agent.
creating-skills
Expert knowledge on creating Agent Skills for Claude Code. Use when designing or creating SKILL.md files, understanding Skill structure, or implementing progressive disclosure patterns.
creating-agent-skills
Use when creating Agent Skills packages (SKILL.md format) for Codex CLI, GitHub Copilot, or Amp - provides the agentskills.io specification with frontmatter constraints, directory structure, and validation rules
clawdhub-find-skills
Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. Uses reskill as the package manager.
audit-and-add-project-skills
Audits project skills in .agent/skills/ and Codex skills for Cursor compatibility, then helps add compatible skills to .cursor/skills/. Use when the user wants to migrate project skills to Cursor, check if skills work with Cursor, or add existing skills to Cursor.
android-agent-skills
Production-ready Agent Skills framework for Android Kotlin development. Provides Clean Architecture patterns, Jetpack Compose best practices, validation DSL, MVI state management, error handling, and AI-powered code generation. Use when building Android apps with quality standards, generating ViewModels, Repositories, UseCases, Compose screens, or writing pure Kotlin Agent Skills.
agent-memory-skills
Self-improving agent architecture using ChromaDB for continuous learning, self-evaluation, and improvement storage. Agents maintain separate memory collections for learned patterns, performance metrics, and self-assessments without modifying their static .md configuration.