{"id":15548,"date":"2021-07-09T17:12:43","date_gmt":"2021-07-09T15:12:43","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=15548"},"modified":"2023-06-26T15:07:12","modified_gmt":"2023-06-26T13:07:12","slug":"multisystem-interaction-consistency-with-aws-step-functions","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/","title":{"rendered":"How to Manage Multisystem Interaction Consistency with AWS Step Functions"},"content":{"rendered":"\n<p><em>Logistics <\/em>is one of the most advanced areas in ICT and related technologies today. All recent issues arising &#8211; <strong>microservices<\/strong>, coexistence with<strong> legacy systems<\/strong>, <strong>process streamlining<\/strong>, <strong>big data cleansing<\/strong>, <strong>data streaming<\/strong> &#8211; are currently dealt with using code-managed infrastructures.&nbsp;<\/p>\n\n\n\n<p>New services, such as AI-based software, can easily be introduced in this open architecture, its further development securely in the hands of experienced DevOps-focused engineers who constantly target their activity on increasing company value through continuous, yet secure, delivery of new releases for existing software and brand-new code.<\/p>\n\n\n\n<p>That makes logistics and large retail\/supermarket chains probably the best places for a developer to gain experience today.<\/p>\n\n\n\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-6170cd8b wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-undefined uagb-block-2a51b3a7     \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#retail-and-logistics-where-microservices-rule\" class=\"uagb-toc-link__trigger\">Retail and logistics, where microservices rule<\/a><li class=\"uagb-toc__list\"><a href=\"#php-runtimes-for-the-microservice-environment\" class=\"uagb-toc-link__trigger\">PHP runtimes for the microservice environment<\/a><li class=\"uagb-toc__list\"><a href=\"#what-is-saga\" class=\"uagb-toc-link__trigger\">What is Saga?\u00a0<\/a><li class=\"uagb-toc__list\"><a href=\"#relating-unrelated-processes\" class=\"uagb-toc-link__trigger\">Relating unrelated processes<\/a><li class=\"uagb-toc__list\"><a href=\"#backward-recovery\" class=\"uagb-toc-link__trigger\">Backward recovery<\/a><li class=\"uagb-toc__list\"><a href=\"#a-transaction-process-success-story\" class=\"uagb-toc-link__trigger\">A transaction process\u2019 success story<\/a><li class=\"uagb-toc__list\"><a href=\"#conclusions\" class=\"uagb-toc-link__trigger\">Conclusions<\/a><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<h2 class=\"wp-block-heading\" id=\"h-retail-and-logistics-where-microservices-rule\">Retail and logistics, where microservices rule<\/h2>\n\n\n\n<p>This is also the train of thought at <a aria-label=\" (opens in a new tab)\" href=\"http:\/\/codemo.me\/shopfully_techart\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">ShopFully<\/a>, where data sits at the heart of business. ShopFully\u2019s vision is to become the world-leading tech company in drive-to-store and proximity marketing solutions.<\/p>\n\n\n\n<p>What is this company\u2019s business and why is it relevant to a <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/backend-dev\/design-your-developer-career\/\" target=\"_blank\" rel=\"noopener\">developer\u2019s career<\/a>? <strong>ShopFully<\/strong> is a tech company, and a leader in drive-to-store solutions. The company\u2019s mission is to make local shopping easier. The company helps more than 40 million consumers globally to save time and money through in-depth information on nearby stores.&nbsp;<\/p>\n\n\n\n<p>It is a reliable tech partner to over 700 retailers and brands at an international level. These are inspiring numbers for developers who want to grow in a real-world environment.<\/p>\n\n\n\n<p>ShopFully is also a place for retailers and brands to engage with shoppers when they are most open to explore new shopping opportunities. According to their website presentation, ShopFully\u2019s people are the omnichannel shopping experts, measuring and predicting billions of paths from ad exposure to physical store visits.<\/p>\n\n\n\n<p>The company offers a full cycle, including software and marketing development. For hundreds of retailers, this platform offers the best way to reach millions of shoppers with promotions and generate measurable store visits.&nbsp;<\/p>\n\n\n\n<p>ShopFully offers mobile-to-store advertising and profiling solutions specially designed for brands to influence customer behaviour.&nbsp;<\/p>\n\n\n\n<p>The company normally hires qualified developers, currently prioritising full stack competencies (React, Node.js) and classic backend competencies (PHP, Amazon AWS) with a mid- to senior level of expertise and a minimum of 3 years of experience in that role.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-php-runtimes-for-the-microservice-environment\">PHP runtimes for the microservice environment<\/h2>\n\n\n\n<p>ShopFully offers high-level retail software solutions for the biggest global chains. Their ICT offering hosts both legacy and modern solutions in a well-orchestrated workflow management system.<\/p>\n\n\n\n<p>Today\u2019s companies need to update their existing portfolio, adopting a modern and consistent app model for all phases in the app life-cycle. This demands a continuous evaluation of the overall portfolio, in order to schedule updates for good, but old, software.<\/p>\n\n\n\n<p>That leads to a coexistence of both worlds &#8211; old and new &#8211; in this transformational software paradigm. A <strong>migration of classic ICT solutions to modern architectures<\/strong> is underway in ShopFully, together with state-of-the-art, serverless, microservices-based applications.&nbsp;<\/p>\n\n\n\n<p>Most of the old software was written with <strong>PHP <\/strong>language. PHP applications can be included in the world of microservices thanks to mechanisms provided by third-party applications.<\/p>\n\n\n\n<p>The existing PHP-based backend relies on Amazon AWS and <strong>Bref <\/strong>to run and deploy serverless PHP applications.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"568\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/bref-1024x568.jpg\" alt=\"Bref logo\" class=\"wp-image-15558\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/bref-1024x568.jpg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/bref-300x166.jpg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/bref-768x426.jpg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/bref-1536x852.jpg 1536w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/bref-2048x1136.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/bref.sh\/\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Bref<\/a> generates open source, production-ready PHP runtimes for AWS Lambda functions, defining itself as \u201ca higher level stack for a better view of the cloud\u201d.<\/p>\n\n\n\n<p>Creating and running modern and scalable PHP applications is not always as simple as it should be. By using<strong> serverless technologies<\/strong> like AWS Lambda, the focus turns to development, with servers forgotten.<\/p>\n\n\n\n<p>Bref is an open source project that brings full support for PHP and its frameworks to <strong>AWS Lambda<\/strong>. It can be overwhelming getting started with the serverless paradigm, if your starting-point is a classic backend approach.&nbsp;<\/p>\n\n\n\n<p>Bref integrates with the open source Serverless Framework for configuration and deployment. Powerful, yet simple, it offers the best of both worlds.<\/p>\n\n\n\n<p>As well as the Serverless Framework\u2019s documentation and ecosystem, Bref provides complete documentation and examples for PHP applications.<\/p>\n\n\n\n<p>This presents a viable method of integrating legacy applications in a more modern execution environment. Serving new needs, or old needs in a new way, is a demanding challenge that requires a novel approach to data management through many services.&nbsp;<\/p>\n\n\n\n<p>New elements are developed with a different full-stack programming flux that is based on a classic Javascript-powered Node.js\/React approach. Some stages of this process are commonly referred to as a <strong>saga<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-is-saga\">What is Saga?&nbsp;<\/h2>\n\n\n\n<p>Software solutions are very innovative in this large-scale, evolving environment. The overall workflow is the basis on which every piece of software is integrated into the existing portfolio, or modified according to new needs.<\/p>\n\n\n\n<p>The workflow used allows sellers to place purchase orders on behalf of customers and automatically associates and creates the bid campaigns that are the core of the business model.<\/p>\n\n\n\n<p>Collected data have to be leveraged in the way most useful to subsequent needs, losing no part of their identity.<\/p>\n\n\n\n<p>The workflow interacts with different information systems. Communications with separate systems must then be guaranteed while the integrity of the data is maintained. Classic transactional databases are not the reference choice for this task family, that title belongs to distributed systems.<\/p>\n\n\n\n<p>In the microservice-based approach, one structural issue is keeping data consistent across multiple services. Transactions often have a long journey to completion, crossing multiple databases and communicating with multiple services that may be temporarily unavailable.<\/p>\n\n\n\n<p><strong>Local ACID transactions<\/strong> are not always of help in this context. In fact, according to the <a href=\"https:\/\/docs.aws.amazon.com\/prescriptive-guidance\/latest\/patterns\/implement-the-serverless-saga-pattern-by-using-aws-step-functions.html\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">AWS page<\/a> on step functions, <em>\u201cbecause these microservices cannot use a single atomicity, consistency, isolation, durability (ACID) transaction, you might end up with partial transactions. In this case, some control logic is needed to undo the transactions that have already been processed\u201d<\/em>.<\/p>\n\n\n\n<p>The classic approach is the so-called<em> 2PC<\/em> (two-phase commit). This theoretically solves the problem if everything goes to plan, but this particular case is not the standard scenario in the microservice-based world.<\/p>\n\n\n\n<p>How to manage a sequence of local transactions is the issue at hand. The distributed saga pattern is typically used for this purpose. The sequence of events involved is normally referred to as a \u201c<strong>saga<\/strong>\u201d.&nbsp;<\/p>\n\n\n\n<p>It\u2019s amusing to note that the original meaning of the word refers to long, epic stories written mainly in Iceland between 1120 and 1400. In later times, the term is extended to cover the story of a family and its cross-generational problems, as detailed in a report &#8211; and this leads us to an explanation of the modern, technological use!<\/p>\n\n\n\n<p>Returning to transaction-solving, the inclusion of a saga gives rise to the need for management. There are two common ways to achieve saga management, choreography and orchestration.<\/p>\n\n\n\n<p>Each local transaction publishes domain events that trigger local transactions in other services, dealing with a choreography.<\/p>\n\n\n\n<p>An external object known as \u2018<em>the orchestrator<\/em>\u2019 rules all the local transactions to be executed by every called service.<\/p>\n\n\n\n<p>This kind of <strong>process management<\/strong> leads to great results, as well as ensuring rollback if required. This makes saga-based development look like one of the best ways to ensure the consistency of data in a distributed architecture.&nbsp;<\/p>\n\n\n\n<p>ShopFully\u2019s management chose to tackle this issue by using the <strong>Saga Pattern<\/strong>. Using AWS as a Cloud provider, the natural choice was to use <strong>AWS Step Functions <\/strong>to implement the Saga Pattern.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-relating-unrelated-processes\">Relating unrelated processes<\/h2>\n\n\n\n<p>Originally, the purchase flows of ShopFully\u2019sproducts and their delivery were disconnected from each other, with information being passed manually, without automation.<\/p>\n\n\n\n<p>When the two flows were integrated, they involved heterogeneous systems and therefore the problem of maintaining the involved data\u2019s integrity arose. One way to handle this is to use the saga pattern.&nbsp;<\/p>\n\n\n\n<p>When you use the saga pattern, <em>\u201cevery service that performs a transaction publishes an event that triggers subsequent services to perform the next transaction in the chain. This continues until the last transaction in the chain is complete. If a business transaction fails, saga orchestrates a series of compensating transactions that undo the changes that were made by the preceding transactions\u201d<\/em>.<\/p>\n\n\n\n<p>In brief, then, for each operation performed on a system, there is a compensating transaction that cancels the operation performed if something fails on any of the systems involved.<\/p>\n\n\n\n<p>A good <strong>solution <\/strong>to the problem involves:<\/p>\n\n\n\n<ul class=\"is-style-default wp-block-list\">\n<li>Managing long-running transactions<\/li>\n\n\n\n<li>Data consistency maintained by the saga pattern<\/li>\n\n\n\n<li>Serverless and fully managed approach<\/li>\n\n\n\n<li>Infrastructure as code<\/li>\n<\/ul>\n\n\n\n<p>By studying the state of the art in terms of fully-managed solutions, we analyzed the <strong>AWS Step Functions<\/strong>:<\/p>\n\n\n\n<ul class=\"is-style-default wp-block-list\">\n<li>Business logic workflow orchestration service;<\/li>\n\n\n\n<li>Orchestration of distributed services supporting native integrations (less code required);<\/li>\n\n\n\n<li>Run a Lambda, queue a message on Amazon Simple Queue Service (SQS), wait for the result and pass it to another service.<\/li>\n<\/ul>\n\n\n\n<p>ShopFully &#8211; having used AWS for years &#8211; made it natural that they should prefer a solution from this provider. The company\u2019s previous experience with<strong> Serverless Framework<\/strong> made it the preferred choice of tool for deploying and managing serverless architectures.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-backward-recovery\">Backward recovery<\/h2>\n\n\n\n<p><strong>Backward recovery<\/strong> is an advanced solution. The data journey of a ShopFull customer comprises many different solutions that must be kept separate. The information flux crosses many hot points, each of which may have a valid or invalid transaction. Each step must be retraced if one step is invalid.<\/p>\n\n\n\n<p>ShopFully decided to leverage the AWS service infrastructure. Various <em>articles <\/em>reported examples of similar use cases. An excellent piece of work from <a aria-label=\" (opens in a new tab)\" href=\"https:\/\/github.com\/serverless-operations\/serverless-step-functions\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">Yan Cui<\/a> allowed the implementation of Step Functions on a serverless framework thanks to the Serverless Step Functions plugin.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/YanCui-1.jpg\" alt=\"A picture of Yan Cui.\" class=\"wp-image-15560\" width=\"717\" height=\"483\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/YanCui-1.jpg 541w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/YanCui-1-300x202.jpg 300w\" sizes=\"auto, (max-width: 717px) 100vw, 717px\" \/><figcaption class=\"wp-element-caption\">Yan Cui at Serverless Paris in 2018. Credits: <a href=\"https:\/\/blog.revolve.team\/2018\/02\/08\/yan-cui-serverless-observability\/\" target=\"_blank\" aria-label=\"Revolve.team (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Revolve.team<\/a><\/figcaption><\/figure>\n\n\n\n<p>ShopFully found that it was possible to manage Step Functions via the <a href=\"https:\/\/github.com\/serverless-operations\/serverless-step-functions\" target=\"_blank\" aria-label=\" (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">Serverless Framework plugin<\/a> (maintained by <em>Yan Cui<\/em> himself, among others), and therefore implemented an architecture based on Step Functions.<\/p>\n\n\n\n<p>Orders are made by ShopFully\u2019s Order &amp; Campaign Manager team on behalf of customers. Data consistency is ensured thanks to the efforts of ShopFully&#8217;s staff, using Saga Patterns.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-a-transaction-process-success-story\">A transaction process\u2019 success story<\/h2>\n\n\n\n<ul class=\"is-style-default wp-block-list\">\n<li><strong>CreateOrUpdate<\/strong>: the execution plan is quite different both from a workflow point of view and from an internal operations point of view, so a clear separation between create and update cases was made.<\/li>\n\n\n\n<li><strong>PrepareCreate<\/strong>: Step Functions work by \u2018moving\u2019 an execution payload in the flow, in this step it is enriched with necessary information during execution&nbsp;<\/li>\n\n\n\n<li><strong>CreateFlyerGroup<\/strong>: in this step, real logic takes centrestage: flyergroup is a domain object used internally in ShopFully for campaigns setup; it is created in this step.<\/li>\n\n\n\n<li><strong>FootfallCreateOrNot<\/strong>: decisional step; the decision whether or not the subsequent step (CreateFootfallCampaign) must be taken for the specific execution is made now.&nbsp;<\/li>\n\n\n\n<li><strong>CreateFootfallCampaign<\/strong>: in this step the Campaign for Footfall activation is configured; this primarily consists of the creation of another domain object in another systems<\/li>\n\n\n\n<li><strong>CreateCampaign<\/strong>: in this step the real Campaign object is created; this serves as an index for all domain objects created, and encapsulates various information from all the systems involved<\/li>\n\n\n\n<li><strong>UpdateFlyerGroupMetadataOnCreate<\/strong>: a data consolidation step for working internals<\/li>\n\n\n\n<li>SuccessCreateForm: the final step, in which the operation as a whole is marked as a success&nbsp;<\/li>\n\n\n\n<li><strong>End<\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"663\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/stepfunctions_graph-1-1024x663.png\" alt=\"A graph showing process success story. The case of a cascading rollback on failure.\" class=\"wp-image-15549\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/stepfunctions_graph-1-1024x663.png 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/stepfunctions_graph-1-300x194.png 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/stepfunctions_graph-1-768x497.png 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/stepfunctions_graph-1.png 1349w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">A step-by-step process of managing a transaction process in a successful case.<\/figcaption><\/figure>\n\n\n\n<ul class=\"is-style-default wp-block-list\">\n<li><strong>CreateOrUpdate<\/strong>: as previously<\/li>\n\n\n\n<li><strong>PrepareUpdate<\/strong>: the same as PrepareCreate (above), only this time in the update branch with some different inner workings<\/li>\n\n\n\n<li><strong>UpdateFlyerGroup<\/strong>: as for CreateFlyerGroup, except as with PrepareUpdate, we are in update mode, with various internal differences<\/li>\n\n\n\n<li><strong>UpdateFootfallCampaign<\/strong>: replicates CreateFootfallCampaign, although again, in update mode with various internal differences<\/li>\n\n\n\n<li><strong>RollbackFootfallCampaign<\/strong>: in this execution an error occurred during UpdateFootfallCampaign execution, starting the cascading rollbacks, with RollbackFootfallCampaign being the first: in this step the FootfallCampaign object will revert to its original status, which was snapshotted beforehand<\/li>\n\n\n\n<li><strong>RollbackFlyerGroup<\/strong>: in this step the FlyerGroup object will revert to its original status, which was snapshotted beforehand<\/li>\n\n\n\n<li><strong>FailUpdateForms<\/strong>: the final step, where the operation as a whole is marked as a a failure&nbsp;<\/li>\n\n\n\n<li><strong>End<\/strong><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/unnamed.png\" alt=\"The case of a cascading rollback on failure as shown in a graph.\" class=\"wp-image-15550\" width=\"627\" height=\"348\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/unnamed.png 512w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/unnamed-300x166.png 300w\" sizes=\"auto, (max-width: 627px) 100vw, 627px\" \/><figcaption class=\"wp-element-caption\">A step-by-step process managing backward recovery where a failure of some services has occurred.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusions\">Conclusions<\/h2>\n\n\n\n<p>A brave new world of ICT solutions is opening up, on the back of cloud-based patterns. <em>Backward recovery on Amazon services<\/em> is one of the examples that best shows how the real world is being modeled by software in today\u2019s world.<\/p>\n\n\n\n<p>The need for solutions that can be correctly implemented in an <em>ICT environment<\/em>, <strong>hosting legacy and modern applications at the same time<\/strong>, is the challenge that those working in software development chains must face up to now &#8211; and for a long time to come.&nbsp;<\/p>\n\n\n\n<p>New patterns will require consideration in the next few years, and real-world environments such as logistics and retail-based activities ensure that old and new skills are performed in an updated context, giving new scope to the developers job.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Logistics is one of the most advanced areas in ICT and related technologies today. All recent issues arising &#8211; microservices, coexistence with legacy systems, process streamlining, big data cleansing, data streaming &#8211; are currently dealt with using code-managed infrastructures.&nbsp; New services, such as AI-based software, can easily be introduced in this open architecture, its further&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\">Read more<\/a><\/p>\n","protected":false},"author":8,"featured_media":15563,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":8,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[36],"tags":[71,6257,65,75],"collections":[],"class_list":{"0":"post-15548","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend","8":"tag-aws","9":"tag-dataops","10":"tag-php","11":"tag-serverless","12":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Multisystem Interaction Consistency with AWS Step Function<\/title>\n<meta name=\"description\" content=\"In this case study, you&#039;ll see how multisystem interaction consistency ban be managed with AWS Serverless Step Functions. 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:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to Manage Multisystem Interaction Consistency with AWS Step Functions\" \/>\n<meta property=\"og:description\" content=\"In this case study, you&#039;ll see how multisystem interaction consistency ban be managed with AWS Serverless Step Functions. Learn more.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-07-09T15:12:43+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-26T13:07:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"628\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Leo Sorge\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Leo Sorge\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\"},\"author\":{\"name\":\"Leo Sorge\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/99fe84861e17797989e16094aac727d5\"},\"headline\":\"How to Manage Multisystem Interaction Consistency with AWS Step Functions\",\"datePublished\":\"2021-07-09T15:12:43+00:00\",\"dateModified\":\"2023-06-26T13:07:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\"},\"wordCount\":2121,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg\",\"keywords\":[\"AWS\",\"DataOps\",\"PHP\",\"Serverless\"],\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\",\"name\":\"Multisystem Interaction Consistency with AWS Step Function\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg\",\"datePublished\":\"2021-07-09T15:12:43+00:00\",\"dateModified\":\"2023-06-26T13:07:12+00:00\",\"description\":\"In this case study, you'll see how multisystem interaction consistency ban be managed with AWS Serverless Step Functions. Learn more.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg\",\"width\":1200,\"height\":628,\"caption\":\"How to Manage Multisystem Interaction Consistency with AWS Step Functions\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/backend\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"How to Manage Multisystem Interaction Consistency with AWS Step Functions\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/99fe84861e17797989e16094aac727d5\",\"name\":\"Leo Sorge\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/60ef89012822fdaeb014dc2b17dcc78c3a835e1dfe86ede053fa46a91926fd29?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/60ef89012822fdaeb014dc2b17dcc78c3a835e1dfe86ede053fa46a91926fd29?s=96&d=mm&r=g\",\"caption\":\"Leo Sorge\"},\"description\":\"I hold a degree in electronics. I talk and write about science and technology in both real and close-to-real worlds since 1976. I frankly believe that business plan and singularity are excellent starts for science-fiction stories.\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/leo-sorge\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Multisystem Interaction Consistency with AWS Step Function","description":"In this case study, you'll see how multisystem interaction consistency ban be managed with AWS Serverless Step Functions. 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:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/","og_locale":"en_US","og_type":"article","og_title":"How to Manage Multisystem Interaction Consistency with AWS Step Functions","og_description":"In this case study, you'll see how multisystem interaction consistency ban be managed with AWS Serverless Step Functions. Learn more.","og_url":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2021-07-09T15:12:43+00:00","article_modified_time":"2023-06-26T13:07:12+00:00","og_image":[{"width":1200,"height":628,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg","type":"image\/jpeg"}],"author":"Leo Sorge","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Leo Sorge","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/"},"author":{"name":"Leo Sorge","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/99fe84861e17797989e16094aac727d5"},"headline":"How to Manage Multisystem Interaction Consistency with AWS Step Functions","datePublished":"2021-07-09T15:12:43+00:00","dateModified":"2023-06-26T13:07:12+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/"},"wordCount":2121,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg","keywords":["AWS","DataOps","PHP","Serverless"],"articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/","url":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/","name":"Multisystem Interaction Consistency with AWS Step Function","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg","datePublished":"2021-07-09T15:12:43+00:00","dateModified":"2023-06-26T13:07:12+00:00","description":"In this case study, you'll see how multisystem interaction consistency ban be managed with AWS Serverless Step Functions. Learn more.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg","width":1200,"height":628,"caption":"How to Manage Multisystem Interaction Consistency with AWS Step Functions"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/multisystem-interaction-consistency-with-aws-step-functions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"How to Manage Multisystem Interaction Consistency with AWS Step Functions"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/99fe84861e17797989e16094aac727d5","name":"Leo Sorge","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/60ef89012822fdaeb014dc2b17dcc78c3a835e1dfe86ede053fa46a91926fd29?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/60ef89012822fdaeb014dc2b17dcc78c3a835e1dfe86ede053fa46a91926fd29?s=96&d=mm&r=g","caption":"Leo Sorge"},"description":"I hold a degree in electronics. I talk and write about science and technology in both real and close-to-real worlds since 1976. I frankly believe that business plan and singularity are excellent starts for science-fiction stories.","url":"https:\/\/www.codemotion.com\/magazine\/author\/leo-sorge\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-600x600.jpg","author_info":{"display_name":"Leo Sorge","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/leo-sorge\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg",1200,628,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-300x157.jpg",300,157,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-768x402.jpg",768,402,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-1024x536.jpg",1024,536,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg",1200,628,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg",1200,628,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions.jpg",100,52,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/07\/How-to-Manage-Multisystem-Interaction-Consistency-with-AWS-Step-Functions-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Leo Sorge","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/leo-sorge\/"},"uagb_comment_info":0,"uagb_excerpt":"Logistics is one of the most advanced areas in ICT and related technologies today. All recent issues arising &#8211; microservices, coexistence with legacy systems, process streamlining, big data cleansing, data streaming &#8211; are currently dealt with using code-managed infrastructures.&nbsp; New services, such as AI-based software, can easily be introduced in this open architecture, its further&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/15548","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=15548"}],"version-history":[{"count":8,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/15548\/revisions"}],"predecessor-version":[{"id":21626,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/15548\/revisions\/21626"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/15563"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=15548"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=15548"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=15548"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=15548"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}