{"id":46533,"date":"2014-09-12T02:23:42","date_gmt":"2014-09-11T23:23:42","guid":{"rendered":"https:\/\/www.altoros.com\/blog\/?p=46533"},"modified":"2020-04-14T15:58:38","modified_gmt":"2020-04-14T12:58:38","slug":"net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono","status":"publish","type":"post","link":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/","title":{"rendered":".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono"},"content":{"rendered":"<p><center><\/p>\n<p><a href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-1-installation-on-windows-and-using-iron-foundry\/\">Part 1<\/a> | <a href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-2-prototyping-with-iron-foundry\/\">Part 2<\/a>\u00a0| <strong>Part 3<\/strong><\/p>\n<p><\/center><\/p>\n<p><img decoding=\"async\" class=\"alignright size-full wp-image-46534\" style=\"margin: 15px 0px 0px 25px\" alt=\"\" src=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2019\/09\/mono.jpg\" width=\"120\" \/><\/p>\n<p>In the previous posts, we created a MapReduce application and successfully deployed it to Cloud Foundry using Iron Foundry. This time, we will try to push it to the original Cloud Foundry using a <a href=\"https:\/\/github.com\/cloudfoundry-community\/.net-buildpack\" target=\"_blank\" rel=\"noopener noreferrer\">buildpack<\/a> based on <a href=\"https:\/\/www.mono-project.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Mono<\/a>, an open-source framework that helps to create cross-platform .NET applications.<\/p>\n<p>Although, the buildpack is currently in alpha, it provides all the features we need for the demo. For example, it runs console applications with Cloud Foundry and the lucid64 stack. This means our background worker components for mapping and reducing will most likely work. In addition, the Service Stack endpoints are fully compatible with Mono, so the Web UI component should be just fine.<\/p>\n<p>&nbsp;<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79_2 counter-hierarchy ez-toc-counter ez-toc-transparent ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#Potential_issues_and_solutions\" >Potential issues and solutions<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#The_deployment_process\" >The deployment process<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#Further_reading\" >Further reading<\/a><\/li><\/ul><\/nav><\/div>\n<h3><span class=\"ez-toc-section\" id=\"Potential_issues_and_solutions\"><\/span>Potential issues and solutions<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Still, there are a couple of things that can interfere with deployment. First, a Reducer and a Notifier communicate via sockets, but the .NET Socket.IO Client library is not compatible with Mono, so we cannot use it.<\/p>\n<p>Second, the .NET components in our solution use MongoDB capped collections for communication. Fortunately, since a Notifier is a Node.js application, we were able to add it to the same messages exchange system. This way a Reducer simply produces results without any knowledge about who will handle them and how.<\/p>\n<p>The third issue concerns the Cloud Foundry router implementation, i.e., the settings for the WebSocket protocol. To get a successful handshake, we had to downgrade to XHR-polling.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"The_deployment_process\"><\/span>The deployment process<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>The final step before deployment is updating <code style=\"color: #222222; background-color: #e6e6e6; padding: 1px 2px;\">manifest.yml<\/code> with the Mono buildpack and the lucid64 stack. Once it is done, we are ready to push our .NET application to the original Cloud Foundry.<\/p>\n<pre style=\"padding-left: 30px;\">\r\n---\r\napplications:\r\n- name: ironic\r\nbuildpack: https:\/\/github.com\/cloudfoundry-community\/.net-buildpack\r\nmemory: 256MB\r\nstack: lucid64\r\ninstances: 2\r\npath: .\/ironicweb\/\r\nservices:\r\n- mq\r\n- name: ironicnfier\r\nbuildpack: https:\/\/github.com\/cloudfoundry\/heroku-buildpack-nodejs.git\r\nmemory: 256MB\r\ninstances: 1\r\npath: .\/notifier\/\r\ncommand: node notifier.js\r\nservices:\r\n- mq\r\n- name: reducer\r\nbuildpack: https:\/\/github.com\/cloudfoundry-community\/.net-buildpack\r\nmemory: 256MB\r\nstack: lucid64\r\ninstances: 1\r\nno-route: true\r\npath: .\/reducer\/\r\nservices:\r\n- mq\r\n- name: mapper\r\nbuildpack: https:\/\/github.com\/cloudfoundry-community\/.net-buildpack\r\nmemory: 256MB\r\nstack: lucid64\r\ninstances: 4\r\nno-route: true\r\npath: .\/mapper\/\r\nservices:\r\n- mq\r\n<\/pre>\n<p>This is it. Now, we have two similar MapReduce apps: one <a href=\"http:\/\/ironic.cfapps.io\" target=\"_blank\" rel=\"noopener noreferrer\">deployed<\/a> to Cloud Foundry with Iron Foundry and <a href=\"http:\/\/ironicweb.beta.ironfoundry.me\" target=\"_blank\" rel=\"noopener noreferrer\">another one<\/a> with Mono. However, keep it in mind that when using Mono with Cloud Foundry you are limited to components that support the Mono buildpack.<\/p>\n<p>Iron Foundry and Mono are not the only tools for running .NET apps on Cloud Foundry. Other options exist, too, but they are beyond the scope of this blog post series. If you have tried running .NET apps on Cloud Foundry with Iron Foundry, Mono, or something else, feel free to share your experience in the comments.<\/p>\n<p>&nbsp;<\/p>\n<h3><span class=\"ez-toc-section\" id=\"Further_reading\"><\/span>Further reading<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ul>\n<li><a href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-1-installation-on-windows-and-using-iron-foundry\/\" target=\"_blank\" rel=\"noopener noreferrer\">.NET on Cloud Foundry, Part 1: Installing Cloud Foundry on Windows<\/a><\/li>\n<li style=\"margin-bottom: 6px;\"\"><a href=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-2-prototyping-with-iron-foundry\/\" target=\"_blank\" rel=\"noopener noreferrer\">.NET on Cloud Foundry, Part 2: Prototyping with Iron Foundry<\/a>\n<\/ul>\n<hr \/>\n<p><center><small>This series was written by Alex Makarenko; edited by <a href=\"https:\/\/www.altoros.com\/blog\/author\/volha-kurylionak\/\">Volha Kurylionak<\/a> and <a href=\"https:\/\/www.altoros.com\/blog\/author\/alex\/\">Alex Khizhniak<\/a>.<\/small><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<\/p>\n<p>Part 1 | Part 2\u00a0| Part 3<\/p>\n<\/p>\n<p>In the previous posts, we created a MapReduce application and successfully deployed it to Cloud Foundry using Iron Foundry. This time, we will try to push it to the original Cloud Foundry using a buildpack based on Mono, an open-source framework that helps to [&#8230;]<\/p>\n","protected":false},"author":38,"featured_media":46545,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":"","_links_to":"","_links_to_target":""},"categories":[214],"tags":[873,206],"class_list":["post-46533","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutorials","tag-cloud-native","tag-oss-cloud-foundry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>.NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono | Altoros<\/title>\n<meta name=\"description\" content=\"Learn about the potential issues the deployment may involve, as well as how to address them.\" \/>\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.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono | Altoros\" \/>\n<meta property=\"og:description\" content=\"Part 1 | Part 2\u00a0| Part 3  In the previous posts, we created a MapReduce application and successfully deployed it to Cloud Foundry using Iron Foundry. This time, we will try to push it to the original Cloud Foundry using a buildpack based on Mono, an open-source framework that helps to [...]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/\" \/>\n<meta property=\"og:site_name\" content=\"Altoros\" \/>\n<meta property=\"article:published_time\" content=\"2014-09-11T23:23:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-04-14T12:58:38+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"360\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Alex Makarenko\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Alex Makarenko\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/\",\"url\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/\",\"name\":\".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono | Altoros\",\"isPartOf\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png\",\"datePublished\":\"2014-09-11T23:23:42+00:00\",\"dateModified\":\"2020-04-14T12:58:38+00:00\",\"author\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/e355ca9f2206c0529037e48629e0de4b\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#primaryimage\",\"url\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png\",\"contentUrl\":\"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png\",\"width\":640,\"height\":360},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.altoros.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#website\",\"url\":\"https:\/\/www.altoros.com\/blog\/\",\"name\":\"Altoros\",\"description\":\"Insight\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.altoros.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/e355ca9f2206c0529037e48629e0de4b\",\"name\":\"Alex Makarenko\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/083fdfcbdf4d372139cf32711db57e55f697f43bbb05939609132d3d70590123?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/083fdfcbdf4d372139cf32711db57e55f697f43bbb05939609132d3d70590123?s=96&d=mm&r=g\",\"caption\":\"Alex Makarenko\"},\"url\":\"https:\/\/www.altoros.com\/blog\/author\/alex-makarenko\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono | Altoros","description":"Learn about the potential issues the deployment may involve, as well as how to address them.","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.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/","og_locale":"en_US","og_type":"article","og_title":".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono | Altoros","og_description":"Part 1 | Part 2\u00a0| Part 3  In the previous posts, we created a MapReduce application and successfully deployed it to Cloud Foundry using Iron Foundry. This time, we will try to push it to the original Cloud Foundry using a buildpack based on Mono, an open-source framework that helps to [...]","og_url":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/","og_site_name":"Altoros","article_published_time":"2014-09-11T23:23:42+00:00","article_modified_time":"2020-04-14T12:58:38+00:00","og_image":[{"width":640,"height":360,"url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png","type":"image\/png"}],"author":"Alex Makarenko","twitter_misc":{"Written by":"Alex Makarenko","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/","url":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/","name":".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono | Altoros","isPartOf":{"@id":"https:\/\/www.altoros.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#primaryimage"},"image":{"@id":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#primaryimage"},"thumbnailUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png","datePublished":"2014-09-11T23:23:42+00:00","dateModified":"2020-04-14T12:58:38+00:00","author":{"@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/e355ca9f2206c0529037e48629e0de4b"},"breadcrumb":{"@id":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#primaryimage","url":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png","contentUrl":"https:\/\/www.altoros.com\/blog\/wp-content\/uploads\/2014\/09\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono.png","width":640,"height":360},{"@type":"BreadcrumbList","@id":"https:\/\/www.altoros.com\/blog\/net-on-cloud-foundry-part-3-deploying-a-mapreduce-application-with-mono\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.altoros.com\/blog\/"},{"@type":"ListItem","position":2,"name":".NET on Cloud Foundry, Part 3: Deploying a MapReduce Application with Mono"}]},{"@type":"WebSite","@id":"https:\/\/www.altoros.com\/blog\/#website","url":"https:\/\/www.altoros.com\/blog\/","name":"Altoros","description":"Insight","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.altoros.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/e355ca9f2206c0529037e48629e0de4b","name":"Alex Makarenko","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.altoros.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/083fdfcbdf4d372139cf32711db57e55f697f43bbb05939609132d3d70590123?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/083fdfcbdf4d372139cf32711db57e55f697f43bbb05939609132d3d70590123?s=96&d=mm&r=g","caption":"Alex Makarenko"},"url":"https:\/\/www.altoros.com\/blog\/author\/alex-makarenko\/"}]}},"_links":{"self":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/46533","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/users\/38"}],"replies":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/comments?post=46533"}],"version-history":[{"count":10,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/46533\/revisions"}],"predecessor-version":[{"id":53437,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/posts\/46533\/revisions\/53437"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media\/46545"}],"wp:attachment":[{"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/media?parent=46533"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/categories?post=46533"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.altoros.com\/blog\/wp-json\/wp\/v2\/tags?post=46533"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}