{"id":3355,"date":"2016-11-17T16:40:52","date_gmt":"2016-11-17T16:40:52","guid":{"rendered":"http:\/\/www.ckl.io\/?p=3355"},"modified":"2022-07-01T17:55:07","modified_gmt":"2022-07-01T17:55:07","slug":"how-to-build-a-browser-pt-1","status":"publish","type":"post","link":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/","title":{"rendered":"How to build a web browser\u200a\u2014\u200aPart 1: Specifications"},"content":{"rendered":"<section class=\"section section--body\">\n<div class=\"section-divider\">\n<p class=\"graf graf--h3\">Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Every time I googled <em class=\"markup--em markup--p-em\">how to make a web browser<\/em>, the answers were quite shallow, usually talking about how to consume some browser engine and make something on top of it. This article aims to walk through the whole process of making a web browser. On part 1, I\u2019m going to talk about specifications.<\/p>\n<p><!--more--><\/p>\n<p class=\"graf graf--p\">In my lifetime experience as a developer, I learned that executing the code is usually the easiest part of the software development process. What really takes time and effort is defining <strong class=\"markup--strong markup--p-strong\">how<\/strong> it should work. That\u2019s what organizations such as the <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.w3.org\/\" target=\"_blank\" rel=\"noopener\"><strong class=\"markup--strong markup--p-strong\">W3C<\/strong><\/a> and <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/whatwg.org\/\" target=\"_blank\" rel=\"noopener\"><strong class=\"markup--strong markup--p-strong\">WHATWG<\/strong><\/a> do.<\/p>\n<p class=\"graf graf--p\">The W3C<strong class=\"markup--strong markup--p-strong\">\u200a<\/strong>\u2014\u200aWorld Wide Web Consortium\u200a\u2014\u200ais an international standards organization, which maintains full-time staff for the purpose of working together on the development of standards for the web. Until 2004, the W3C was the main responsible for standardizing the web.<\/p>\n<p class=\"graf graf--p\">To this day, most new features required long periods of time for standardization, followed by implementation by many browser vendors, only then followed by developer feedback and iteration. But this workflow is changing\u2026<\/p>\n<p class=\"graf graf--p\">In 2004 an organization formed by Mozilla, Apple, and Opera Software named WHATWG\u200a\u2014\u200aWeb Hypertext Application Technology Working Group\u200a\u2014\u200awas born in response to the W3C wanting to pursue XHTML2\u200a\u2014\u200awhich had no interest from browser vendors. Their proposal was to evolve HTML, rather than invest in XML based technologies, this evolution is known today as HTML5.<\/p>\n<p class=\"graf graf--p\">WHATWG proposes a different way of thinking specifications, they call it a living standard:<\/p>\n<blockquote class=\"graf graf--blockquote\"><p>This means that they are standards that are continuously updated as they receive feedback, either from Web designers, browser vendors, tool vendors, or indeed any other interested party. It also means that new features get added to them over time, at a rate intended to keep the specifications a little ahead of the implementations but not so far ahead that the implementations give up.<\/p><\/blockquote>\n<p class=\"graf graf--p\">But not every feature comes from a standardization group. Sometimes, browser vendors implement a feature needed for its own business and never share a specification with the community. This practice is harmful to the health of the open web and forces browser vendors to spend energy on compatibility, rather than innovation.<\/p>\n<p class=\"graf graf--p\">If you <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/compat.spec.whatwg.org\/#dom-window-orientation\" target=\"_blank\" rel=\"noopener\">read this link<\/a>, you\u2019ll see it is a specification document for window<em class=\"markup--em markup--p-em\">.orientation<\/em>, a feature created by Apple that never really got specified anywhere, so Mike Taylor <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/compat.spec.whatwg.org\/#dom-window-orientation\" target=\"_blank\" rel=\"noopener\">wrote a spec for it<\/a>. Actually, if you take a good look at the previous link, you will see that the whole document is about documenting non-standard features so all browsers can be compatible.<\/p>\n<p class=\"graf graf--p\">But as I mentioned before, things are changing, the community is becoming more mature and the process is getting better. Today it is a lot easier to play a part in the web evolution.<\/p>\n<p class=\"graf graf--p\">In 2015, W3C launched a new working group called <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/www.w3.org\/community\/wicg\/\" target=\"_blank\" rel=\"noopener\">Web Platform Incubator Community Group<\/a> (WICG). The purpose of the WICG is:<\/p>\n<ul class=\"postList\">\n<li class=\"graf graf--li\">Make it as easy as possible for developers (like us!!) to propose new platform features, in the spirit of the <a class=\"markup--anchor markup--li-anchor\" href=\"https:\/\/extensiblewebmanifesto.org\/\" target=\"_blank\" rel=\"noopener\">Extensible Web Manifesto<\/a>.<\/li>\n<li class=\"graf graf--li\">Provide a space where developers and implementers can discuss new platform features.<\/li>\n<li class=\"graf graf--li\">Incubate those ideas by providing guidance and a supportive and inclusive environment to those who have never contributed to standards (and even to those that have!:D); ultimately transitioning those ideas to a W3C Working Group for formal standardization (i.e., making a \u201cW3C Recommendation\u201d).<\/li>\n<li class=\"graf graf--li\">Modernize how we do standardization of platform features<\/li>\n<li class=\"graf graf--li\">Provide a <a class=\"markup--anchor markup--li-anchor\" href=\"https:\/\/www.w3.org\/community\/about\/agreements\/cla\/\" target=\"_blank\" rel=\"noopener\">legal framework<\/a> that keeps all contributions free and open.<\/li>\n<\/ul>\n<p class=\"graf graf--p\">Now you know a little bit more about this process, you can probably understand why some things aren&#8217;t the way you expected to be or why some features take so long time to land and stabilize.<br \/>\nIf you feel like adding your bit to the web, here are a few specification links for important building blocks of the web:<\/p>\n<p class=\"graf graf--p\">WHATWG\u200a\u2014\u200a <a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/whatwg\" target=\"_blank\" rel=\"nofollow noopener\">https:\/\/github.com\/whatwg<\/a>\u200a\u2014\u200ahtml5, fetch, dom, compat<br \/>\nWICG\u200a\u2014\u200a<a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/WICG\" target=\"_blank\" rel=\"nofollow noopener\">https:\/\/github.com\/WICG<\/a>\u200a\u2014\u200aResizeObserver, EventListenerOptions, webusb, BackgroundSync<br \/>\nW3C\u200a\u2014\u200a<a class=\"markup--anchor markup--p-anchor\" href=\"https:\/\/github.com\/w3c\" target=\"_blank\" rel=\"nofollow noopener\">https:\/\/github.com\/w3c<\/a>\u200a\u2014\u200aServiceWorker, css-houdini-drafts, webcomponents<\/p>\n<p class=\"graf graf--p\">Don&#8217;t be like Apple, don&#8217;t forget to <strong class=\"markup--strong markup--p-strong\">share&nbsp;<\/strong>\ud83d\ude09<\/p>\n<p class=\"graf graf--p\"><em class=\"markup--em markup--p-em\">Special thanks to <a href=\"https:\/\/twitter.com\/miketaylr\">Mike Taylor<\/a>&nbsp;for the support writing this article and for doing a great and inspiring job.<\/em><\/p>\n<\/div>\n<\/section>\n","protected":false},"excerpt":{"rendered":"<p>Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Every time I googled how to make a web browser, the answers were quite shallow, usually talking about how to consume some browser engine and make something on top of it. This article aims to [&hellip;]<\/p>\n","protected":false},"author":65,"featured_media":3815,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[432,7],"tags":[],"class_list":["post-3355","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","category-opinion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>How to build a web browser\u200a\u2014\u200aPart 1: Specifications<\/title>\n<meta name=\"description\" content=\"Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Learn how this ecosystem works.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to build a web browser\u200a\u2014\u200aPart 1: Specifications\" \/>\n<meta property=\"og:description\" content=\"Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Learn how this ecosystem works.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Cheesecake Labs\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cheesecakelabs\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-17T16:40:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-07-01T17:55:07+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Cheesecake Labs\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:site\" content=\"@cheesecakelabs\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\"},\"author\":{\"name\":\"Iacami Gevaerd\"},\"headline\":\"How to build a web browser\u200a\u2014\u200aPart 1: Specifications\",\"datePublished\":\"2016-11-17T16:40:52+00:00\",\"dateModified\":\"2022-07-01T17:55:07+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\"},\"wordCount\":729,\"commentCount\":2,\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png\",\"articleSection\":[\"Engineering\",\"Opinion\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\",\"name\":\"How to build a web browser\u200a\u2014\u200aPart 1: Specifications\",\"isPartOf\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png\",\"datePublished\":\"2016-11-17T16:40:52+00:00\",\"dateModified\":\"2022-07-01T17:55:07+00:00\",\"author\":{\"@type\":\"person\",\"name\":\"Iacami Gevaerd\"},\"description\":\"Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Learn how this ecosystem works.\",\"breadcrumb\":{\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png\",\"width\":2000,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cheesecakelabs.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to build a web browser\u200a\u2014\u200aPart 1: Specifications\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#website\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/\",\"name\":\"Cheesecake Labs\",\"description\":\"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"name\":\"Iacami Gevaerd\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/iacami-300x300.jpg\",\"contentUrl\":\"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/iacami-300x300.jpg\",\"caption\":\"Iacami Gevaerd\"},\"description\":\"10 years of experience in Marketing and Sales in the Technology sector. My main purpose is help, support and structure efficient operations and also develop independent and multidisciplinary teams.\",\"url\":\"https:\/\/cheesecakelabs.com\/blog\/autor\/iacami\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"How to build a web browser\u200a\u2014\u200aPart 1: Specifications","description":"Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Learn how this ecosystem works.","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:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/","og_locale":"en_US","og_type":"article","og_title":"How to build a web browser\u200a\u2014\u200aPart 1: Specifications","og_description":"Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Learn how this ecosystem works.","og_url":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/","og_site_name":"Cheesecake Labs","article_publisher":"https:\/\/www.facebook.com\/cheesecakelabs","article_published_time":"2016-11-17T16:40:52+00:00","article_modified_time":"2022-07-01T17:55:07+00:00","og_image":[{"width":2000,"height":720,"url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png","type":"image\/png"}],"author":"Cheesecake Labs","twitter_card":"summary_large_image","twitter_creator":"@cheesecakelabs","twitter_site":"@cheesecakelabs","twitter_misc":{"Written by":null,"Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#article","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/"},"author":{"name":"Iacami Gevaerd"},"headline":"How to build a web browser\u200a\u2014\u200aPart 1: Specifications","datePublished":"2016-11-17T16:40:52+00:00","dateModified":"2022-07-01T17:55:07+00:00","mainEntityOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/"},"wordCount":729,"commentCount":2,"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png","articleSection":["Engineering","Opinion"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/","url":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/","name":"How to build a web browser\u200a\u2014\u200aPart 1: Specifications","isPartOf":{"@id":"https:\/\/cheesecakelabs.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage"},"image":{"@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage"},"thumbnailUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png","datePublished":"2016-11-17T16:40:52+00:00","dateModified":"2022-07-01T17:55:07+00:00","author":{"@type":"person","name":"Iacami Gevaerd"},"description":"Browsers are a complex piece of software: inside a web browser there are features comparable to a whole operating system. Learn how this ecosystem works.","breadcrumb":{"@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#primaryimage","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/browser_banner6-1.png","width":2000,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/cheesecakelabs.com\/blog\/how-to-build-a-browser-pt-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cheesecakelabs.com\/blog\/"},{"@type":"ListItem","position":2,"name":"How to build a web browser\u200a\u2014\u200aPart 1: Specifications"}]},{"@type":"WebSite","@id":"https:\/\/cheesecakelabs.com\/blog\/#website","url":"https:\/\/cheesecakelabs.com\/blog\/","name":"Cheesecake Labs","description":"Nearshore outsourcing company for Web and Mobile design and engineering services, and staff augmentation for startups and enterprises..","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cheesecakelabs.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","name":"Iacami Gevaerd","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/cheesecakelabs.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/iacami-300x300.jpg","contentUrl":"https:\/\/ckl-website-static.s3.amazonaws.com\/wp-content\/uploads\/2016\/11\/iacami-300x300.jpg","caption":"Iacami Gevaerd"},"description":"10 years of experience in Marketing and Sales in the Technology sector. My main purpose is help, support and structure efficient operations and also develop independent and multidisciplinary teams.","url":"https:\/\/cheesecakelabs.com\/blog\/autor\/iacami\/"}]}},"_links":{"self":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/3355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/users\/65"}],"replies":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/comments?post=3355"}],"version-history":[{"count":1,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/3355\/revisions"}],"predecessor-version":[{"id":10327,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/posts\/3355\/revisions\/10327"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media\/3815"}],"wp:attachment":[{"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/media?parent=3355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/categories?post=3355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cheesecakelabs.com\/blog\/wp-json\/wp\/v2\/tags?post=3355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}