[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CWF54SN15SFG7BASAX79F1":3,"skill-same:01M6CWF54SN15SFG7BASAX79F1":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":33,"publishedAt":41,"linkOnly":42,"markdownContent":43,"markdownBody":44,"frontMatter":45,"refName":48,"commitSha":49,"skillDirectory":5,"forksCount":50,"repositoryHtmlUrl":51,"repositoryHomepageUrl":6,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":53,"install":54,"resources":67},"01M6CWF54SN15SFG7BASAX79F1","api-design",null,"RESTful API design principles and best practices","ffsshhttiikk\u002Fopencode-agents-skills","ffsshhttiikk","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F226346827?v=4","01M6CWD9RR3Y7VRQX3MXYC8FYH","01M6CWD9WVPYAZW0J82G1VKGHY",3,"MIT","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fapi-design\u002FSKILL.md",[17,22,25,30],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":26,"categoryName":27,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":31,"categoryName":32,"taxonomyType":28,"taxonomyTypeDesc":29},"01JBSEEDCAT000000000000032","设计师",[34,35,36,37,38,39,40],"design","api design","api","best practices","api design principles","opencode","design principles","2026-11-10 10:12:30",false,"---\nname: api-design\ndescription: RESTful API design principles and best practices\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  audience: developers\n  category: api-design\n---\n## What I do\n- Design clean REST APIs\n- Choose appropriate HTTP methods\n- Handle resource relationships\n- Implement pagination and filtering\n- Version APIs effectively\n- Document APIs with OpenAPI\n- Handle errors consistently\n- Design for scalability\n\n## When to use me\nWhen designing or implementing REST APIs.\n\n## Resource Design\n```\nResources should be nouns:\n\nGET    \u002Fusers              # List users\nGET    \u002Fusers\u002F{id}         # Get user\nPOST   \u002Fusers              # Create user\nPUT    \u002Fusers\u002F{id}         # Update user\nPATCH  \u002Fusers\u002F{id}         # Partial update\nDELETE \u002Fusers\u002F{id}          # Delete user\n\nSub-resources:\nGET \u002Fusers\u002F{id}\u002Fposts      # User's posts\nGET \u002Fusers\u002F{id}\u002Forders     # User's orders\n\nActions as resources:\nPOST \u002Fusers\u002F{id}\u002Factivate\nPOST \u002Fusers\u002F{id}\u002Fdeactivate\n```\n\n## Response Patterns\n```json\n{\n  \"data\": {},\n  \"meta\": {\n    \"page\": 1,\n    \"per_page\": 20,\n    \"total\": 100\n  },\n  \"links\": {\n    \"self\": \"\u002Fapi\u002Fv1\u002Fusers?page=1\",\n    \"next\": \"\u002Fapi\u002Fv1\u002Fusers?page=2\"\n  }\n}\n\n{\n  \"errors\": [\n    {\n      \"code\": \"VALIDATION_ERROR\",\n      \"message\": \"The email field is required\",\n      \"field\": \"email\",\n      \"status\": 400\n    }\n  ]\n}\n```\n","## What I do\n- Design clean REST APIs\n- Choose appropriate HTTP methods\n- Handle resource relationships\n- Implement pagination and filtering\n- Version APIs effectively\n- Document APIs with OpenAPI\n- Handle errors consistently\n- Design for scalability\n\n## When to use me\nWhen designing or implementing REST APIs.\n\n## Resource Design\n```\nResources should be nouns:\n\nGET    \u002Fusers              # List users\nGET    \u002Fusers\u002F{id}         # Get user\nPOST   \u002Fusers              # Create user\nPUT    \u002Fusers\u002F{id}         # Update user\nPATCH  \u002Fusers\u002F{id}         # Partial update\nDELETE \u002Fusers\u002F{id}          # Delete user\n\nSub-resources:\nGET \u002Fusers\u002F{id}\u002Fposts      # User's posts\nGET \u002Fusers\u002F{id}\u002Forders     # User's orders\n\nActions as resources:\nPOST \u002Fusers\u002F{id}\u002Factivate\nPOST \u002Fusers\u002F{id}\u002Fdeactivate\n```\n\n## Response Patterns\n```json\n{\n  \"data\": {},\n  \"meta\": {\n    \"page\": 1,\n    \"per_page\": 20,\n    \"total\": 100\n  },\n  \"links\": {\n    \"self\": \"\u002Fapi\u002Fv1\u002Fusers?page=1\",\n    \"next\": \"\u002Fapi\u002Fv1\u002Fusers?page=2\"\n  }\n}\n\n{\n  \"errors\": [\n    {\n      \"code\": \"VALIDATION_ERROR\",\n      \"message\": \"The email field is required\",\n      \"field\": \"email\",\n      \"status\": 400\n    }\n  ]\n}\n```\n",{"name":5,"license":14,"metadata":46,"description":7,"compatibility":39},{"audience":47,"category":5},"developers","main","5f7a3e453c98261f93d19a6a7de44ad8f7b72d41",2,"https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk","2026-03-01 06:55:40",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill api-design",{"tool":60,"command":61},"bunx","bunx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill api-design",{"tool":63,"command":64},"pnpm","pnpm dlx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill api-design","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fapi-design\u002FSKILL.md",true,[],[69,80,90,99,109,118],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":41},"01M6CXT9TXDF79BWJTMQAPB49G","xamarin","Xamarin cross-platform development","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fxamarin\u002FSKILL.md",[],[71,76,77,78,39,79],"platform","cross-platform","mobile","development",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":41},"01M6CXT8AD04MFYDA32VW3FKAG","wrangling","Data wrangling fundamentals","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwrangling\u002FSKILL.md",[],[82,87,39,88,89],"data wrangling","science","data",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":41},"01M6CXT717GCN7SRRNPBDP4508","windows","Windows operating system administration and scripting","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwindows\u002FSKILL.md",[],[92,97,39,98],"system","scripting",{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":41},"01M6CXT54K794NMEM3XAPZZDKT","wide-column","Wide-column data model","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column\u002FSKILL.md",[],[106,107,39,108,89],"wide column","databases","model",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":41},"01M6CXT28FMT2P4V9GZE67WA8E","wide-column-stores","Wide-column database stores","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column-stores\u002FSKILL.md",[],[116,107,39,117],"wide column stores","database",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":41},"01M6CXT0D0M0Q4T2N7C2RX7DSN","websockets","WebSocket implementation and best practices","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwebsockets\u002FSKILL.md",[],[120,125,126,127,39,37,128],"websocket","real-time","time","implementation"]