{"id":96438,"date":"2024-10-22T08:00:00","date_gmt":"2024-10-22T15:00:00","guid":{"rendered":""},"modified":"2025-06-02T07:33:32","modified_gmt":"2025-06-02T14:33:32","slug":"detect-and-react-intelligently-to-changes-in-data-with-drasi","status":"publish","type":"post","link":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/","title":{"rendered":"Detect and react intelligently to changes in data with Drasi"},"content":{"rendered":"\n<p>Organizations often need to take some action when data stored in a database changes, or, conversely, when it doesn\u2019t change as expected. Why? Because the data is a representation of the current state of the world, and businesses need to adapt when changes occur. Reacting to changes lets them respond faster, streamline processes, improve experiences, and gain a competitive edge.&nbsp;<\/p>\n\n\n\n<p>Implementing solutions to detect changes across multiple data sources, evaluate those changes to meet specific conditions, and integrate with downstream systems to act on the data can be complex and costly. These solutions usually support critical business processes and, therefore, must be secure, resilient, and meet latency expectations. In our experience, they are often brittle and custom-built, lacking generalization for reuse, which leads to repeated engineering and infrastructure efforts.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"drasi-a-data-change-processing-platform\">Drasi: A data change processing platform&nbsp;<\/h2>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"816\" height=\"428\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Logo-1.jpg\" alt=\"Drasi logo\" class=\"wp-image-96481\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Logo-1.jpg 816w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Logo-1-388x204.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Logo-1-768x403.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Logo-1-450x236.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Logo-1-650x341.jpg 650w\" sizes=\"auto, (max-width: 816px) 100vw, 816px\" \/><\/figure>\n\n\n\n<p>Recognizing an opportunity for innovation, we set out to make detecting and reacting intelligently to data changes easy and cost-effective to implement, manage, and maintain. We envisioned a unified platform built from the ground up to achieve this goal, one that enhances and integrates with existing technologies commonly used in similar solutions. Our goal was to create a platform that appeals to developers building event-driven solutions that include the need to detect and react to change, a category of solution we are calling \u2018change-driven solutions\u2019. We also hope to appeal to data infrastructure architects and operations teams seeking to simplify and optimize how development teams in large organizations integrate real-time change detection into their data systems.&nbsp;<\/p>\n\n\n\n<p>The result is <a href=\"https:\/\/drasi.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Drasi<\/a>, a data change processing platform, which we are excited to release as an <a href=\"https:\/\/github.com\/drasi-project\" target=\"_blank\" rel=\"noreferrer noopener\">open-source project on GitHub<\/a>. Although not yet ready for production use, we believe Drasi has matured to the point where its features, reliability, and performance support experimentation across a wide range of change-driven use cases. <a href=\"https:\/\/azure.microsoft.com\/en-us\/blog\/drasi-microsofts-newest-open-source-project-simplifies-change-detection-and-reaction-in-complex-systems\/\" target=\"_blank\" rel=\"noreferrer noopener\">This initial release<\/a>, part of our incubation project, marks the beginning of what we hope will be active collaboration with an open-source community of experienced developers, architects, and operations teams. Together, we aim to make Drasi the default choice for building change-driven solutions and establish it as a common component of data infrastructures globally.&nbsp;<\/p>\n\n\n<div class=\"wp-block-msxcm-cta-block\" data-moray data-bi-an=\"CTA Block\">\n\t<div class=\"card d-block mx-ng mx-md-0\">\n\t\t<div class=\"row no-gutters material-color-brand-dark\">\n\n\t\t\t\t\t\t\t<div class=\"col-md-4\">\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003-1024x560.png\" class=\"card-img img-object-cover\" alt=\"\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003-1024x560.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003-388x212.png 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003-768x420.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003-450x246.png 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003-650x356.webp 650w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/WIN23_PRO_Acer_Concept_D_Office_003.webp 1170w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"d-flex col-md\">\n\t\t\t\t<div class=\"card-body align-self-center p-4 p-md-5\">\n\t\t\t\t\t\n\t\t\t\t\t<h2>Drasi<\/h2>\n\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<p>Making it easy and efficient to detect and react to changes in databases<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"link-group\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/drasi.io\/\" class=\"btn btn-link text-decoration-none p-0\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<span>Read the documentation<\/span>\n\t\t\t\t\t\t\t\t<span class=\"glyph-append glyph-append-chevron-right glyph-append-xsmall\"><\/span>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n\n\n\n<p>This introductory post will focus on the core concepts of Drasi, and its major components such as Sources, Continuous Queries, and Reactions. As shown in the diagram below, Drasi Sources connect to the change logs and feeds of data sources and pass relevant changes to Continuous Queries. Continuous Queries produce perpetually accurate result sets based on the evaluation of incoming changes. Reactions subscribe to one or more Continuous Queries and trigger meaningful reactions.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"294\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Expanded-1.jpg\" alt=\"Drasi diagram showing sources being monitored by continuous queries and producing reactions to various services.\" class=\"wp-image-96487\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Expanded-1.jpg 900w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Expanded-1-388x127.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Expanded-1-768x251.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Expanded-1-450x147.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Expanded-1-650x212.jpg 650w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>For more information on Drasi\u2019s architecture and technical capabilities, visit <a href=\"https:\/\/drasi.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Drasi Docs<\/a>.&nbsp;<\/p>\n\n\n\n<p>Drasi capabilities include:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Full containerization; runs on a Kubernetes cluster. This cluster can scale as needed and can be run on-premises or in the cloud.<\/li>\n\n\n\n<li>Management through a command line interface (CLI) or application programming interface (API) as well as integration with the Open Telemetry.<\/li>\n\n\n\n<li>Developer-friendly with the Visual Studio Code IDE and browser-based tools to write and test Continuous Queries (described below).<\/li>\n\n\n\n<li>Support for data sources such as PostgreSQL and Azure Event Hubs. Customization for new sources and actions is also supported.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"continuous-queries\">Continuous Queries&nbsp;<\/h2>\n\n\n\n<p>Continuous Queries are at the core of Drasi. As the name implies, these queries run continuously. To understand what is unique about them, it helps to contrast them with <em>instantaneous queries<\/em>\u202fthat developers are accustomed to running against databases.&nbsp;<\/p>\n\n\n\n<p>These instantaneous queries reflect the data at that specific moment, missing any changes made afterward until the query is run again. Running the same query periodically may yield different results due to data changes between runs. To understand what has changed, you need to compare the new results with the previous ones\u2014a common but inefficient technique known as database polling.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"235\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi2.jpg\" alt=\"An instantaneous query involves sending a request to a database and quickly receiving the relevant information as a result.\" class=\"wp-image-96448\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi2.jpg 900w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi2-388x101.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi2-768x201.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi2-450x118.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi2-650x170.jpg 650w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>Drasi makes database polling obsolete by providing Continuous Queries that automatically detect and react to data changes as they occur. After the initial startup process (bootstrapping), a Continuous Query queries the source databases once to establish the initial state and then never needs to query them again. This means that as changes happen, the Continuous Query precisely identifies which result elements have been added, updated, or deleted without repeatedly accessing the source databases. It generates a detailed description of these changes\u2014a Query Result Change\u2014that Drasi uses to drive subsequent actions with Reactions. This makes it feasible to use databases directly, eliminating the overhead of copying data to replicas or analytics platforms. <\/p>\n\n\n\n<p>Once started, Continuous Queries run continuously until they are stopped, maintaining an up-to-date query result. This allows you to also request the current query result at any point in time, providing immediate visibility into the data without imposing additional load on the source databases.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"315\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi3.jpg\" alt=\"Data changes in the databases are captured by continuous queries, and the Query Result Change is triggered when it differs from the Query result set.\" class=\"wp-image-96449\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi3.jpg 900w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi3-388x136.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi3-768x269.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi3-450x158.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi3-650x228.jpg 650w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>Unlike some stream analytics solutions that require time-windowed aggregation or delays, Continuous Queries update their results immediately without such delays. This ensures full visibility of all changes, allowing you to react to each one as it occurs.&nbsp;<\/p>\n\n\n\n<p>Currently, Drasi&#8217;s Continuous Queries are written in a subset of the Cypher Query Language, augmented with custom functions for Drasi-specific features. We chose Cypher to encourage thinking in terms of entities (nodes) and their relationships (relations), allowing users to express Continuous Queries more directly. We felt its syntax better supports this approach than other options.&nbsp;<\/p>\n\n\n\n<p>When creating change-driven solutions with Drasi, it helps to define the questions you&#8217;re trying to answer and the specific events you want to observe. You can precisely specify what you want to monitor without limiting yourself to data from a single table or database. You then translate this description into a Continuous Query. For example:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An online order and delivery system must identify orders ready for pickup and notify their associated driver.<\/li>\n\n\n\n<li>A smart building maintenance application needs to detect spaces that don\u2019t match the temperature preferences of occupants.<\/li>\n\n\n\n<li>An employee risk management service must notify managers when their employees are located near a dangerous incident.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>The following Cypher query uses the example of the employee risk management service to describe how a Continuous Query works.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"409\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Cypher-Query-Example.jpg\" alt=\"A screen shot of sample Cypher query language using Match, Where, and Return.\" class=\"wp-image-96488\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Cypher-Query-Example.jpg 900w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Cypher-Query-Example-388x176.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Cypher-Query-Example-768x349.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Cypher-Query-Example-450x205.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Cypher-Query-Example-650x295.jpg 650w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>The\u202fquery\u2019s <strong>MATCH<\/strong>\u202fand\u202f<strong>WHERE<\/strong>\u202fclauses identify all\u202femployees\u202flocated in\u202fbuildings\u202fwithin\u202fregions\u202fwhere there are active\u202f\u2019environmental\u2019 incidents with a\u202fseverity\u202flevel of \u2018critical\u2019 or \u2018extreme\u2019. This means any combination of connected nodes with the required property values are included in the query result.&nbsp;<\/p>\n\n\n\n<p>The\u202f<strong>RETURN<\/strong>\u202fclause outputs the name and email address of the at-risk employee and their manager, along with details about the incident and its region. This defines the schema for results generated by the Continuous Query.&nbsp;<\/p>\n\n\n\n<p>Notice that you don&#8217;t specify the data sources within the query itself; instead, source information is provided as metadata for the Continuous Query. When you create a Continuous Query, you need to provide metadata that tells Drasi which data sources the Continuous Query depends on, how to integrate data from different sources, whether data needs transformation prior to integration, and which index implementation to use for storing the state Drasi maintains for the Continuous Query.&nbsp;<\/p>\n\n\n\n<p>Continuous Queries currently support the following capabilities:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Extensive support for the standard Cypher Query Language, based on the OpenCypher specification.<\/li>\n\n\n\n<li>Integration of data from multiple sources, including both graph and relational databases such as Microsoft SQL Server, PostgreSQL, and Azure Cosmos DB.<\/li>\n\n\n\n<li>Aggregation functions such as count, sum, average, min, and max across connected elements.<\/li>\n\n\n\n<li>Access to historical values to compare data over time and aggregate values within specific time ranges.<\/li>\n\n\n\n<li>Functions to detect the absence of change, eliminating the need to implement schedulers and timeouts.&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"drasi-sources\">Drasi Sources&nbsp;<\/h2>\n\n\n\n<p>Sources serve as an integration point with existing software systems, establishing connectivity to the sources of change. A Drasi Source continuously monitors the change log or feed generated by a data repository and processes relevant low-level change events that are then forwarded to each\u202fContinuous Query\u202fsubscribed to the Source. Sources also enable Continuous Queries to query data during their initial bootstrap process.&nbsp;<\/p>\n\n\n\n<p>Drasi Sources are available for the following technologies:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>PostgreSQL<\/strong><\/li>\n\n\n\n<li><strong>Azure Cosmos DB<\/strong><\/li>\n\n\n\n<li><strong>SQL Server<\/strong><\/li>\n\n\n\n<li><strong>Azure Event Hubs<\/strong><\/li>\n\n\n\n<li><strong>Microsoft Dataverse<\/strong><\/li>\n\n\n\n<li><strong>Kubernetes<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"drasi-reactions\">Drasi Reactions&nbsp;<\/h2>\n\n\n\n<p>The final component of Drasi is the Reaction-reusable components that integrate Drasi with downstream systems and act upon observed changes.&nbsp;<\/p>\n\n\n\n<p>When a Continuous Query receives a source change event that alters its result set, Drasi generates a Query Result Change notification detailing the changes. These notifications are sent to all Reactions subscribed to that Continuous Query. The Reactions determine what action to take based on the result set&#8217;s semantics and details in the notification. For example, in the at-risk employee scenario:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>New employee added to the result set<\/strong>: They have just been identified as at risk. We notify the employee about the incident and inform their manager with the details.<\/li>\n\n\n\n<li><strong>Employee removed from the set<\/strong>: They are no longer considered at risk. We notify the employee and their manager that the immediate risk has passed.<\/li>\n\n\n\n<li><strong>Data about an employee modified<\/strong>: They are still at risk, but their situation has changed. We update the employee and the manager with the new information.&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>Depending on the organization&#8217;s email integration, we might use an Azure Event Grid or Storage Queue Reaction. Alternatively, the organization could write a custom Reaction that integrates directly with their email services.&nbsp;<\/p>\n\n\n\n<p>Currently, Drasi provides Reactions to connect to:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Azure Event Grid<\/strong><\/li>\n\n\n\n<li><strong>Azure Storage Queue<\/strong><\/li>\n\n\n\n<li><strong>SignalR<\/strong><\/li>\n\n\n\n<li><strong>PostgreSQL<\/strong><\/li>\n\n\n\n<li><strong>SQL Server<\/strong><\/li>\n\n\n\n<li><strong>Microsoft Dataverse<\/strong><\/li>\n\n\n\n<li><strong>Debug (developer tool to debug Continuous Queries)&nbsp;<\/strong><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"fleet-management-using-drasi\">Fleet management using Drasi&nbsp;<\/h2>\n\n\n\n<p>To demonstrate Drasi&#8217;s real-world applicability, we developed a proof of concept with our <a href=\"https:\/\/learn.microsoft.com\/en-us\/industry\/mobility\/architecture\/ra-mobility-connected-fleets\" target=\"_blank\" rel=\"noreferrer noopener\">connected fleet<\/a> partners to enhance fleet administrators&#8217; operational task management. Administrators need to swiftly respond to urgent vehicle events and process real-time telemetry to anticipate maintenance needs. The existing solution requires multiple integrations with event processing and analytics systems before extracting valuable insights. Drasi was integrated into the Fleet Integration layer as a central hub for system integration.&nbsp;<\/p>\n\n\n\n<p>In the Drasi-based solution, telemetry events are processed to alert administrators when immediate action is needed and notify them as vehicles approach maintenance milestones. The solution employs two Drasi Sources: one ingests events from an Azure Event Hub &#8220;vehicle event&#8221; namespace, and the other connects to Dynamics 365 for vehicle maintenance history and asset details.&nbsp;<\/p>\n\n\n\n<p>We created two Continuous Queries subscribing to these sources for continuous data streams. In the alerting scenario, telemetry events are evaluated against conditions in the first query; if an event contains a matching engine malfunction error code, the result set updates immediately. In the notification scenario, a notification is sent when a vehicle nears a predefined distance since its last maintenance (for example, 10,000 km.) The Continuous Query performs a linear regression on the odometer value, compares it with the maintenance interval for that vehicle model, and updates the result set to predict if service is needed within the next 30 days.&nbsp;<\/p>\n\n\n\n<p>A single Drasi Reaction triggers Internet of Things (IoT) alerts in Dynamics 365 Field Service for immediate action events and upcoming maintenance notifications. This Reaction monitors updates in the Continuous Queries&#8217; result sets, taking context-aware actions based on incoming events.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"304\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Connected-Fleet-Example-1.jpg\" alt=\"Diagram showing how data from Dynamics 365 and Event Hubs are pushed through Drasi to allow for immediate alerts to the Field Service team.\" class=\"wp-image-96489\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Connected-Fleet-Example-1.jpg 900w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Connected-Fleet-Example-1-388x131.jpg 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Connected-Fleet-Example-1-768x259.jpg 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Connected-Fleet-Example-1-450x152.jpg 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/10\/Drasi-Connected-Fleet-Example-1-650x220.jpg 650w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n\n\n\n<p>By integrating Drasi, we created a comprehensive and versatile solution that addresses multiple scenarios while allowing for quick updates to adapt to evolving operational and business requirements.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"learn-more-and-join-the-community\">Learn more and join the community<\/h2>\n\n\n\n<p>Drasi is an open-source project licensed under the Apache 2.0 license. Join our growing community to collaborate, innovate, and shape the future of Drasi with fellow developers. For more information and to get involved, <a href=\"https:\/\/drasi.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">visit our website<\/a> and GitHub repository.&nbsp;&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Contribute code<\/strong>: Visit our <a href=\"https:\/\/github.com\/drasi-project\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub organization<\/a> and improve Drasi by contributing to our codebase and documentation or build a Source or Reaction to expand the ecosystem.<\/li>\n\n\n\n<li><strong>Share feedback<\/strong>: Report bugs and suggest new features to enhance Drasi\u2019s capabilities. Your insights are invaluable in making Drasi more user-friendly, secure, resilient, and cost effective. Join us on our <a href=\"https:\/\/aka.ms\/drasidiscord\" target=\"_blank\" rel=\"noreferrer noopener\">Discord server<\/a>.<\/li>\n\n\n\n<li><strong>Spread the word<\/strong>: Advocate for Drasi and help us build a vibrant community of users and contributors.<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-msxcm-cta-block\" data-moray data-bi-an=\"CTA Block\">\n\t<div class=\"card d-block mx-ng mx-md-0\">\n\t\t<div class=\"row no-gutters material-color-brand-light bg-fabric-white\">\n\n\t\t\t\t\t\t\t<div class=\"col-md-4\">\n\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030-1024x560.png\" class=\"card-img img-object-cover\" alt=\"\" srcset=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030-1024x560.png 1024w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030-388x212.png 388w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030-768x420.png 768w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030-450x246.png 450w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030-650x356.webp 650w, https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_030.webp 1170w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t<div class=\"d-flex col-md\">\n\t\t\t\t<div class=\"card-body align-self-center p-4 p-md-5\">\n\t\t\t\t\t\n\t\t\t\t\t<h2>Open Source<\/h2>\n\n\t\t\t\t\t<div class=\"mb-3\">\n\t\t\t\t\t\t<p>Enabling Microsoft products and services to bring choice, technology and community to our customers<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"link-group\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/opensource.microsoft.com\/\" class=\"btn btn-link text-decoration-none p-0\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<span>Get involved<\/span>\n\t\t\t\t\t\t\t\t<span class=\"glyph-append glyph-append-chevron-right glyph-append-xsmall\"><\/span>\n\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\t\t\t\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>This introductory post will focus on the core concepts of Drasi, and its major components such as Sources.<\/p>\n","protected":false},"author":6191,"featured_media":95465,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"msxcm_post_with_no_image":false,"ep_exclude_from_search":false,"_classifai_error":"","_classifai_text_to_speech_error":"","footnotes":""},"post_tag":[308,2271,136,158,166,223,224],"content-type":[346],"topic":[2239,2240,2246],"programming-languages":[2268],"coauthors":[2587,2588],"class_list":["post-96438","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-azure-kubernetes-service","tag-community-partners","tag-github","tag-kubernetes","tag-azure","tag-visual-studio","tag-visual-studio-code","content-type-news","topic-analytics","topic-application-development","topic-iot","programming-languages-rust","review-flag-2-1593580437-411","review-flag-integ-1593580288-449","review-flag-inter-1680213152-551","review-flag-iot-1680213327-385","review-flag-never-1593580314-283","review-flag-new-1593580248-669"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Detect and react intelligently to changes in data with Drasi | Microsoft Open Source Blog<\/title>\n<meta name=\"description\" content=\"Join our growing Open Source community to collaborate, innovate, and shape the future of Drasi with fellow developers. Learn more.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Detect and react intelligently to changes in data with Drasi | Microsoft Open Source Blog\" \/>\n<meta property=\"og:description\" content=\"Join our growing Open Source community to collaborate, innovate, and shape the future of Drasi with fellow developers. Learn more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Open Source Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-10-22T15:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-02T14:33:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Allen Jones, Nandita Valsan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:site\" content=\"@OpenAtMicrosoft\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Allen Jones, Nandita Valsan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 min read\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\"},\"author\":[{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/allen-jones\/\",\"@type\":\"Person\",\"@name\":\"Allen Jones\"},{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/author\/nandita-valsan\/\",\"@type\":\"Person\",\"@name\":\"Nandita Valsan\"}],\"headline\":\"Detect and react intelligently to changes in data with Drasi\",\"datePublished\":\"2024-10-22T15:00:00+00:00\",\"dateModified\":\"2025-06-02T14:33:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\"},\"wordCount\":2028,\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp\",\"keywords\":[\"Azure Kubernetes Service\",\"Community\/partners\",\"GitHub\",\"Kubernetes\",\"Microsoft Azure\",\"Visual Studio\",\"Visual Studio Code\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\",\"name\":\"Detect and react intelligently to changes in data with Drasi | Microsoft Open Source Blog\",\"isPartOf\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp\",\"datePublished\":\"2024-10-22T15:00:00+00:00\",\"dateModified\":\"2025-06-02T14:33:32+00:00\",\"description\":\"Join our growing Open Source community to collaborate, innovate, and shape the future of Drasi with fellow developers. Learn more.\",\"breadcrumb\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp\",\"width\":1170,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/opensource.microsoft.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Detect and react intelligently to changes in data with Drasi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#website\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"name\":\"Microsoft Open Source Blog\",\"description\":\"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability\",\"publisher\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#organization\",\"name\":\"Microsoft Open Source Blog\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"contentUrl\":\"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png\",\"width\":259,\"height\":194,\"caption\":\"Microsoft Open Source Blog\"},\"image\":{\"@id\":\"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/OpenAtMicrosoft\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Detect and react intelligently to changes in data with Drasi | Microsoft Open Source Blog","description":"Join our growing Open Source community to collaborate, innovate, and shape the future of Drasi with fellow developers. Learn more.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/","og_locale":"en_US","og_type":"article","og_title":"Detect and react intelligently to changes in data with Drasi | Microsoft Open Source Blog","og_description":"Join our growing Open Source community to collaborate, innovate, and shape the future of Drasi with fellow developers. Learn more.","og_url":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/","og_site_name":"Microsoft Open Source Blog","article_published_time":"2024-10-22T15:00:00+00:00","article_modified_time":"2025-06-02T14:33:32+00:00","og_image":[{"width":1170,"height":640,"url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.png","type":"image\/png"}],"author":"Allen Jones, Nandita Valsan","twitter_card":"summary_large_image","twitter_creator":"@OpenAtMicrosoft","twitter_site":"@OpenAtMicrosoft","twitter_misc":{"Written by":"Allen Jones, Nandita Valsan","Est. reading time":"8 min read"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#article","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/"},"author":[{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/allen-jones\/","@type":"Person","@name":"Allen Jones"},{"@id":"https:\/\/opensource.microsoft.com\/blog\/author\/nandita-valsan\/","@type":"Person","@name":"Nandita Valsan"}],"headline":"Detect and react intelligently to changes in data with Drasi","datePublished":"2024-10-22T15:00:00+00:00","dateModified":"2025-06-02T14:33:32+00:00","mainEntityOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/"},"wordCount":2028,"publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp","keywords":["Azure Kubernetes Service","Community\/partners","GitHub","Kubernetes","Microsoft Azure","Visual Studio","Visual Studio Code"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/","url":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/","name":"Detect and react intelligently to changes in data with Drasi | Microsoft Open Source Blog","isPartOf":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage"},"thumbnailUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp","datePublished":"2024-10-22T15:00:00+00:00","dateModified":"2025-06-02T14:33:32+00:00","description":"Join our growing Open Source community to collaborate, innovate, and shape the future of Drasi with fellow developers. Learn more.","breadcrumb":{"@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#primaryimage","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2024\/06\/CLO19_Ubisoft_Azure_037.webp","width":1170,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/opensource.microsoft.com\/blog\/2024\/10\/22\/detect-and-react-intelligently-to-changes-in-data-with-drasi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/opensource.microsoft.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Detect and react intelligently to changes in data with Drasi"}]},{"@type":"WebSite","@id":"https:\/\/opensource.microsoft.com\/blog\/#website","url":"https:\/\/opensource.microsoft.com\/blog\/","name":"Microsoft Open Source Blog","description":"Open dialogue about openness at Microsoft \u2013 open source, standards, interoperability","publisher":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/opensource.microsoft.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/opensource.microsoft.com\/blog\/#organization","name":"Microsoft Open Source Blog","url":"https:\/\/opensource.microsoft.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","contentUrl":"https:\/\/opensource.microsoft.com\/blog\/wp-content\/uploads\/2019\/08\/Microsoft-Logo.png","width":259,"height":194,"caption":"Microsoft Open Source Blog"},"image":{"@id":"https:\/\/opensource.microsoft.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/OpenAtMicrosoft"]}]}},"msxcm_display_generated_audio":false,"msxcm_animated_featured_image":null,"distributor_meta":false,"distributor_terms":false,"distributor_media":false,"distributor_original_site_name":"Microsoft Open Source Blog","distributor_original_site_url":"https:\/\/opensource.microsoft.com\/blog","push-errors":false,"_links":{"self":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/96438","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/users\/6191"}],"replies":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/comments?post=96438"}],"version-history":[{"count":34,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/96438\/revisions"}],"predecessor-version":[{"id":97517,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/posts\/96438\/revisions\/97517"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media\/95465"}],"wp:attachment":[{"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/media?parent=96438"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/post_tag?post=96438"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/content-type?post=96438"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/topic?post=96438"},{"taxonomy":"programming-languages","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/programming-languages?post=96438"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/opensource.microsoft.com\/blog\/wp-json\/wp\/v2\/coauthors?post=96438"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}