typespec-api-operations

Add GET, POST, PATCH, and DELETE operations to a TypeSpec API plugin with proper routing, parameters, and adaptive cards

By github · 8,829 installs

npx skills add github/awesome-copilot --skill typespec-api-operations

Source repository · Upstream listing

Add TypeSpec API Operations Add RESTful operations to an existing TypeSpec API plugin for Microsoft 365 Copilot. Adding GET Operations Simple GET List All Items GET with Query Parameter Filter Results GET with Path Parameter Get Single Item GET with Adaptive Card Create the Adaptive Card ( appPackage/item card.json ): Adding POST Operations Simple POST Create Item POST with Confirmation Adding PATCH Operations Simple PATCH Update Item PATCH with Confirmation Adding DELETE Operations Simple DELETE DELETE with Confirmation Complete CRUD Example Define the Service and Models Advanced Features Multiple Query Parameters Header Parameters Custom Response Models Error Responses Testing Prompts After adding operations, test with these prompts: GET Operations: "List all items and show them in a table" "Show me items for user ID 1" "Get the details of item 42" POST Operations: "Create a new item with title 'My Task' for user 1" "Add an item: title 'New Feature', description 'Add login'" PATCH Operations: "Update item 10 with title 'Updated Title'" "Change the status of item 5 to completed" DELETE Operations: "Delete item 99" "Remove the item with ID 15" Best Practices Parameter Naming Use descriptive parameter names: userId not uid Be consistent across operations Use optional parameters ( ? ) for filters Documentation Add JSDoc comments to all operations Describe what each parameter does Document expected responses Models Use @visibility(Lifecycle.Read) for read only fields like id Use @format("date time") for date fields Use union types for enums: "active" "completed" Make optional fields explicit with ? Confirmations Always add confirmations to destructive operations (DELETE, PATCH) Show key details in confirmation body Use warning emoji (⚠️) for irreversible actions Adaptive Cards Keep cards simple and focused Use conditional rendering with ${if(..., ..., 'N/A')} Include action buttons for common next steps Test data binding with actual API responses Routing Use RESTful conventions: GET /items List GET /items/{id} Get one POST /items Create PATCH /items/{id} Update DELETE /items/{id} Delete Group related operations in the same namespace Use nested routes for hierarchical resources Common Issues Issue: Parameter not showing in Copilot Solution : Check parameter is properly decorated with @query , @path , or @body Issue: Adaptive card not rendering Solution : Verify file path in @card decorator and check JSON syntax Issue: Confirmation not appearing Solution : Ensure @capabilities decorator is properly formatted with confirmation object Issue: Model property not appearing in response Solution : Check if property needs @visibility(Lifecycle.Read) or remove it if it should be writable