{"id":9023,"date":"2021-12-02T11:33:55","date_gmt":"2021-12-02T19:33:55","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=9023"},"modified":"2022-10-13T21:09:50","modified_gmt":"2022-10-14T04:09:50","slug":"developing-enterprise-ready-microsoft-teams-apps-with-teams-toolkit-v3-0","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/developing-enterprise-ready-microsoft-teams-apps-with-teams-toolkit-v3-0\/","title":{"rendered":"Developing enterprise-ready Microsoft Teams apps with Teams ToolKit v3.0"},"content":{"rendered":"<p>In the earlier posts, <a href=\"https:\/\/dev.to\/azure\/using-vs-code-toolkit-for-teams-app-development-2o0g\">I introduced Teams Toolkit v2 Developer Preview extension for Visual Studio Code<\/a> that generates scaffolding to help you get started with Microsoft Teams apps. I also <a href=\"https:\/\/dev.to\/azure\/fetching-teams-user-info-from-microsoft-graph-with-teamsfx-sdk-301c\">introduced TeamsFx<\/a>, the core library that lets you handle things like authorization and making Microsoft Graph API calls.<\/p>\n<p>Since then, the tool has evolved with more powerful features and a better user-experience. In this article, I am introducing the new features in the Toolkit v3.0 for developers, especially to empower Teams enterprise developers. \ud83d\ude80<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-1v2.png\"><img decoding=\"async\" class=\"aligncenter wp-image-9051\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-1v2.png\" alt=\"New features of Teams toolkit v3.0\" width=\"800\" height=\"564\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-1v2.png 1020w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-1v2-300x211.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-1v2-768x541.png 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/><\/a><\/p>\n<h3>Quick intro\u2014What are Teams Toolkit &amp; TeamsFx CLI?<\/h3>\n<p>Teams Toolkit is a collection of development tools that helps you to create and deploy Microsoft Teams apps with integrated identity, access to cloud storage, data from Microsoft Graph, and other services in Azure and Microsoft 365.<\/p>\n<p>There are a visual interface tool and a command line interface\u2014With Teams Toolkit extension for Visual Studio, you can take advantage of the familiar VS Code visual interface for Teams app development. Teams Toolkit comes with a Command-line tool, called <em>TeamsFx CLI<\/em>, which lets you run tasks with keyboard-centric experience, as well as enabling CI\/CD scenarios.<\/p>\n<p>Now, let\u2019s take a look at what the new features these tools offer! And if you are looking to learn how to get started with Teams Toolkit and the requirement to start developing Teams apps in general, I\u2019d recommend reading <a href=\"https:\/\/docs.microsoft.com\/microsoftteams\/platform\/get-started\/get-started-overview\">Get started documentation<\/a> on Microsoft Teams developer platform docs first.<\/p>\n<h3>\u2601\ufe0f Multi-environment management<\/h3>\n<p>You typically start developing in your local environment, but sooner or later, you will need to manage multiple environments as you go. Besides your local env, you probably end up having multiple environments, such as, \u201cdev\u201d, \u201cqa\u201d, \u201cstage\u201d, and the production environment to deploy.<\/p>\n<p>Teams Toolkit provides a simple way for you to create and manage multiple environments. When you created a new project with Teams Toolkit, it generates `local` for your local machine configurations, and `dev`, to represent a remote environment configuration by default.<\/p>\n<p>Now, with this new Toolkit, you can enable a more remote environment. \ud83c\udf89<\/p>\n<p>To add an extra environment:<\/p>\n<ol>\n<li>Open a project in Teams Toolkit, and find <strong>Environment <\/strong>on the left pane<\/li>\n<li>Click the <strong>Create new environment<\/strong> button (a little \u201cplus sign\u201d button)<\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-2.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-9025\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-2.png\" alt=\"Image Team toolkit blog image 2\" width=\"480\" height=\"248\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-2.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-2-300x155.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>3. Give a name to the new environment and press Enter key<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-3.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-9027\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-3.png\" alt=\"Image Team toolkit blog image 3\" width=\"480\" height=\"248\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-3.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-3-300x155.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-4.png\"><img decoding=\"async\" class=\"alignnone wp-image-9026 size-full\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-4.png\" alt=\"Give a name to the new environment and press Enter key\" width=\"480\" height=\"248\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-4.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-4-300x155.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>To add more environments, select an existing environment to add a new one. Every time you create an extra environment, the configuration file (`config.&lt;your_new_env&gt;.json` and `azure.parametersm&lt;your_new_env&gt;.json`) will be copied from an existing one.<\/p>\n<p>For more info, please read <a href=\"https:\/\/docs.microsoft.com\/microsoftteams\/platform\/toolkit\/teamsfx-multi-env?WT.mc_id=m365-51046-timura\">Manage multiple environments in Teams Toolkit.<\/a><\/p>\n<h3>\ud83e\udd1d Collaboration among multiple developers<\/h3>\n<p>Have you wished it was easier to collaborate on a Teams app project with your coworkers? Well, I have good news! This much-anticipated feature to manage multiple environments was introduced in the latest version of Teams Toolkit, and it supports project collaborations among multiple developers.<\/p>\n<p>Previously, you needed to manually handle the permissions for Teams and Azure AD. But from now on, the Toolkit handles this for you.<\/p>\n<p>To add a collaborator:<\/p>\n<ol>\n<li>First, make sure you have logged in to both M365 and Azure accounts from the menu under <strong>Account <\/strong>in Teams Toolkit<\/li>\n<li>Under <strong>Development<\/strong>, click <strong>Provision in the cloud<\/strong><\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-5.png\"><img decoding=\"async\" class=\"alignnone wp-image-9034 size-full\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-5.png\" alt=\"Under Development, click Provision in the cloud\" width=\"480\" height=\"248\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-5.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-5-300x155.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>3. Then choose an environment (if you have multiple working environments).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-6.png\"><img decoding=\"async\" class=\"alignnone wp-image-9033 size-full\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-6.png\" alt=\"Choose an environment (if you have multiple working environments)\" width=\"480\" height=\"302\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-6.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-6-300x189.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>You may see some popup notifications. Follow the instructions. This will create necessary cloud resources.<\/p>\n<ol start=\"4\">\n<li>Once the provision process is completed, now you see the Collaborators list is available under <strong>Environment<\/strong>. Click the little <strong>Add M365 Teams App (with AAD App) Owners<\/strong> icon<\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-7.png\"><img decoding=\"async\" class=\"alignnone wp-image-9032 size-full\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-7.png\" alt=\"see the Collaborators list is available under Environment. Click the little Add M365 Teams App (with AAD App) Owners icon\" width=\"480\" height=\"302\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-7.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-7-300x189.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<ol start=\"5\">\n<li>Then enter an email address of the person who you want to invite<\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-8.png\"><img decoding=\"async\" class=\"alignnone wp-image-9031 size-full\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-8.png\" alt=\"Then enter an email address of the person who you want to invite\" width=\"480\" height=\"248\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-8.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-8-300x155.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>6. To view collaborators in the environment, select <strong>List M365 Teams App (with AAD App) Owners<\/strong> button, then collaborators will be listed in the output channel.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-9.png\"><img decoding=\"async\" class=\"alignnone wp-image-9030 size-full\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-9.png\" alt=\"To view collaborators in the environment, select List M365 Teams App (with AAD App) Owners button, then collaborators will be\u00a0listed in the output channel.\" width=\"480\" height=\"248\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-9.png 480w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-9-300x155.png 300w\" sizes=\"(max-width: 480px) 100vw, 480px\" \/><\/a><\/p>\n<p>Once the collaborator joins, they can develop, provision and deploy the project. You can push the project to GitHub, so that your collaborators can clone the repository and work on the project remotely by signing in on their own M365 and Azure account credentials!<\/p>\n<h3>\ud83d\udcaa Provision Azure resources using ARM and Bicep<\/h3>\n<p>One of the last major upgrades of Teams Toolkit (v2) was the features that let you provision Azure resources using infrastructure-as-a-code approach and deploy your apps to Azure.<\/p>\n<p>Now with this new Teams Toolkit v3, you can declaratively provision to author ARM (Azure Resource Manager) template, which is a set of Bicep files that defines the infrastructure and configuration for your project.<\/p>\n<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-resource-manager\/bicep\/overview\">Bicep<\/a> is a domain-specific language (DSL) that uses declarative syntax to deploy Azure resources. The advantage of using Bicep instead of JSON is that Bicep is verbose and uses simpler syntax to develop your ARM templates.<\/p>\n<p>To provision with ARM, you can customize Azure resources by changing these two sets of files:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Teams-toolkit-parameters.png\"><img decoding=\"async\" class=\"alignleft wp-image-9055\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Teams-toolkit-parameters.png\" alt=\"Teams toolkit parameter examples\" width=\"600\" height=\"421\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Teams-toolkit-parameters.png 990w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Teams-toolkit-parameters-300x210.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Teams-toolkit-parameters-768x538.png 768w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>There are predefined parameters and templates. To learn what exactly you can customize and how, please read <a href=\"https:\/\/docs.microsoft.com\/microsoftteams\/platform\/toolkit\/provision?WT.mc_id=m365-51046-timura#customize-resource-provision\">Customize resource provision<\/a> section in the documentation.<\/p>\n<h3>\ud83e\udd7d CI\/ CD support<\/h3>\n<p>In your real-life development process, your team is highly likely to rely on a CI\/CD platform to automate your builds, testing, and deployment.<\/p>\n<p>Now with Toolkit v3, you can enable CI\/CD workflows to automate Teams app development process for multiple environments scenario.<\/p>\n<p>The Toolkit bundles with <strong>TeamsFx CLI<\/strong> that comes with various useful commands for your Teams app development, including the integration for the automated CI\/CD workflows.<\/p>\n<p><em>&gt; To enable CI\/CD workflow in multiple environment, make sure you have TeamsFx CLI version 0.8.0 or above as its dev dependency in the root package.json!<\/em><\/p>\n<p>We prepared sample configuration files, including GitHub, Jenkins, Azure DevOps, and other platforms by scripts (G<a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/blob\/main\/docs\/cicd_insider\/README.md\">rab templates of your choice!)<\/a>, as well as GitHub Actions template, which I will show you how\u2014<\/p>\n<h3>Setting up GitHub Actions<\/h3>\n<p>For example, if you would like to set up CI\/CD flow with GitHub Actions with TeamsFx from the web interface:<\/p>\n<ol>\n<li>On your project repo on GitHub.com, click <strong>Actions <\/strong>tab<\/li>\n<li>Click \u201cset up a workflow yourself\u201d<\/li>\n<li>Copy the <a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/blob\/main\/docs\/cicd_insider\/github-ci-template.yml\">sample file for Continuous Integrations (CI)<\/a><\/li>\n<li>Paste it in the editor<\/li>\n<li>Customize the workflow to fit your scenarios<\/li>\n<li>Click <strong>Start commit<\/strong> button to commit the file<\/li>\n<li>Repeat the process with the <a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/blob\/main\/docs\/cicd_insider\/github-cd-template.yml\">sample file for Continuous Deployment (CD)<\/a><\/li>\n<li>Fill out your M365 and Azure credentials in the CD config file, under the `env` section<\/li>\n<li>Commit the file<\/li>\n<\/ol>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-10.gif\"><img decoding=\"async\" class=\"wp-image-9029 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2021\/12\/Team-toolkit-blog-image-10.gif\" alt=\"Image showing how to create a GitHub Actions with the CI template\" width=\"800\" height=\"478\" \/><\/a><\/p>\n<p>These files are now stored under <strong>.github\/workflows. <\/strong><\/p>\n<p>If you run into a problem with your M365 account permission, please disable the multi-factor authentication from <a href=\"https:\/\/admin.microsoft.com\/\">Microsoft 365 admin center.<\/a> You should be able to change the setting at <strong>Users <\/strong>&gt; <strong>Active users<\/strong> &gt; <strong>Multi-factor<\/strong><strong> authentication<\/strong>.<\/p>\n<p>Also, for Azure account, the account&#8217;s security defaults should be turned off at <a href=\"https:\/\/portal.azure.com\/\">Azure Portal,<\/a> at <strong>Azure Active Directory<\/strong>\u00a0&gt;\u00a0<strong>Properties &gt; Manage security defaults<\/strong>.<\/p>\n<h3>Setting up CI\/CD Pipelines with something else<\/h3>\n<p>If you would like to set up your workflow with other platforms, such as Azure DevOps and Jenkins, please refer to the <a href=\"https:\/\/github.com\/OfficeDev\/TeamsFx\/blob\/main\/docs\/cicd_insider\/README.md\">TeamsFx Readme<\/a>.<\/p>\n<p>&#8212;<\/p>\n<p>I hope these new features give more confidence to your Teams app development workflow and we are looking forward to seeing your amazing apps on production! And please don\u2019t hesitate to drop your comments and feedback here.<\/p>\n<h3>References<\/h3>\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/microsoftteams\/platform\/toolkit\/teams-toolkit-fundamentals\">Teams Toolkit documentation<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/microsoftteams\/platform\/get-started\/get-started-overview\">Get started with Microsoft Teams platform<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Learn about new features in the Teams Toolkit v3.0 to empower Microsoft Teams developers.<\/p>\n","protected":false},"author":77786,"featured_media":9051,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3,128],"tags":[61,22,23,198,44],"class_list":["post-9023","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-graph","category-microsoft-teams","tag-azure","tag-azure-ad","tag-teams-toolkit","tag-teamwork-and-communications","tag-visual-studio-code"],"acf":[],"blog_post_summary":"<p>Learn about new features in the Teams Toolkit v3.0 to empower Microsoft Teams developers.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/9023","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/77786"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=9023"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/9023\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/9051"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=9023"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=9023"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=9023"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}