[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6G97Q0R73VEWMX4SYCCCG2Z":3,"skill-same:01M6G97Q0R73VEWMX4SYCCCG2Z":71},{"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":17,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":13,"repositoryHtmlUrl":42,"repositoryHomepageUrl":6,"ownerHtmlUrl":43,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":44,"install":45,"resources":58},"01M6G97Q0R73VEWMX4SYCCCG2Z","fastapi-router-py",null,"Create FastAPI routers with CRUD operations, authentication dependencies, and proper response models. Use when building REST API endpoints, creating new routes, implementing CRUD operations, or adding authenticated endpoints in FastAPI applications.","ricardoaevt\u002Fnexus-roms","ricardoaevt","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F164531880?v=4","01M6DGFGSV6CF9AKPHABBREC79","01M6DGFGYNNPJVDFQA05TDPSBN",0,"AGPL-3.0","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Ffastapi-router-py\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"fastapi router py","fastapi","router","create","authentication","REST","applications","api","crud","operations","use","models","endpoints","dependencies","rest api","with","2026-11-10 10:12:30",false,"---\nname: fastapi-router-py\ndescription: Create FastAPI routers with CRUD operations, authentication dependencies, and proper response models. Use when building REST API endpoints, creating new routes, implementing CRUD operations, or adding authenticated endpoints in FastAPI applications.\n---\n\n# FastAPI Router\n\nCreate FastAPI routers following established patterns with proper authentication, response models, and HTTP status codes.\n\n## Quick Start\n\nCopy the template from [assets\u002Ftemplate.py](assets\u002Ftemplate.py) and replace placeholders:\n- `{{ResourceName}}` → PascalCase name (e.g., `Project`)\n- `{{resource_name}}` → snake_case name (e.g., `project`)\n- `{{resource_plural}}` → plural form (e.g., `projects`)\n\n## Authentication Patterns\n\n```python\n# Optional auth - returns None if not authenticated\ncurrent_user: Optional[User] = Depends(get_current_user)\n\n# Required auth - raises 401 if not authenticated\ncurrent_user: User = Depends(get_current_user_required)\n```\n\n## Response Models\n\n```python\n@router.get(\"\u002Fitems\u002F{item_id}\", response_model=Item)\nasync def get_item(item_id: str) -> Item:\n    ...\n\n@router.get(\"\u002Fitems\", response_model=list[Item])\nasync def list_items() -> list[Item]:\n    ...\n```\n\n## HTTP Status Codes\n\n```python\n@router.post(\"\u002Fitems\", status_code=status.HTTP_201_CREATED)\n@router.delete(\"\u002Fitems\u002F{id}\", status_code=status.HTTP_204_NO_CONTENT)\n```\n\n## Integration Steps\n\n1. Create router in `src\u002Fbackend\u002Fapp\u002Frouters\u002F`\n2. Mount in `src\u002Fbackend\u002Fapp\u002Fmain.py`\n3. Create corresponding Pydantic models\n4. Create service layer if needed\n5. Add frontend API functions\n","# FastAPI Router\n\nCreate FastAPI routers following established patterns with proper authentication, response models, and HTTP status codes.\n\n## Quick Start\n\nCopy the template from [assets\u002Ftemplate.py](assets\u002Ftemplate.py) and replace placeholders:\n- `{{ResourceName}}` → PascalCase name (e.g., `Project`)\n- `{{resource_name}}` → snake_case name (e.g., `project`)\n- `{{resource_plural}}` → plural form (e.g., `projects`)\n\n## Authentication Patterns\n\n```python\n# Optional auth - returns None if not authenticated\ncurrent_user: Optional[User] = Depends(get_current_user)\n\n# Required auth - raises 401 if not authenticated\ncurrent_user: User = Depends(get_current_user_required)\n```\n\n## Response Models\n\n```python\n@router.get(\"\u002Fitems\u002F{item_id}\", response_model=Item)\nasync def get_item(item_id: str) -> Item:\n    ...\n\n@router.get(\"\u002Fitems\", response_model=list[Item])\nasync def list_items() -> list[Item]:\n    ...\n```\n\n## HTTP Status Codes\n\n```python\n@router.post(\"\u002Fitems\", status_code=status.HTTP_201_CREATED)\n@router.delete(\"\u002Fitems\u002F{id}\", status_code=status.HTTP_204_NO_CONTENT)\n```\n\n## Integration Steps\n\n1. Create router in `src\u002Fbackend\u002Fapp\u002Frouters\u002F`\n2. Mount in `src\u002Fbackend\u002Fapp\u002Fmain.py`\n3. Create corresponding Pydantic models\n4. Create service layer if needed\n5. Add frontend API functions\n",{"name":5,"description":7},"main","d41309588593cee5c2fb44062474efc3a99fbcb6",".agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Ffastapi-router-py","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms","https:\u002F\u002Fgithub.com\u002Fricardoaevt","2026-03-23 00:05:03",{"source":8,"skillName":5,"commands":46,"prompt":56,"zipAvailable":57},[47,50,53],{"tool":48,"command":49},"npx","npx skills add ricardoaevt\u002Fnexus-roms --skill fastapi-router-py",{"tool":51,"command":52},"bunx","bunx skills add ricardoaevt\u002Fnexus-roms --skill fastapi-router-py",{"tool":54,"command":55},"pnpm","pnpm dlx skills add ricardoaevt\u002Fnexus-roms --skill fastapi-router-py","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Ffastapi-router-py\u002FSKILL.md",true,[59,65],{"path":60,"resourceType":61,"resourceTypeDesc":62,"sizeBytes":63,"sourceHtmlUrl":64},"assets\u002Ftemplate.py","SCRIPT","脚本",4518,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Ffastapi-router-py\u002Fassets\u002Ftemplate.py",{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Facceptance-criteria.md","REFERENCE","参考文档",16233,"https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fmicrosoft_skills\u002F.github\u002Fplugins\u002Fazure-sdk-python\u002Fskills\u002Ffastapi-router-py\u002Freferences\u002Facceptance-criteria.md",[72,95,110,125,136,145],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":76,"licenseFileUrl":6,"sourceHtmlUrl":77,"categories":78,"keywords":79,"publishedAt":34},"01M6G9HYKQRK6HBKVTZM3258M3","openspec-propose","Propose a new change with all artifacts generated in one step. Use when the user wants to quickly describe what they want to build and get a complete proposal with design, specs, and tasks ready for implementation.","MIT","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-propose\u002FSKILL.md",[],[80,81,82,83,33,84,85,86,87,88,89,28,90,91,92,93,94],"openspec propose","openspec","cli","generated","proposal","complete","get","build","implementation","ready","user","artifacts","tasks","change","design",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":76,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":34},"01M6G9HV9V20WFCHYVSDNQMJVK","openspec-new-change","Start a new OpenSpec change using the experimental artifact workflow. Use when the user wants to create a new feature, fix, or modification with a structured step-by-step approach.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-new-change\u002FSKILL.md",[],[81,102,93,103,82,104,105,106,28,90,21,107,108,109,33],"openspec new change","new feature","structured","artifact","workflow","start","fix","feature",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":76,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":34},"01M6G9HRF6R89QZXGSFC9DRQW3","openspec-explore","Enter explore mode - a thinking partner for exploring ideas, investigating problems, and clarifying requirements. Use when the user wants to think through something before or during a change.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-explore\u002FSKILL.md",[],[117,118,81,28,119,82,93,90,120,121,122,123,124],"openspec explore","explore","partner","think","thinking partner","thinking","ideas","requirements",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":76,"licenseFileUrl":6,"sourceHtmlUrl":129,"categories":130,"keywords":131,"publishedAt":34},"01M6G9HP3APFCXZG7XRWBMM524","openspec-continue-change","Continue working on an OpenSpec change by creating the next artifact. Use when the user wants to progress their change, create the next artifact, or continue their workflow.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-continue-change\u002FSKILL.md",[],[81,132,133,93,106,82,21,90,28,134,105,135],"continue","openspec continue change","next","progress",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":76,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":34},"01M6G9HKT3WMSDBSKA7YM4MSSQ","openspec-archive-change","Archive a completed change in the experimental workflow. Use when the user wants to finalize and archive a change after implementation is complete.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-archive-change\u002FSKILL.md",[],[143,81,144,93,82,106,90,28,88,85],"openspec archive change","archive",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":76,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":34},"01M6G9HHEG0RJK4E0YTVZZ6A8T","openspec-apply-change","Implement tasks from an OpenSpec change. Use when the user wants to start implementing, continue implementation, or work through tasks.","https:\u002F\u002Fgithub.com\u002Fricardoaevt\u002Fnexus-roms\u002Fblob\u002Fmain\u002F.agent\u002Fskills\u002Fopenspec-apply-change\u002FSKILL.md",[],[81,93,152,153,92,107,132,154,90,28,88,82],"openspec apply change","implement","work"]