{"id":84,"date":"2025-12-20T07:04:48","date_gmt":"2025-12-20T07:04:48","guid":{"rendered":"https:\/\/steadyrabbit.in\/blogs\/?p=84"},"modified":"2025-12-20T07:04:48","modified_gmt":"2025-12-20T07:04:48","slug":"from-monolith-to-cap-carving-microservices-out-of-ecc-no-big-bang-required","status":"publish","type":"post","link":"https:\/\/steadyrabbit.in\/blogs\/from-monolith-to-cap-carving-microservices-out-of-ecc-no-big-bang-required\/","title":{"rendered":"From Monolith to CAP: Carving Microservices Out of ECC\u2014No Big-Bang Required"},"content":{"rendered":"\n<h4 class=\"wp-block-heading\">TL;DR\u00a0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Ripping out your ECC monolith in one epic weekend is the fastest path to CFO heartburn. A safer route is <strong>progressive carve-out<\/strong>: lift one business capability at a time into a <strong>Cloud Application Programming (CAP) microservice<\/strong> running on SAP BTP, connect it back to ECC with <strong>Event Mesh<\/strong>, and retire legacy code sprint by sprint. We share the exact playbook our Micro-GCC squad used to extract \u201cSales Pricing\u201d from 300 000 lines of Z-code\u2014with <strong>zero plant downtime<\/strong> and a 43 % latency improvement. All CDS, mta.yaml, and Terraform snippets included.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Why \u201cLift-and-Shift\u201d Fails in SAP Land\u00a0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Typical big-bang plan:<\/em> clone ECC database, refactor Z-code in S\/4 sandbox, schedule 48-hour outage.<br><em>Reality:<\/em> transports collide, IDoc queues pile up, month-end close panics.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Key blockers:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Elephant tables<\/strong> (MARA, VBAK) resist parallel updates.<br><\/li>\n\n\n\n<li>Custom Z-code couples UI, business logic, and DB calls in one lump.<br><\/li>\n\n\n\n<li>Cut-over windows for global plants must be <strong>&lt; 15 min<\/strong>.<br><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Progressive carve-out<\/strong> solves this by:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Picking a well-bounded domain (\u201cSales Pricing\u201d).<br><\/li>\n\n\n\n<li>Creating a <strong>CDS model + CAP service<\/strong> in BTP.<br><\/li>\n\n\n\n<li>Publishing change events from ECC to Event Mesh.<br><\/li>\n\n\n\n<li>Gradually re-routing traffic\u2014no nuclear weekends.<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Reference Architecture\u00a0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">sql<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ECC (Blue)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Event Mesh &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; BTP (Green)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;+&#8212;&#8212;&#8212;&#8212;&#8212;-+ &nbsp; +&#8212;&#8212;&#8212;&#8212;&#8212;+ &nbsp; +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;|&nbsp; SD Z_PRICING&nbsp; |&#8211;&gt;|&nbsp; SD.PRICING.* |&#8211;&gt;| CAP Service v1 &nbsp; |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;| (ABAP Module)&nbsp; | &nbsp; +&#8212;&#8212;&#8212;&#8212;&#8212;+ &nbsp; |&nbsp; \/pricing\/* OData|<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;+&#8212;&#8212;&#8212;&#8212;&#8212;-+ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\u2191&nbsp; &nbsp; | &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \u2191<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp; &nbsp; | SAP SLT (real-time) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp; &nbsp; +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;Legacy UI5 App &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; New UI5\/Fiori<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SLT<\/strong> replicates VBAK\/VBAP delta to HANA Cloud.<br><\/li>\n\n\n\n<li><strong>CDS model<\/strong> maps to new HANA Cloud schema.<br><\/li>\n\n\n\n<li><strong>CAP service<\/strong> (Node.js) exposes OData V4 for Fiori &amp; external APIs.<br><\/li>\n\n\n\n<li><strong>Event Mesh<\/strong> channels SD.PRICING.UPDATED messages; CAP subscribes and updates cache.<br><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Step-switch<\/strong>: gateway route toggles \/pricing\/* to CAP when E2E tests green.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Step-by-Step Carve-Out\u00a0<\/h4>\n\n\n\n<h5 class=\"wp-block-heading\">3.1 Scope the Domain<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Rule of thumb:<\/em> choose a business capability with <strong>\u2264 3 BAPIs<\/strong> and <strong>\u2264 5 tables<\/strong>.<br>For Sales Pricing we touched <strong>VBAK, VBAP, KONV<\/strong> and three custom Z-tables.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h5 class=\"wp-block-heading\">3.2 Create CDS Model<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">db\/schema.cds<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">cds<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">namespace sd.pricing;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">entity SalesOrder {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;key SalesOrderID : String(10);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;NetValue &nbsp; &nbsp; &nbsp; &nbsp; : Decimal(15,2);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;Currency &nbsp; &nbsp; &nbsp; &nbsp; : String(5);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">entity PricingCondition {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;key CondID&nbsp; &nbsp; : Integer;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SalesOrderID : Association to SalesOrder;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Amount &nbsp; &nbsp; &nbsp; : Decimal(15,2);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CondType &nbsp; &nbsp; : String(4);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Run:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">cds deploy &#8211;to hana<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h5 class=\"wp-block-heading\">3.3 Build CAP Service<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">srv\/pricing-service.js<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">js<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">module.exports = srv =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;const { SalesOrder, PricingCondition } = srv.entities<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;srv.before(&#8216;CREATE&#8217;, PricingCondition, validateAmounts)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;srv.on(&#8216;reprice&#8217;, async req =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;const so = await SELECT.one.from(SalesOrder).where({ SalesOrderID: req.data.id })<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;\/\/ call external pricing engine, update NetValue \u2026<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;return so<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;})<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">mta.yaml adds requires: [ hana, eventmesh ].<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h5 class=\"wp-block-heading\">3.4 Event Mesh Subscription<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">event-mesh.json<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">json<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">{<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8220;source&#8221;: &#8220;ECC&#8221;,<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8220;events&#8221;: [<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;{ &#8220;name&#8221;: &#8220;SD.PRICING.UPDATED&#8221;, &#8220;namespace&#8221;: &#8220;sap.s4&#8221;, &#8220;version&#8221;: &#8220;v1&#8221; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CAP srv\/pricing-sub.js<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">js<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">module.exports = srv =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;const { PricingCondition } = srv.entities<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;srv.on(&#8216;sap.s4\/SD.PRICING.UPDATED&#8217;, async msg =&gt; {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;await UPDATE(PricingCondition).where({CondID: msg.data.id}).set(msg.data)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;})<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Latency ECC \u2192 CAP cache: <strong>\u2264 300 ms<\/strong> (tested 95th percentile).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h5 class=\"wp-block-heading\">3.5 CI\/CD Pipeline<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">jenkinsfile<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">groovy<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">stage(&#8216;Build&#8217;) { sh &#8216;mbt build&#8217; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">stage(&#8216;Deploy&#8217;) {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;withCredentials([file(credentialsId: &#8216;btp.json&#8217;, variable: &#8216;BTPCRED&#8217;)]) {<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;sh &#8216;cf deploy mta_archives\/pricing_1.0.0.mtar &#8211;json&#8217;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">}<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">stage(&#8216;Smoke&#8217;) { sh &#8216;npm run smoke&#8217; }<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Smoke tests hit \/pricing\/$metadata plus \/reprice.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h5 class=\"wp-block-heading\">3.6 Route Traffic<\/h5>\n\n\n\n<p class=\"wp-block-paragraph\">In SAP APIM:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">yaml<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">CopyEdit<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">routes:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8211; match: \/pricing\/**<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;target: cap-green<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;weight: 20<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&#8211; match: \/pricing\/**<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;target: ecc-blue<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;&nbsp;&nbsp;&nbsp;weight: 80<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">After 24 h of green logs, flip weights to 100\/0. Rollback = YAML revert.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Latency &amp; Cost Benchmarks\u00a0<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Metric<\/strong><\/td><td><strong>ECC Z-RFC<\/strong><\/td><td><strong>CAP Microservice<\/strong><\/td><\/tr><tr><td>p95 Read Latency<\/td><td>520 ms<\/td><td><strong>297 ms<\/strong><\/td><\/tr><tr><td>p95 Write Latency<\/td><td>640 ms<\/td><td><strong>335 ms<\/strong><\/td><\/tr><tr><td>Monthly Infra \u20ac<\/td><td>N\/A (on-prem)<\/td><td><strong>\u20ac420<\/strong> (BTP, 2 GB HANA Cloud)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Savings: dev hours (fewer OSS notes), faster user response, and clear path to mobile APIs.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Case Study Snapshot\u00a0<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Industrial OEM<\/em> needed real-time price quotes in a dealer portal.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Before<\/strong>: RFC call chain through VPN \u2192 700 ms.<br><\/li>\n\n\n\n<li><strong>After<\/strong>: CAP service directly exposed via BTP \u2192 310 ms.<br><\/li>\n\n\n\n<li><strong>Outcome<\/strong>: dealer checkout conversion +8 %.<br><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Z-code reduction: 48 000 lines deleted; ATC critical findings \u2013100 %.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Pitfalls &amp; Pro-Tips\u00a0<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Pitfall<\/strong><\/td><td><strong>Fix<\/strong><\/td><\/tr><tr><td>CDS enum mismatch<\/td><td>Use @cds.odata.valuelist for domain values; sync with DDIC check table.<\/td><\/tr><tr><td>Event duplicates<\/td><td>De-duplicate by message ID; CAP persists last processed offset.<\/td><\/tr><tr><td>HANA Cloud memory spike<\/td><td>Partition KONV by fiscal year; purge archive years.<\/td><\/tr><tr><td>Fiori app calls old RFC<\/td><td>Use UI5 cache buster; adjust destination to CAP SACF.<\/td><\/tr><tr><td>Devs fear CAP learning curve<\/td><td>Scaffold service with yeoman-generator-cap-project\u20145 min ramp.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Adoption Roadmap\u00a0<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Sprint<\/strong><\/td><td><strong>Milestone<\/strong><\/td><\/tr><tr><td>1<\/td><td>Enable abapGit, export domain package<\/td><\/tr><tr><td>2<\/td><td>Define CDS &amp; deploy to HANA Cloud<\/td><\/tr><tr><td>3<\/td><td>Build CAP service &amp; Event Mesh subscription<\/td><\/tr><tr><td>4<\/td><td>20 % canary traffic via APIM<\/td><\/tr><tr><td>5<\/td><td>Full cut-over; retire old Z-code package<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Repeat domain by domain until ECC monolith collapses into modular CAP landscape.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Take-Home Checklist\u00a0<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Pick a self-contained domain (\u2264 5 tables).<br><\/li>\n\n\n\n<li>Model CDS + deploy to HANA Cloud.<br><\/li>\n\n\n\n<li>Build CAP OData service; subscribe to Event Mesh.<br><\/li>\n\n\n\n<li>Canary route 20 % traffic; monitor p95 latency.<br><\/li>\n\n\n\n<li>Delete Z-code after success\u2014win back predictability.<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>TL;DR\u00a0 Ripping out your ECC monolith in one epic weekend is the fastest path to CFO heartburn. A safer route is progressive carve-out: lift one business capability at a time into a Cloud Application Programming (CAP) microservice running on SAP BTP, connect it back to ECC with Event Mesh, and retire legacy code sprint by [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":15,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-84","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sap-modernization"],"_links":{"self":[{"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/posts\/84","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/comments?post=84"}],"version-history":[{"count":1,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/posts\/84\/revisions"}],"predecessor-version":[{"id":85,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/posts\/84\/revisions\/85"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/media\/15"}],"wp:attachment":[{"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/media?parent=84"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/categories?post=84"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/steadyrabbit.in\/blogs\/wp-json\/wp\/v2\/tags?post=84"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}