{"id":"1018a9f2-dcf5-490d-8e85-f89ed418192e","shortId":"2JbWbe","kind":"skill","title":"Api Patterns","tagline":"Antigravity Awesome Skills skill by Sickn33","description":"# API Patterns\n\n> API design principles and decision-making for 2025.\n> **Learn to THINK, not copy fixed patterns.**\n\n## 🎯 Selective Reading Rule\n\n**Read ONLY files relevant to the request!** Check the content map, find what you need.\n\n---\n\n## 📑 Content Map\n\n| File | Description | When to Read |\n|------|-------------|--------------|\n| `api-style.md` | REST vs GraphQL vs tRPC decision tree | Choosing API type |\n| `rest.md` | Resource naming, HTTP methods, status codes | Designing REST API |\n| `response.md` | Envelope pattern, error format, pagination | Response structure |\n| `graphql.md` | Schema design, when to use, security | Considering GraphQL |\n| `trpc.md` | TypeScript monorepo, type safety | TS fullstack projects |\n| `versioning.md` | URI/Header/Query versioning | API evolution planning |\n| `auth.md` | JWT, OAuth, Passkey, API Keys | Auth pattern selection |\n| `rate-limiting.md` | Token bucket, sliding window | API protection |\n| `documentation.md` | OpenAPI/Swagger best practices | Documentation |\n| `security-testing.md` | OWASP API Top 10, auth/authz testing | Security audits |\n\n---\n\n## 🔗 Related Skills\n\n| Need | Skill |\n|------|-------|\n| API implementation | `@[skills/backend-development]` |\n| Data structure | `@[skills/database-design]` |\n| Security details | `@[skills/security-hardening]` |\n\n---\n\n## ✅ Decision Checklist\n\nBefore designing an API:\n\n- [ ] **Asked user about API consumers?**\n- [ ] **Chosen API style for THIS context?** (REST/GraphQL/tRPC)\n- [ ] **Defined consistent response format?**\n- [ ] **Planned versioning strategy?**\n- [ ] **Considered authentication needs?**\n- [ ] **Planned rate limiting?**\n- [ ] **Documentation approach defined?**\n\n---\n\n## ❌ Anti-Patterns\n\n**DON'T:**\n- Default to REST for everything\n- Use verbs in REST endpoints (/getUsers)\n- Return inconsistent response formats\n- Expose internal errors to clients\n- Skip rate limiting\n\n**DO:**\n- Choose API style based on context\n- Ask about client requirements\n- Document thoroughly\n- Use appropriate status codes\n\n---\n\n## Script\n\n| Script | Purpose | Command |\n|--------|---------|---------|\n| `scripts/api_validator.py` | API endpoint validation | `python scripts/api_validator.py <project_path>` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["api","patterns","antigravity","awesome","skills","sickn33"],"capabilities":["skill","source-sickn33","category-antigravity-awesome-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/api-patterns","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"install_from":"skills.sh"}},"qualityScore":"0.300","qualityRationale":"deterministic score 0.30 from registry signals: · indexed on skills.sh · published under sickn33/antigravity-awesome-skills","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:v1","enrichmentVersion":1,"enrichedAt":"2026-04-25T09:40:44.243Z","embedding":null,"createdAt":"2026-04-18T20:36:03.246Z","updatedAt":"2026-04-25T09:40:44.243Z","lastSeenAt":"2026-04-25T09:40:44.243Z","tsv":"'/getusers':196 '10':129 '2025':19 'action':248 'anti':182 'anti-pattern':181 'antigrav':3 'api':1,9,11,61,72,101,108,118,127,138,152,156,159,211,231 'api-style.md':52 'applic':242 'approach':179 'appropri':223 'ask':153,216,286 'audit':133 'auth':110 'auth.md':104 'auth/authz':130 'authent':173 'awesom':4 'base':213 'best':122 'boundari':294 'bucket':115 'category-antigravity-awesome-skills' 'check':37 'checklist':148 'choos':60,210 'chosen':158 'clarif':288 'clear':261 'client':205,218 'code':69,225 'command':229 'consid':88,172 'consist':166 'consum':157 'content':39,45 'context':163,215 'copi':24 'criteria':297 'data':141 'decis':16,58,147 'decision-mak':15 'default':186 'defin':165,180 'describ':249,265 'descript':48 'design':12,70,83,150 'detail':145 'document':124,178,220 'documentation.md':120 'endpoint':195,232 'envelop':74 'environ':277 'environment-specif':276 'error':76,203 'everyth':190 'evolut':102 'execut':244 'expert':282 'expos':201 'file':32,47 'find':41 'fix':25 'format':77,168,200 'fullstack':96 'graphql':55,89 'graphql.md':81 'http':66 'implement':139 'inconsist':198 'input':291 'intern':202 'jwt':105 'key':109 'learn':20 'limit':177,208,253 'make':17 'map':40,46 'match':262 'method':67 'miss':299 'monorepo':92 'name':65 'need':44,136,174 'oauth':106 'openapi/swagger':121 'output':271 'overview':252 'owasp':126 'pagin':78 'passkey':107 'pattern':2,10,26,75,111,183 'permiss':292 'plan':103,169,175 'practic':123 'principl':13 'project':97 'protect':119 'purpos':228 'python':234 'rate':176,207 'rate-limiting.md':113 'read':28,30,51 'relat':134 'relev':33 'request':36 'requir':219,290 'resourc':64 'respons':79,167,199 'response.md':73 'rest':53,71,188,194 'rest.md':63 'rest/graphql/trpc':164 'return':197 'review':283 'rule':29 'safeti':94,293 'schema':82 'scope':264 'script':226,227 'scripts/api_validator.py':230,235 'secur':87,132,144 'security-testing.md':125 'select':27,112 'sickn33':8 'skill':5,6,135,137,240,256 'skills/backend-development':140 'skills/database-design':143 'skills/security-hardening':146 'skip':206 'slide':116 'source-sickn33' 'specif':278 'status':68,224 'stop':284 'strategi':171 'structur':80,142 'style':160,212 'substitut':274 'success':296 'task':260 'test':131,280 'think':22 'thorough':221 'token':114 'top':128 'treat':269 'tree':59 'trpc':57 'trpc.md':90 'ts':95 'type':62,93 'typescript':91 'uri/header/query':99 'use':86,191,222,238,254 'user':154 'valid':233,279 'verb':192 'version':100,170 'versioning.md':98 'vs':54,56 'window':117 'workflow':246","prices":[{"id":"6795dd1e-0590-4d9d-af69-f5b8b13cc75f","listingId":"1018a9f2-dcf5-490d-8e85-f89ed418192e","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:36:03.246Z"}],"sources":[{"listingId":"1018a9f2-dcf5-490d-8e85-f89ed418192e","source":"github","sourceId":"sickn33/antigravity-awesome-skills/api-patterns","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/api-patterns","isPrimary":false,"firstSeenAt":"2026-04-18T21:31:09.510Z","lastSeenAt":"2026-04-25T06:50:27.338Z"},{"listingId":"1018a9f2-dcf5-490d-8e85-f89ed418192e","source":"skills_sh","sourceId":"sickn33/antigravity-awesome-skills/api-patterns","sourceUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/api-patterns","isPrimary":true,"firstSeenAt":"2026-04-18T20:36:03.246Z","lastSeenAt":"2026-04-25T09:40:44.243Z"}],"details":{"listingId":"1018a9f2-dcf5-490d-8e85-f89ed418192e","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"api-patterns","source":"skills_sh","category":"antigravity-awesome-skills","skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/api-patterns"},"updatedAt":"2026-04-25T09:40:44.243Z"}}