{"id":"11d8171e-66bc-40f2-848f-cfa56f45a832","shortId":"EuPMzU","kind":"skill","title":"backend-development","tagline":"Backend API design, database architecture, microservices patterns, and test-driven development. Use for designing APIs, database schemas, or backend system architecture.","description":"# Backend Development\n\n## API Design\n\n### RESTful Conventions\n```\nGET    /users          # List users\nPOST   /users          # Create user\nGET    /users/:id      # Get user\nPUT    /users/:id      # Update user (full)\nPATCH  /users/:id      # Update user (partial)\nDELETE /users/:id      # Delete user\n\nGET    /users/:id/posts  # List user's posts\nPOST   /users/:id/posts  # Create post for user\n```\n\n### Response Format\n```json\n{\n  \"data\": { ... },\n  \"meta\": {\n    \"page\": 1,\n    \"per_page\": 20,\n    \"total\": 100\n  }\n}\n```\n\n### Error Format\n```json\n{\n  \"error\": {\n    \"code\": \"VALIDATION_ERROR\",\n    \"message\": \"Invalid input\",\n    \"details\": [\n      { \"field\": \"email\", \"message\": \"Invalid format\" }\n    ]\n  }\n}\n```\n\n## Database Patterns\n\n### Schema Design\n```sql\n-- Use UUIDs for public IDs\nCREATE TABLE users (\n  id SERIAL PRIMARY KEY,\n  public_id UUID DEFAULT gen_random_uuid() UNIQUE,\n  email VARCHAR(255) UNIQUE NOT NULL,\n  created_at TIMESTAMPTZ DEFAULT NOW(),\n  updated_at TIMESTAMPTZ DEFAULT NOW()\n);\n\n-- Soft deletes\nALTER TABLE users ADD COLUMN deleted_at TIMESTAMPTZ;\n\n-- Indexes\nCREATE INDEX idx_users_email ON users(email);\nCREATE INDEX idx_users_created ON users(created_at DESC);\n```\n\n### Query Patterns\n```sql\n-- Pagination with cursor\nSELECT * FROM posts\nWHERE created_at < $cursor\nORDER BY created_at DESC\nLIMIT 20;\n\n-- Efficient counting\nSELECT reltuples::bigint AS estimate\nFROM pg_class WHERE relname = 'users';\n```\n\n## Authentication\n\n### JWT Pattern\n```typescript\ninterface TokenPayload {\n  sub: string;      // User ID\n  iat: number;      // Issued at\n  exp: number;      // Expiration\n  scope: string[];  // Permissions\n}\n\nfunction verifyToken(token: string): TokenPayload {\n  return jwt.verify(token, SECRET) as TokenPayload;\n}\n```\n\n### Middleware\n```typescript\nasync function authenticate(req: Request, res: Response, next: Next) {\n  const token = req.headers.authorization?.replace('Bearer ', '');\n  if (!token) {\n    return res.status(401).json({ error: 'Unauthorized' });\n  }\n\n  try {\n    req.user = verifyToken(token);\n    next();\n  } catch {\n    res.status(401).json({ error: 'Invalid token' });\n  }\n}\n```\n\n## Caching Strategy\n\n```typescript\n// Cache-aside pattern\nasync function getUser(id: string): Promise<User> {\n  const cached = await redis.get(`user:${id}`);\n  if (cached) return JSON.parse(cached);\n\n  const user = await db.users.findById(id);\n  await redis.setex(`user:${id}`, 3600, JSON.stringify(user));\n  return user;\n}\n\n// Cache invalidation\nasync function updateUser(id: string, data: Partial<User>) {\n  await db.users.update(id, data);\n  await redis.del(`user:${id}`);\n}\n```\n\n## Rate Limiting\n\n```typescript\nconst limiter = rateLimit({\n  windowMs: 60 * 1000,  // 1 minute\n  max: 100,             // 100 requests per window\n  keyGenerator: (req) => req.ip,\n  handler: (req, res) => {\n    res.status(429).json({ error: 'Too many requests' });\n  }\n});\n```\n\n## Observability\n\n- **Logging**: Structured JSON logs with request IDs\n- **Metrics**: Request latency, error rates, queue depths\n- **Tracing**: Distributed tracing with correlation IDs\n- **Health checks**: `/health` and `/ready` endpoints","tags":["backend","development","agent","skills","moizibnyousaf","agent-skills","claude-code","cli","codex","cursor","developer-tools","productivity"],"capabilities":["skill","source-moizibnyousaf","skill-backend-development","topic-agent-skills","topic-claude-code","topic-cli","topic-codex","topic-cursor","topic-developer-tools","topic-productivity"],"categories":["Ai-Agent-Skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/MoizIbnYousaf/Ai-Agent-Skills/backend-development","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add MoizIbnYousaf/Ai-Agent-Skills","source_repo":"https://github.com/MoizIbnYousaf/Ai-Agent-Skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1044 github stars · SKILL.md body (3,139 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-02T18:52:54.186Z","embedding":null,"createdAt":"2026-04-18T21:56:08.621Z","updatedAt":"2026-05-02T18:52:54.186Z","lastSeenAt":"2026-05-02T18:52:54.186Z","tsv":"'/health':382 '/ready':384 '/users':33,37,41,46,52,58,63,70 '1':82,338 '100':87,341,342 '1000':337 '20':85,193 '255':131 '3600':307 '401':258,269 '429':353 '60':336 'add':150 'alter':147 'api':5,19,28 'architectur':8,25 'asid':279 'async':240,281,314 'authent':207,242 'await':289,300,303,321,325 'backend':2,4,23,26 'backend-develop':1 'bearer':253 'bigint':198 'cach':274,278,288,294,297,312 'cache-asid':277 'catch':267 'check':381 'class':203 'code':92 'column':151 'const':249,287,298,332 'convent':31 'correl':378 'count':195 'creat':38,72,114,135,156,164,168,171,184,189 'cursor':179,186 'data':79,319,324 'databas':7,20,104 'db.users.findbyid':301 'db.users.update':322 'default':124,138,143 'delet':57,60,146,152 'depth':373 'desc':173,191 'design':6,18,29,107 'detail':98 'develop':3,15,27 'distribut':375 'driven':14 'effici':194 'email':100,129,160,163 'endpoint':385 'error':88,91,94,260,271,355,370 'estim':200 'exp':221 'expir':223 'field':99 'format':77,89,103 'full':50 'function':227,241,282,315 'gen':125 'get':32,40,43,62 'getus':283 'handler':349 'health':380 'iat':217 'id':42,47,53,59,113,117,122,216,284,292,302,306,317,323,328,366,379 'id/posts':64,71 'idx':158,166 'index':155,157,165 'input':97 'interfac':211 'invalid':96,102,272,313 'issu':219 'json':78,90,259,270,354,362 'json.parse':296 'json.stringify':308 'jwt':208 'jwt.verify':233 'key':120 'keygener':346 'latenc':369 'limit':192,330,333 'list':34,65 'log':360,363 'mani':357 'max':340 'messag':95,101 'meta':80 'metric':367 'microservic':9 'middlewar':238 'minut':339 'next':247,248,266 'null':134 'number':218,222 'observ':359 'order':187 'page':81,84 'pagin':177 'partial':56,320 'patch':51 'pattern':10,105,175,209,280 'per':83,344 'permiss':226 'pg':202 'post':36,68,69,73,182 'primari':119 'promis':286 'public':112,121 'put':45 'queri':174 'queue':372 'random':126 'rate':329,371 'ratelimit':334 'redis.del':326 'redis.get':290 'redis.setex':304 'relnam':205 'reltupl':197 'replac':252 'req':243,347,350 'req.headers.authorization':251 'req.ip':348 'req.user':263 'request':244,343,358,365,368 'res':245,351 'res.status':257,268,352 'respons':76,246 'rest':30 'return':232,256,295,310 'schema':21,106 'scope':224 'secret':235 'select':180,196 'serial':118 'skill' 'skill-backend-development' 'soft':145 'source-moizibnyousaf' 'sql':108,176 'strategi':275 'string':214,225,230,285,318 'structur':361 'sub':213 'system':24 'tabl':115,148 'test':13 'test-driven':12 'timestamptz':137,142,154 'token':229,234,250,255,265,273 'tokenpayload':212,231,237 'topic-agent-skills' 'topic-claude-code' 'topic-cli' 'topic-codex' 'topic-cursor' 'topic-developer-tools' 'topic-productivity' 'total':86 'trace':374,376 'tri':262 'typescript':210,239,276,331 'unauthor':261 'uniqu':128,132 'updat':48,54,140 'updateus':316 'use':16,109 'user':35,39,44,49,55,61,66,75,116,149,159,162,167,170,206,215,291,299,305,309,311,327 'uuid':110,123,127 'valid':93 'varchar':130 'verifytoken':228,264 'window':345 'windowm':335","prices":[{"id":"0a7c6cc1-9bd4-4021-9ada-a695703fc61b","listingId":"11d8171e-66bc-40f2-848f-cfa56f45a832","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"MoizIbnYousaf","category":"Ai-Agent-Skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:56:08.621Z"}],"sources":[{"listingId":"11d8171e-66bc-40f2-848f-cfa56f45a832","source":"github","sourceId":"MoizIbnYousaf/Ai-Agent-Skills/backend-development","sourceUrl":"https://github.com/MoizIbnYousaf/Ai-Agent-Skills/tree/main/skills/backend-development","isPrimary":false,"firstSeenAt":"2026-04-18T21:56:08.621Z","lastSeenAt":"2026-05-02T18:52:54.186Z"}],"details":{"listingId":"11d8171e-66bc-40f2-848f-cfa56f45a832","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"MoizIbnYousaf","slug":"backend-development","github":{"repo":"MoizIbnYousaf/Ai-Agent-Skills","stars":1044,"topics":["agent-skills","claude-code","cli","codex","cursor","developer-tools","productivity"],"license":"mit","html_url":"https://github.com/MoizIbnYousaf/Ai-Agent-Skills","pushed_at":"2026-04-13T19:04:12Z","description":"my curated agent skills library ","skill_md_sha":"c4cac1eb24d369398d57c75e9abc319abf369ed5","skill_md_path":"skills/backend-development/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/MoizIbnYousaf/Ai-Agent-Skills/tree/main/skills/backend-development"},"layout":"multi","source":"github","category":"Ai-Agent-Skills","frontmatter":{"name":"backend-development","license":"MIT","description":"Backend API design, database architecture, microservices patterns, and test-driven development. Use for designing APIs, database schemas, or backend system architecture."},"skills_sh_url":"https://skills.sh/MoizIbnYousaf/Ai-Agent-Skills/backend-development"},"updatedAt":"2026-05-02T18:52:54.186Z"}}