{"id":2341,"date":"2023-08-28T02:00:00","date_gmt":"2023-08-28T09:00:00","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/azure-sql\/?p=2341"},"modified":"2023-08-25T09:22:05","modified_gmt":"2023-08-25T16:22:05","slug":"rest-endpoint-invocation-is-now-generally-available","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/azure-sql\/rest-endpoint-invocation-is-now-generally-available\/","title":{"rendered":"REST Endpoint Invocation is now Generally Available"},"content":{"rendered":"<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1.png\"><img decoding=\"async\" class=\"alignnone size-full wp-image-2302\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1.png\" alt=\"Image sol1\" width=\"3253\" height=\"1804\" srcset=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1.png 3253w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1-300x166.png 300w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1-1024x568.png 1024w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1-768x426.png 768w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1-1536x852.png 1536w, https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2023\/08\/sol1-2048x1136.png 2048w\" sizes=\"(max-width: 3253px) 100vw, 3253px\" \/><\/a><\/p>\n<h4><em><strong>On behalf of the Engineering and Product Management teams, we are happy to announce that\u00a0External REST Endpoint Invocation is now GA!<\/strong><\/em><\/h4>\n<p>&nbsp;<\/p>\n<h2>What is\u00a0External REST Endpoint Invocation?<\/h2>\n<p><a href=\"https:\/\/learn.microsoft.com\/sql\/relational-databases\/system-stored-procedures\/sp-invoke-external-rest-endpoint-transact-sql?view=azuresqldb-current&amp;tabs=request-headers\" target=\"_blank\" rel=\"noopener\">External REST Endpoint Invocation<\/a> makes it possible for developers to call REST\/GraphQL endpoints from <a href=\"https:\/\/learn.microsoft.com\/sql\/relational-databases\/system-stored-procedures\/sp-invoke-external-rest-endpoint-transact-sql?view=azuresqldb-current&amp;tabs=request-headers#allowed-endpoints\" target=\"_blank\" rel=\"noopener\">other Azure Services<\/a> from right in the Azure SQL Database. With a quick call to the system stored procedure <strong>sp_invoke_external_rest_endpoint<\/strong>, you can have data processed via an Azure Function, update a PowerBI dashboard, or even talk to Cognitive Services. In fact, just before this GA date, we enabled access to OpenAI, Azure Blob Storage, Azure Files, Azure Queue Services and Azure Table Services. This feature also supports header and managed identity authentication, so you can get rid of passing pesky passwords.<\/p>\n<p>Use cases for this feature are many and here are a few to get your creative spark going:<\/p>\n<p><strong>Activate workflows<\/strong><\/p>\n<ul>\n<li>Send an email \/ notification using Azure Logic Apps<\/li>\n<\/ul>\n<p><strong>Data enrichment <\/strong><\/p>\n<ul>\n<li>Determine if a value is an outlier or not using Azure Cognitive services<\/li>\n<li>Perform reverse geocoding using Azure Functions<\/li>\n<li>Call a REST\/GraphQL service to add external information (eg: weather, reviews, etc) to your data<\/li>\n<\/ul>\n<p><strong>Cache invalidation \/ update<\/strong><\/p>\n<ul>\n<li>For cache invalidation or update by calling an Azure Function<\/li>\n<\/ul>\n<p><strong>Start complex processing<\/strong><\/p>\n<ul>\n<li>Call a Durable Function to kick of some complex process<\/li>\n<\/ul>\n<p><strong>Update websites<\/strong><\/p>\n<ul>\n<li>Broadcast a SignalR message<\/li>\n<\/ul>\n<p><strong>Integrate with event-based architectures<\/strong><\/p>\n<ul>\n<li>Send data to Event Hubs for further integration options<\/li>\n<\/ul>\n<p><strong>Create a data stream <\/strong><\/p>\n<ul>\n<li>Send data to Stream Analytics for further investigation\/fraud detection<\/li>\n<\/ul>\n<h2>Endpoints Everywhere!<\/h2>\n<p>Here is the latest list of services that can be used with\u00a0External REST Endpoint Invocation. We are constantly evaluating new ones and if you have any ideas, please let us know.<\/p>\n<p>&nbsp;<\/p>\n<table width=\"634\">\n<tbody>\n<tr>\n<td width=\"317\"><strong>Azure Service<\/strong><\/td>\n<td width=\"317\"><strong>Domain<\/strong><\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Functions<\/td>\n<td width=\"317\">*.azurewebsites.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Apps Service<\/td>\n<td width=\"317\">*.azurewebsites.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure App Service Environment<\/td>\n<td width=\"317\">*.appserviceenvironment.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Static Web Apps<\/td>\n<td width=\"317\">*.azurestaticapps.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Logic Apps<\/td>\n<td width=\"317\">*.logic.azure.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Event Hubs<\/td>\n<td width=\"317\">*.servicebus.windows.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Event Grid<\/td>\n<td width=\"317\">*.eventgrid.azure.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Cognitive Services<\/td>\n<td width=\"317\">*.cognitiveservices.azure.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure OpenAI<\/td>\n<td width=\"317\">*.openai.azure.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">PowerApps \/ Dataverse<\/td>\n<td width=\"317\">*.api.crm.dynamics.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Microsoft Dynamics<\/td>\n<td width=\"317\">*.dynamics.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Container Instances<\/td>\n<td width=\"317\">*.azurecontainer.io<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Azure Container Apps<\/td>\n<td width=\"317\">*.azurecontainerapps.io<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Power BI<\/td>\n<td width=\"317\">api.powerbi.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Microsoft Graph<\/td>\n<td width=\"317\">graph.microsoft.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">Analysis Services<\/td>\n<td width=\"317\">*.asazure.windows.net<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">IoT Central<\/td>\n<td width=\"317\">*.azureiotcentral.com<\/td>\n<\/tr>\n<tr>\n<td width=\"317\">API Management<\/td>\n<td width=\"317\">*.azure-api.net<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2>Getting Started<\/h2>\n<p>Getting started with\u00a0External REST Endpoint Invocation is easy; it&#8217;s just a simple stored procedure you call.<\/p>\n<pre>EXEC @returnValue = sp_invoke_external_rest_endpoint [ @url = ] N'url\u2019 \r\n[ , [ @payload = ] N'json_payload\u2019 ] \r\n[ , [ @headers = ] N'http_headers_as_json_array\u2019 ] \r\n[ , [ @method = ] 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE\u2019 | 'HEAD' ] \r\n[ , [ @timeout = ] seconds ] \r\n[ , [ @credential = ] credential ] \r\n[ , @response OUTPUT ]<\/pre>\n<p>For example, if I wanted to ask ChatGPT &#8220;why is the sky blue&#8221;, I could issue the following T-SQL command:<\/p>\n<pre>declare @url nvarchar(4000) = \r\nN'https:\/\/openaidemo1.openai.azure.com\/openai\/deployments\/talk-to-me-goose\/chat\/completions?api-version=2023-03-15-preview';\r\ndeclare @headers nvarchar(102) = N'{\"api-key\":\"12345,678910,1112\"}'\r\ndeclare @payload nvarchar(max) = N'{\"messages\":[{\"role\":\"system\",\"content\":\"Why is the sky blue?\"}]}'\r\ndeclare int, @response nvarchar(max);\r\n\r\nexec = sp_invoke_external_rest_endpoint \r\n@url = @url,\r\n@method = 'POST',\r\n@headers = @headers,\r\n@payload = @payload,\r\n@timeout = 230,\r\n@response = @response output;\r\n\r\nselect as ReturnCode, @response as Response;<\/pre>\n<p>With the response from ChatGPT being similar to the following:<\/p>\n<pre>\"message\": {\r\n\"role\": \"assistant\",\r\n\"content\": \"The sky appears blue due to a phenomenon called Rayleigh scattering.\r\nWhen sunlight enters Earth's atmosphere, it encounters molecules like nitrogen and oxygen,\r\nwhich are much smaller than the wavelength of visible light. These molecules scatter\r\nshorter wavelengths of light (blue and violet) more than longer wavelengths (red and\r\norange). As a result, the blue light gets scattered in all directions, filling the sky\r\nwith a blue hue.\"\r\n}<\/pre>\n<p>And once you were done asking ChatGPT about life, the universe and lunch, you could call an Azure Function and maybe actually get some work done:<\/p>\n<pre>DECLARE INT, @response NVARCHAR(MAX);\r\n\r\nEXEC = sp_invoke_external_rest_endpoint\r\n@url = N'https:\/\/myfunction.azurewebsites.net\/api\/convertCurrencyFromUSD',\r\n@payload = N'{\"To\":\"Yen\"}',\r\n@method = N'POST',\r\n@response = @response OUTPUT;\r\n\r\nSELECT AS ReturnCode, @response AS Response;<\/pre>\n<p>In this example, I can send a JSON payload to an Azure Function and get some currency converted. I could then take the response to this request and say apply it to a table in my Azure SQL Database by updating a column, row or value.<\/p>\n<p>One last example. This one takes from\u00a0<a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/developing-with-azure-sql-bindings-and-azure-sql-trigger-for-azure-functions\/\" target=\"_blank\" rel=\"noopener\">Drew Skwiers-Koballa&#8217;s blog post<\/a> using Azure Cognitive\u00a0Services. This example is going to pass a string of text to\u00a0Content Moderator and ask it to identify any personal identifying\u00a0information and any profanity. The use case from the blog post is to check entries to a forum before they are posted.<\/p>\n<p>The code is as follows:<\/p>\n<p>&nbsp;<\/p>\n<div>\n<pre><span style=\"color: #292b2c;font-family: Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;font-size: 14.4px;text-align: var(--bs-body-text-align)\">declare @url nvarchar(4000) =\u00a0<\/span>\r\nN'https:\/\/coggsmccoggsface.cognitiveservices.azure.com\/contentmoderator\/moderate\/v1.0\/ProcessText\/Screen\/?language=eng&amp;autocorrect=False&amp;PII=True&amp;listId=&amp;classify=True';\r\ndeclare @headers nvarchar(102) = N'{\"Ocp-Apim-Subscription-Key\":\"1001001sos1001001\",\"Content-Type\" : \"text\/plain\"}'\r\ndeclare @payload nvarchar(max) = N'{\"Is this a crap email abcdef@abcd.com, phone: 6657789887, IP: 255.255.255.255, 1 Microsoft Way, Redmond, WA 98052\"}'\r\ndeclare @ret int, @response nvarchar(max);\r\n\r\nexec @ret = sp_invoke_external_rest_endpoint \r\n\u00a0 \u00a0 @url = @url,\r\n\u00a0 \u00a0 @method = 'POST',\r\n\u00a0 \u00a0 @headers = @headers,\r\n\u00a0 \u00a0 @payload = @payload,\r\n\u00a0 \u00a0 @timeout = 230,\r\n\u00a0 \u00a0 @response = @response output;\r\n\u00a0 \u00a0 \r\nselect @ret as ReturnCode, @response as Response;<\/pre>\n<\/div>\n<p>With the response indicating that yes, there is PII included in the text as well as a potentially profane word:<\/p>\n<div>\n<pre>\u00a0 \u00a0 \u00a0 \u00a0 \"PII\": {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Email\": [\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Detected\": \"abcdef@abcd.com\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"SubType\": \"Regular\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Text\": \"abcdef@abcd.com\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Index\": 23\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"IPA\": [\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"SubType\": \"IPV4\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Text\": \"255.255.255.255\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Index\": 63\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Phone\": [\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"CountryCode\": \"US\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Text\": \"6657789887\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Index\": 47\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Address\": [\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Text\": \"1 Microsoft Way, Redmond, WA 98052\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Index\": 80\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 ],\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"SSN\": []\r\n\u00a0 \u00a0 \u00a0 \u00a0 },\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"Classification\": {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"ReviewRecommended\": true,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Category1\": {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Score\": 0.00040505084325559437\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Category2\": {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Score\": 0.2234508991241455\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 },\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Category3\": {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Score\": 0.9879999756813049\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 },\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"Language\": \"eng\",\r\n\u00a0 \u00a0 \u00a0 \u00a0 \"Terms\": [\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 {\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Index\": 5,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"OriginalIndex\": 12,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"ListId\": 0,\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \"Term\": \"crap\"\r\n\u00a0 \u00a0 \u00a0 \u00a0 \u00a0 \u00a0 }\r\n\u00a0 \u00a0 \u00a0 \u00a0 ],<\/pre>\n<\/div>\n<p>You can find more examples such as using PowerBI and Azure Blob Storage with XML payloads in our <a href=\"https:\/\/github.com\/Azure-Samples\/azure-sql-db-invoke-external-rest-endpoints\" target=\"_blank\" rel=\"noopener\">GitHub Repository<\/a>.<\/p>\n<h2>Thank You<\/h2>\n<p>With your help and feedback, this feature enjoyed a successful private and public preview. The team took your comments seriously and improved\u00a0External REST Endpoint Invocation to better fit the use cases and needs brought to light. But we are not stopping there. We have many more improvements and features we would like to add and as always are seeking your feedback in the process.<\/p>\n<p><span style=\"font-family: inherit\">Let us know if you like this feature, how you are using it, and additional functionality you <\/span>would<span style=\"font-family: inherit\">\u00a0like to see\u00a0<\/span><strong style=\"font-family: inherit\">using the comment section below to give us your feedback and to tell us how you\u2019d like to see this feature evolving,<\/strong>\u00a0or by using the\u00a0<a style=\"font-family: inherit;background-color: #ffffff\" href=\"https:\/\/feedback.azure.com\/d365community\/forum\/04fe6ee0-3b25-ec11-b6e6-000d3a4f0da0\" target=\"_blank\" rel=\"noopener\">Azure SQL and SQL Server feedback portal.<\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Again, thank you!<\/p>\n<p>Engineering and Product Management<\/p>\n<h3>Resources<\/h3>\n<p><a href=\"https:\/\/learn.microsoft.com\/sql\/relational-databases\/system-stored-procedures\/sp-invoke-external-rest-endpoint-transact-sql?view=azuresqldb-current&amp;tabs=request-headers\" target=\"_blank\" rel=\"noopener\">Documentation<\/a><\/p>\n<p><a href=\"https:\/\/github.com\/Azure-Samples\/azure-sql-db-invoke-external-rest-endpoints\" target=\"_blank\" rel=\"noopener\">Examples Repository<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>On behalf of the Engineering and Product Management teams, we are happy to announce that\u00a0External REST Endpoint Invocation is now GA! &nbsp; What is\u00a0External REST Endpoint Invocation? External REST Endpoint Invocation makes it possible for developers to call REST\/GraphQL endpoints from other Azure Services from right in the Azure SQL Database. With a quick call [&hellip;]<\/p>\n","protected":false},"author":95874,"featured_media":2143,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,92,546,576,577],"tags":[510,465,469,30,449,93,410,34],"class_list":["post-2341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure-sql","category-devops","category-github","category-rest","category-rest-endpoint-invocation","tag-azure-sql-database","tag-azuresql","tag-azuresqldb","tag-developers","tag-development","tag-devops","tag-rest","tag-t-sql"],"acf":[],"blog_post_summary":"<p>On behalf of the Engineering and Product Management teams, we are happy to announce that\u00a0External REST Endpoint Invocation is now GA! &nbsp; What is\u00a0External REST Endpoint Invocation? External REST Endpoint Invocation makes it possible for developers to call REST\/GraphQL endpoints from other Azure Services from right in the Azure SQL Database. With a quick call [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/2341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/users\/95874"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/comments?post=2341"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/posts\/2341\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media\/2143"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/media?parent=2341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/categories?post=2341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-json\/wp\/v2\/tags?post=2341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}