{"id":689,"date":"2021-02-03T05:58:00","date_gmt":"2021-02-02T16:58:00","guid":{"rendered":"https:\/\/blog.wiseowls.co.nz\/?p=689"},"modified":"2021-04-03T06:15:04","modified_gmt":"2021-04-02T17:15:04","slug":"breaking-monolith-data-flows","status":"publish","type":"post","link":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/","title":{"rendered":"Breaking down the Monolith: data flows"},"content":{"rendered":"\n<p>One common pattern we see repeatedly is how clients are transitioning their <a href=\"https:\/\/en.wikipedia.org\/wiki\/Monolithic_system\">monolithic applications<\/a> to distributed architectures. The challenge here is doing that while still retaining the data on the main database for consistency and other coupled systems. Implementing microservices gets a bit tricky. We suddenly need to have a copy of the data and keep it consistent.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Initial snapshot<\/h2>\n\n\n\n<p>Often teams take this exercise to rethink the way they handle schema. So cloning tables to the new database and calling it a day does not cut it. We&#8217;d like to be able to use new microservice not only as a fancy DB proxy, but also as a model for future state. Since we don&#8217;t always know what the future state will look like, ingesting all data in one go might be too much of commitment. The is where incrementally building microservice-specific data store comes in handy. As requests flow through our system, we&#8217;d fulfill them from the Monolith but keep a copy and massage for efficiency.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"589\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-1024x589.png\" alt=\"Caching data with Microservice flow chart\" class=\"wp-image-698\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-1024x589.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-300x172.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-768x441.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-1536x883.png 1536w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-1568x901.png 1568w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot.png 1604w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Updates go here<\/h2>\n\n\n\n<p>There&#8217;s no question we need some way to let our microservices know that something has gotten updated. A message queue of sorts will likely do. So next time the Monolith updates an entity we&#8217;re interested in &#8211; we&#8217;d get a message:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"818\" height=\"504\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-2.png\" alt=\"Flow chart outlining Monolith leading update feeds for microservices to build up own data snapshots\" class=\"wp-image-699\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-2.png 818w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-2-300x185.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-2-768x473.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">As we progress<\/h2>\n\n\n\n<p>The schematic above can be extended to allow monolith be part of receiving the update feeds too. When we are ready to commit to moving System of Record to a microservice &#8211; we reverse the flow and have Monolith listen to changes and update &#8220;master&#8221; record accordingly. Only at that time it won&#8217;t be &#8220;master&#8221; anymore.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-3-1024x576.png\" alt=\"Flow chart outlining Monolith becoming a subscriber to update feeds for consistency and backward compatibility\" class=\"wp-image-700\" srcset=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-3-1024x576.png 1024w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-3-300x169.png 300w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-3-768x432.png 768w, https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/04\/initial-snapshot-Page-3.png 1048w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Choice of Message Bus<\/h2>\n\n\n\n<p>We&#8217;d need to employ a proper message bus for this flow to work. There are <a href=\"https:\/\/landscape.cncf.io\/card-mode?category=streaming-messaging&amp;grouping=category\">quite a few options<\/a> out there and picking a particular one without considering trade-offs is meaningless. We prefer to keep our options limited to <a href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a> and <a href=\"https:\/\/kafka.apache.org\/\">Kafka<\/a>. A few reasons to pick one or another are: community size, delivery guarantees and scalability constraints. Stay tuned for an overview of those!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One common pattern we see repeatedly is how clients are transitioning their monolithic applications to distributed architectures. The challenge here is doing that while still retaining the data on the main database for consistency and other coupled systems. Implementing microservices gets a bit tricky. We suddenly need to have a copy of the data and &hellip; <a href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Breaking down the Monolith: data flows&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":674,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[11],"tags":[49],"class_list":["post-689","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev","tag-microservices"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Breaking down the Monolith: data flows - Timur and associates<\/title>\n<meta name=\"description\" content=\"Breaking monolith applications into microservices is often an iterative process. Setting up consistent data flows helps build it faster.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Breaking down the Monolith: data flows - Timur and associates\" \/>\n<meta property=\"og:description\" content=\"Breaking monolith applications into microservices is often an iterative process. Setting up consistent data flows helps build it faster.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/\" \/>\n<meta property=\"og:site_name\" content=\"Timur and associates\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-02T16:58:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-04-02T17:15:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"396\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"timur\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@TimurKh\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/\"},\"author\":{\"name\":\"timur\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"headline\":\"Breaking down the Monolith: data flows\",\"datePublished\":\"2021-02-02T16:58:00+00:00\",\"dateModified\":\"2021-04-02T17:15:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/\"},\"wordCount\":345,\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"keywords\":[\"microservices\"],\"articleSection\":[\"Development\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/\",\"name\":\"Breaking down the Monolith: data flows - Timur and associates\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"datePublished\":\"2021-02-02T16:58:00+00:00\",\"dateModified\":\"2021-04-02T17:15:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\"},\"description\":\"Breaking monolith applications into microservices is often an iterative process. Setting up consistent data flows helps build it faster.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"contentUrl\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/wp-content\\\/uploads\\\/2021\\\/02\\\/cloud-computing-2001090_1920.jpg\",\"width\":1500,\"height\":396,\"caption\":\"header image, cloud computing\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/index.php\\\/2021\\\/02\\\/03\\\/breaking-monolith-data-flows\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Breaking down the Monolith: data flows\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#website\",\"url\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/\",\"name\":\"Timur and associates\",\"description\":\"Notes of an IT contractor\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blog.wiseowls.co.nz\\\/#\\\/schema\\\/person\\\/34d0ed30d573b5bc317ea990bd2e0c59\",\"name\":\"timur\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg\",\"caption\":\"timur\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/TimurKh\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Breaking down the Monolith: data flows - Timur and associates","description":"Breaking monolith applications into microservices is often an iterative process. Setting up consistent data flows helps build it faster.","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:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/","og_locale":"en_US","og_type":"article","og_title":"Breaking down the Monolith: data flows - Timur and associates","og_description":"Breaking monolith applications into microservices is often an iterative process. Setting up consistent data flows helps build it faster.","og_url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/","og_site_name":"Timur and associates","article_published_time":"2021-02-02T16:58:00+00:00","article_modified_time":"2021-04-02T17:15:04+00:00","og_image":[{"width":1500,"height":396,"url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","type":"image\/jpeg"}],"author":"timur","twitter_card":"summary_large_image","twitter_creator":"@TimurKh","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#article","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/"},"author":{"name":"timur","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"headline":"Breaking down the Monolith: data flows","datePublished":"2021-02-02T16:58:00+00:00","dateModified":"2021-04-02T17:15:04+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/"},"wordCount":345,"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","keywords":["microservices"],"articleSection":["Development"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/","url":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/","name":"Breaking down the Monolith: data flows - Timur and associates","isPartOf":{"@id":"https:\/\/blog.wiseowls.co.nz\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#primaryimage"},"image":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","datePublished":"2021-02-02T16:58:00+00:00","dateModified":"2021-04-02T17:15:04+00:00","author":{"@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59"},"description":"Breaking monolith applications into microservices is often an iterative process. Setting up consistent data flows helps build it faster.","breadcrumb":{"@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#primaryimage","url":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","contentUrl":"https:\/\/blog.wiseowls.co.nz\/wp-content\/uploads\/2021\/02\/cloud-computing-2001090_1920.jpg","width":1500,"height":396,"caption":"header image, cloud computing"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.wiseowls.co.nz\/index.php\/2021\/02\/03\/breaking-monolith-data-flows\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.wiseowls.co.nz\/"},{"@type":"ListItem","position":2,"name":"Breaking down the Monolith: data flows"}]},{"@type":"WebSite","@id":"https:\/\/blog.wiseowls.co.nz\/#website","url":"https:\/\/blog.wiseowls.co.nz\/","name":"Timur and associates","description":"Notes of an IT contractor","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.wiseowls.co.nz\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.wiseowls.co.nz\/#\/schema\/person\/34d0ed30d573b5bc317ea990bd2e0c59","name":"timur","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","url":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/23d55e17d4f0990ee4d12bc6e5dcfb58a292934efd62a185756876379e780b16?s=96&r=pg","caption":"timur"},"sameAs":["https:\/\/x.com\/TimurKh"]}]}},"_links":{"self":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/689","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/comments?post=689"}],"version-history":[{"count":4,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/689\/revisions"}],"predecessor-version":[{"id":702,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/posts\/689\/revisions\/702"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media\/674"}],"wp:attachment":[{"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/media?parent=689"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/categories?post=689"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.wiseowls.co.nz\/index.php\/wp-json\/wp\/v2\/tags?post=689"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}