backend-development
npx skills add https://github.com/aaaaqwq/claude-code-skills --skill backend-development
Agent 安装分布
Skill 文档
å端æå¡å¼åææ¯å°å¾
èçææ¯å端éæï¼å¥åç«¯ææ¯é½è½æï¼ä½ä½ å¾åè¯èçä½ æ³ç¨å¥è¯è¨ï¼å«tm让èçæççï¼
ææ¯æ 导èª
ð Python å端
éç¨åºæ¯ï¼
- å¿«éå¼åãååéªè¯
- æ°æ®å¤çãAI/MLéæ
- Django/FastAPIçæ
æ¡æ¶éåï¼
| æ¡æ¶ | éç¨åºæ¯ | ç¹ç¹ |
|---|---|---|
| FastAPI | ç°ä»£APIã弿¥é«æ§è½ | èªå¨ææ¡£ãç±»åéªè¯ãPydanticéæ |
| Django | ä¼ä¸çº§å ¨æ åºç¨ | ORM宿´ã管çåå°ãçææç |
| Flask | è½»é级微æå¡ | çµæ´»èªç±ãæå°åä¾èµ |
| SQLModel | ç®åæ°æ®åºæä½ | Pydantic + SQLAlchemy å®ç¾ç»å |
è¯¦ç»ææ¡£: python/SKILL.md
ð¢ Node.js å端
éç¨åºæ¯ï¼
- åå端ç»ä¸ææ¯æ
- 宿¶éä¿¡ï¼WebSocketï¼
- é«å¹¶åI/Oå¯éååºç¨
æ¡æ¶éåï¼
| æ¡æ¶ | éç¨åºæ¯ | ç¹ç¹ |
|---|---|---|
| NestJS | ä¼ä¸çº§TypeScriptåºç¨ | 模ååãä¾èµæ³¨å ¥ãè£ é¥°å¨ |
| Express | å¿«éæå»ºAPI | ç®åçµæ´»ãä¸é´ä»¶ä¸°å¯ |
| Koa | è½»é级ä¸é´ä»¶æ¡æ¶ | async/awaitãæ´è±æ¨¡å |
| Fastify | 髿§è½JSONæå¡ | æä»¶çæãé度æå¿« |
è¯¦ç»ææ¡£: nodejs/SKILL.md
ð¹ Go å端
éç¨åºæ¯ï¼
- 髿§è½å¾®æå¡
- äºåçåºç¨ï¼Kubernetesï¼
- å¹¶åå¯éåæå¡
æ¡æ¶éåï¼
| æ¡æ¶ | éç¨åºæ¯ | ç¹ç¹ |
|---|---|---|
| Gin | 髿§è½API | é度快ãè·¯ç±å¼ºå¤§ |
| Echo | RESTfulæå¡ | ä¸é´ä»¶ä¸°å¯ã坿©å± |
| Fiber | æè´æ§è½ | åºäºFasthttpãç±»Express |
è¯¦ç»ææ¡£: go/SKILL.md
â Java å端
éç¨åºæ¯ï¼
- 大åä¼ä¸çº§åºç¨
- éè/çµåçç¨³å®æ§è¦æ±é«çåºæ¯
- Springçæä½ç³»
æ¡æ¶éåï¼
| æ¡æ¶ | éç¨åºæ¯ | ç¹ç¹ |
|---|---|---|
| Spring Boot | ä¼ä¸çº§å¾®æå¡ | çæå®æ´ã约å®å¤§äºé ç½® |
| Spring Cloud | åå¸å¼ç³»ç» | æå¡æ²»çãé ç½®ä¸å¿ |
| Quarkus | äºåç/GraalVM | ç¼è¯æ¶ä¼åãä½å å |
è¯¦ç»ææ¡£: java/SKILL.md
éç¨å端ç¥è¯
API 设计è§è
“` GET /api/users # è·åå表 GET /api/users/:id # è·åå个 POST /api/users # å建 PUT /api/users/:id # 宿´æ´æ° PATCH /api/users/:id # é¨åæ´æ° DELETE /api/users/:id # å é¤ “`
ç»ä¸ååºæ ¼å¼
“`json // æå { “success”: true, “data”: { /* æ°æ® */ }, “message”: “æä½æå” }
// 失败 { “success”: false, “error”: { “code”: “USER_NOT_FOUND”, “message”: “ç¨æ·ä¸å娔 } } “`
æ°æ®åºéåæå
| ç±»å | éå | éç¨åºæ¯ |
|---|---|---|
| å ³ç³»å | PostgreSQL | 夿æ¥è¯¢ãäºå¡è¦æ±é« |
| å ³ç³»å | MySQL | ç®åCRUDã读å¤åå° |
| ææ¡£ | MongoDB | çµæ´»schemaãæ¥å¿åå¨ |
| ç¼å | Redis | åå¸å¼ç¼åãæ¶æ¯éå |
| æ¶åº | InfluxDB | çæ§æ°æ®ãIoT |
è®¤è¯æ¹æ¡éå
| æ¹æ¡ | éç¨åºæ¯ | å¤æåº¦ |
|---|---|---|
| JWT | æ ç¶æAPIãåå¸å¼ | ââ |
| Session | åä½åºç¨ãç®ååºæ¯ | â |
| OAuth2 | ç¬¬ä¸æ¹ç»å½ãSSO | ââââ |
| API Key | æå¡é´è°ç¨ | â |
使ç¨è¯´æ
å½ä½ 说”å¼åå端”æ¶ï¼èçä¼é®ä½ ï¼
- ç¨ä»ä¹è¯è¨ï¼ (Python/Node.js/Go/Java)
- ä»ä¹åºæ¯ï¼ (CRUD API/å¾®æå¡/宿¶éä¿¡/æ°æ®å¤ç)
- ä»ä¹æ°æ®åºï¼ (PostgreSQL/MySQL/MongoDB/Redis)
ç¶åèçä¼åæ¢å°å¯¹åºè¯è¨çä¸å®¶æ¨¡å¼ï¼ç»ä½ æä¸ä¸ç建议ï¼
æä½³å®è·µï¼éç¨ï¼
1. ç¯å¢åé管ç
“`bash
.env.example
DATABASE_URL=postgresql://user:pass@localhost:5432/db REDIS_URL=redis://localhost:6379 JWT_SECRET=your-secret-key LOG_LEVEL=info “`
2. æ¥å¿è§è
“`javascript // ç»æåæ¥å¿ logger.info(‘user_login’, { userId: 123, ip: ‘192.168.1.1’, userAgent: ‘Mozilla/5.0…’ }) “`
3. é误å¤ç
- ç»ä¸é误ç åé误信æ¯
- ææä¿¡æ¯ä¸è¦æ´é²ç»å®¢æ·ç«¯
- è®°å½å®æ´çéè¯¯å æ å°æ¥å¿
4. APIéæµ
- 鲿¢DDoSæ»å»
- å ¬å¼APIå¿ é¡»éæµ
- 使ç¨Rediså®ç°æ»å¨çªå£
5. æ°æ®éªè¯
- æ°¸è¿ä¸è¦ä¿¡ä»»ç¨æ·è¾å ¥
- åæ°ç±»åãé¿åº¦ãæ ¼å¼æ ¡éª
- SQLæ³¨å ¥é²æ¤
6. â ï¸ ä¼é å ³éæºå¶ï¼é²æ¢å åæ³æ¼ï¼
é常éè¦ï¼ ææå端æå¡å¿ é¡»æ£ç¡®å®ç°ä¼é å ³éï¼
FastAPI (Python) 示ä¾
“`python from contextlib import asynccontextmanager from fastapi import FastAPI
@asynccontextmanager async def lifespan(app: FastAPI): # å¯å¨æ¶æ§è¡ await init_database() print(“Application started”)
yield # åºç¨è¿è¡
# å
³éæ¶æ§è¡ - å¿
é¡»æ¸
çèµæºï¼
print("Shutting down...")
await database.dispose()
await redis.close()
print("Graceful shutdown completed")
app = FastAPI(lifespan=lifespan) “`
NestJS (Node.js) 示ä¾
“`typescript import { NestFactory } from ‘@nestjs/core’; import { AppModule } from ‘./app.module’;
async function bootstrap() { const app = await NestFactory.create(AppModule);
// çå¬å ³éä¿¡å· app.enableShutdownHooks();
await app.listen(3000); }
bootstrap(); “`
Gin (Go) 示ä¾
“`go func main() { r := gin.Default()
// ä¼é
å
³é
srv := &http.Server{
Addr: ":8080",
Handler: r,
}
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
// çå¾
ä¸æä¿¡å·
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
// ä¼é
å
³é
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
log.Fatal("Server forced to shutdown:", err)
}
} “`
Spring Boot (Java) 示ä¾
“`java @Component public class ShutdownConfig { @PreDestroy public void onShutdown() { // æ¸ çèµæº dataSource.close(); executor.shutdown(); } } “`
ä¼é å ³éçå ³é®ç¹ï¼
- æè·SIGTERM/SIGINTä¿¡å·
- 忢æ¥åæ°è¯·æ±
- çå¾ ç°æè¯·æ±å®æï¼è®¾ç½®è¶ æ¶ï¼
- å ³éæ°æ®åºè¿æ¥æ±
- å ³éRedis/Kafkaçå¤é¨è¿æ¥
- æ¸ çä¸´æ¶æä»¶
- å·æ°æ¥å¿ç¼å²åº
7. â ï¸ ææ¡£åæ¥è§èï¼é常éè¦ï¼ï¼
å端å¼å宿åï¼å¿ é¡»åæ¥æ´æ°ç¸å ³ææ¡£ï¼ä¿æä»£ç ä¸ææ¡£ä¸è´ï¼
å¿ é¡»ç»´æ¤çææ¡£
1. è¿åº¦ææ¡£ (docs/backend/progress.md)
è®°å½å端å¼åè¿åº¦ã已宿APIãå¾ åäºé¡¹ã
æ´æ°æ¶æºï¼
- 宿æ°APIç«¯ç¹æ¶
- ä¿®æ¹æ°æ®åºæ¨¡åæ¶
- 宿éç¨ç¢æ¶ï¼å¦åå æµè¯éè¿ï¼
- ææ¯æ å级æ¶
ææ¡£æ ¼å¼åèï¼
# å端å¼åè¿åº¦
> æåæ´æ°ï¼YYYY-MM-DD
> ç¶æï¼å¼åä¸ (X%宿)
## 已宿åè½
### æ ¸å¿æ¶æ
| 模å | ç¶æ | 说æ |
|------|------|------|
| FastAPIåºç¨ | â
| 弿¥æ¡æ¶ï¼èªå¨ææ¡£ |
### API端ç¹
| æ¹æ³ | è·¯å¾ | ç¶æ | 说æ |
|------|------|------|------|
| GET | `/api/articles` | â
| æç« å表ï¼å页ãçéï¼ |
## å¾
宿åè½
### ä¼å
级 P1
- [ ] JWT认è¯ä¸é´ä»¶
## 代ç ç»è®¡
| ç±»å | æ°é |
|------|------|
| APIç«¯ç¹ | 13 |
2. APIåèææ¡£ (docs/backend/api-reference.md)
è®°å½å端APIæ¥å£ãè¯·æ±æ ¼å¼ãååºæ ¼å¼ã
æ´æ°æ¶æºï¼
- æ°å¢/ä¿®æ¹APIç«¯ç¹æ¶
- 请æ±/ååºå段ååæ¶
- éè¯¯ç æ°å¢æ¶
- è®¤è¯æºå¶ååæ¶
å¿ é¡»å å«ï¼
- æå¡å°åé ç½®ï¼å¼å/ç产ç¯å¢ï¼
- éç¨ååºæ ¼å¼ï¼æå/失败/å页ï¼
- æ¯ä¸ªAPIç详ç»è¯´æï¼
- æ¹æ³åè·¯å¾
- 请æ±åæ°ï¼Query/Path/Bodyï¼
- ååºæ ¼å¼ï¼å¸¦ç¤ºä¾ï¼
- é误ç 说æ
- æ°æ®æ¨¡åå®ä¹
- è°ç¨ç¤ºä¾ï¼Python/cURL/JavaScriptï¼
3. README.md (backend/README.md)
å端项ç®å ¥å£ææ¡£ï¼å¿«é䏿æåã
å¿ é¡»å å«ï¼
- 项ç®ç®ä»
- ææ¯æ çæ¬
- å¿«éå¯å¨å½ä»¤ï¼å®è£ ä¾èµ/è¿è¡æµè¯/å¯å¨æå¡ï¼
- ç®å½ç»æ
- å¼å注æäºé¡¹
- ä¸å端ç对æ¥è¯´æï¼CORSã端å£çï¼
- ä¼é å ³é说æ
ææ¡£åæ¥æ£æ¥æ¸ å
å端å¼å宿åï¼é®èªå·±ï¼
- ææ´æ°äº
docs/backend/progress.mdåï¼ - æ°APIè®°å½å¨
docs/backend/api-reference.mdäºåï¼ - README.md éçä¾èµçæ¬æ¯ææ°çåï¼
- æ°æ®åºæ¨¡ååååï¼æ´æ°ææ¡£äºåï¼
- ç¯å¢åéååè®°å½å¨æ¡äºåï¼
- API端å£/CORSé ç½®æ´æ°äºåï¼
ææ¡£ä¸ä»£ç 忥åå
- å æ´æ°ææ¡£åæäº¤ä»£ç – ç¡®ä¿ææ¡£åæ ææ°ç¶æ
- APIååç«å³åæ¥ – å端APIåäºï¼ææ¡£å¿ é¡»ç«å»æ´æ°ï¼å端åå¦ççç¨å¢ï¼
- é ç½®ååè®°å½å¨æ¡ – 端å£ãç¯å¢åéãCORSçé ç½®è¦åè¿ææ¡£
- 宿Reviewææ¡£ – æ¯å¨æ£æ¥ä¸æ¬¡ææ¡£æ¯å¦è¿æ¶
- å 餿»ææ¡£ – ä¸åå¨çAPIä»ææ¡£ä¸ç§»é¤
ææ¡£å½åè§è
| ææ¡£ç±»å | è·¯å¾ | å½åæ ¼å¼ |
|---|---|---|
| å端è¿åº¦ | docs/backend/progress.md |
åºå®æä»¶å |
| å端APIåè | docs/backend/api-reference.md |
åºå®æä»¶å |
| å端è¿åº¦ | docs/frontend/progress.md |
åºå®æä»¶å |
| å端APIåè | docs/frontend/api-reference.md |
åºå®æä»¶å |
| ææ¯è®¾è®¡ | docs/plans/YYYY-MM-DD-*.md |
ææ¥æå½å |
| æ°æ®åºåæ´ | docs/database/migrations/*.md |
æçæ¬å½å |
APIææ¡£æ¨¡æ¿åè
### POST /api/articles
å建æç«
**请æ±å¤´**ï¼
Content-Type: application/json Authorization: Bearer {token}
**请æ±ä½**ï¼
```json
{
"title": "æç« æ é¢ï¼å¿
å¡«ï¼",
"content": "Markdownæ£æï¼å¿
å¡«ï¼",
"category_id": 1
}
éªè¯è§åï¼
title: 1-255å符content: æå°1å符
ååºï¼200ï¼ï¼
{
"code": 0,
"message": "success",
"data": {
"id": 1,
"title": "æç« æ é¢",
"created_at": "2026-01-14T00:00:00Z"
}
}
é误ååºï¼
| ç¶æç | 说æ |
|---|---|
| 400 | åæ°éªè¯å¤±è´¥ |
| 401 | æªè®¤è¯ |
---
**åè¯èçä½ æ³ç¨ä»ä¹ææ¯æ ï¼æç»ä½ æ¾å¯¹åºçä¸å®¶ï¼**