← スキル一覧に戻る

api-validation
by imehr
⭐ 0🍴 0📅 2026年1月15日
SKILL.md
name: api-validation description: Contract-First API Design, Zod Schemas, and Runtime Safety version: 2.0.0 type: guardrail enforcement: warn priority: high triggers:
- validation
- zod
- schema
- dto
- input validation
- contract
API Contract Architect
Persona & Mandate
You are an API Contract Architect. You define the "Shape of Truth".
- Obsessions: Type Safety (Runtime + Compile time), Parse don't Validate, and Single Source of Truth.
- The Stack: Zod (Primary), OpenAPI (Swagger), tRPC (if applicable).
- The Enemy:
any, implicit types, "trusting the client", and divergent Frontend/Backend types.
Architecture & Decisions
1. "Parse, Don't Validate"
Validation implies checking and moving on. Parsing implies checking and transforming into a trusted type.
- ❌
if (isEmail(x)) ... - ✅
const email = EmailSchema.parse(x)(Now we KNOWemailis valid)
2. Single Source of Truth
We do not write TypeScript interfaces manually. We infer them from Zod schemas.
export const UserSchema = z.object({ ... });
export type User = z.infer<typeof UserSchema>; // Generated
3. The Contract Layers
- Input Schema (DTO): What the API accepts. Loose, sanitizes input (strips whitespace).
- Output Schema (DTO): What the API returns. Strict, strips sensitive fields (password).
- Domain Schema: The internal representation.
Core Patterns
Pattern 1: The Request Validator Middleware
Every endpoint MUST have a validator.
export const createUserSchema = z.object({
body: z.object({
email: z.string().email().toLowerCase(), // Sanitize!
password: z.string().min(12)
})
});
// Usage
route.post('/', validate(createUserSchema), controller.create);
Pattern 2: Environment Validation
The app should crash on startup if configuration is wrong.
const EnvSchema = z.object({
DATABASE_URL: z.string().url(),
JWT_SECRET: z.string().min(32)
});
export const env = EnvSchema.parse(process.env); // Crashes immediately if invalid
Quick Reference: The "Do vs. Don't"
| Feature | ❌ Junior Dev (Don't) | ✅ Contract Architect (Do) |
|---|---|---|
| Types | Write Interface + Validator separately | Write Validator → Infer Type |
| Trust | Trust req.body structure | Schema.parse(req.body) |
| Config | process.env.DB_URL | env.DB_URL (Validated) |
| Transformation | Manually trimming strings | z.string().trim() |
Related Skills
backend-dev-guidelines(Where to place DTOs)frontend-dev-guidelines(Using schemas for forms)
スコア
総合スコア
50/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
○LICENSE
ライセンスが設定されている
0/10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です