{"id":111430,"date":"2024-07-18T09:00:00","date_gmt":"2024-07-18T16:00:00","guid":{"rendered":"https:\/\/www.backblaze.com\/blog\/?p=111430"},"modified":"2024-07-17T13:16:08","modified_gmt":"2024-07-17T20:16:08","slug":"why-we-use-native-code-in-backblaze-computer-backup","status":"publish","type":"post","link":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/","title":{"rendered":"Why We Use Native Code in Backblaze Computer Backup"},"content":{"rendered":"\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"534\" src=\"https:\/\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png\" alt=\"A decorative image showing icons of file types superimposed over a cloud. \" class=\"wp-image-111431\" srcset=\"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png 936w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code-300x171.png 300w, https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code-768x438.png 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/figure>\n\n\n\n<div style=\"height:15px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>There\u2019s a lot that goes into building a user-friendly, robust backup utility. When Backblaze set out to create one back in 2007, our goal was to make sure that users of all skill levels would have automatic, nearly continuous backups that could be restored on command. There were plenty of design decisions to be made, and one of the biggest was whether to implement our client in native code.&nbsp;<\/p>\n\n\n\n<p>You might have seen us talk about this on our website and elsewhere, and we felt it was high time to dive into what that decision meant for our development, how it affected the way the Backblaze client works, and why we think it was an important decision and inflection point for Backblaze Computer Backup and our customers.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is native code?<\/h2>\n\n\n\n<p>Each kind of computer central processing unit (CPU), such as Intel\/AMD or Apple Silicon, has its own &#8220;machine language,\u201d which is the set of instructions the CPU can understand and follow. These instructions are encoded in binary, and aren&#8217;t something people can read or write without great effort. When folks talk about using native code, they\u2019re typically talking about a computer program that&#8217;s written in machine language, so a computer&#8217;s CPU can &#8220;natively&#8221; understand what the program needs the CPU to do.\u00a0\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Compiled languages<\/h3>\n\n\n\n<p>To use a compiled language, developers write instructions into source code that&#8217;s easy for humans to read and edit. Then, they use a program aptly called a compiler to convert the source code into machine language for a particular kind of CPU. Examples of compiled languages are assembly (ASM), C, C++, Rust, Go, Swift, and Haskell.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Interpreted languages<\/h3>\n\n\n\n<p>Like with compiled languages, developers write programs in interpreted languages by writing instructions into source code files. But instead of converting those instructions into machine language, another program called an interpreter reads the source code and follows the instructions it contains without converting them to machine language. Common interpreted languages are things like Python, Ruby, BASIC, and PHP.\u00a0<\/p>\n\n\n\n<p>There is a bit of a <a href=\"https:\/\/en.wikipedia.org\/wiki\/Compiled_language\" target=\"_blank\" rel=\"noreferrer noopener\">slippery slope<\/a> between a compiled vs. interpreted language. For example, some modern Java implementations mix an interpreter and a compiler. But, the difference when it comes to programming is about picking a language that&#8217;s suitable to a task&#8217;s requirements.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">When and how do you use which type of code language(s)?<\/h3>\n\n\n\n<p>Well, pretty much anything anyone does on computers these days will take a combination of code languages. In some ways, the whole challenge of working with computers is bridging how humans communicate vs. how computers can process things.&nbsp;<\/p>\n\n\n\n<p>If you were using a metaphor for the above, a compiled code language would represent someone who was raised to natively speak two languages, and could fluently curse in both languages.&nbsp;<\/p>\n\n\n\n<p>By contrast, interpreted language is like this: You\u2019ve moved to a country where you\u2019re not fluent in the language, but someone needs a thorough dressing-down. An interpreted language would let you write in your native language, take your words and literally translate the idiom you were intending to use\u2014then the computer would take your literal translation, and, executing the program, would be supplied with a dictionary to then give you an effective, similarly meaningful, insult. If you didn\u2019t have your translator, your attempt at offense (in this metaphor, a program!), would likely fail because no one can understand you.&nbsp;<\/p>\n\n\n\n<p>To wit: While they mean similar things, \u201cwhen pigs fly,\u201d and \u201cquand les poules auront des dents,\u201d do not literally translate.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are the benefits of using native code in a backup application?<\/h2>\n\n\n\n<p>Using native code in a backup application is, in our opinion, better for several reasons.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Permissions<\/h3>\n\n\n\n<p>When you\u2019re writing in native code, you\u2019re plugging in your program at a lower level than most applications. That gives you access to the kinds of APIs the native operating system (OS) uses. Because you\u2019re in that level of integration with the operating system, it means that users have to update permissions less frequently, have access to more robust build possibilities for your client, and their backup client can seamlessly run in the background.\u00a0\u00a0\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Efficiency: Build once, run everywhere<\/h3>\n\n\n\n<p>By building our backup client lower in the chain of command, so to speak, it allows us to use the same work for different situations, and there are some interpreted languages that have been built for this purpose, like Java VM. Using those solutions, however, would sacrifice some of the other benefits we&#8217;re outlining in this article.\u00a0<\/p>\n\n\n\n<p>Being fully in control of our common code, we can do this without interpreted language and still have the other advantages listed here. So, we can use the same base code for both our Mac and Windows clients, but then add modifications to the code on top of each to refine the clients. There may be slight differences between the operating system (OS) environments, but coding at the level of a compiled language like C++ means that we can adjust for those differences effectively.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Performance<\/h3>\n\n\n\n<p>Running native code typically results in better performance. That\u2019s because there are fewer steps (for your computer) between understanding a program and running a program.<\/p>\n\n\n\n<p>Backup programs run all the time in the background, and have to keep track of a lot of information. Backblaze&#8217;s native code does that using half to a tenth of the computing resources that a backup program written in an interpreted language would use. So, Backblaze won&#8217;t slow down or interrupt the other activities you&#8217;re doing with your computer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Reducing software bloat and size of software<\/h3>\n\n\n\n<p>Also, since you don\u2019t have to install interpreters (you know, your insult dictionary), native code applications are usually leaner and more performant on the system.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eliminating risky third-party dependencies<\/h3>\n\n\n\n<p>Since they&#8217;re software, computer language interpreters have bugs and get new features, so they&#8217;re frequently updated. Sometimes an updated interpreter won&#8217;t run programs written for an older version of the language, or will cause a program to behave differently in an unexpected (read: &#8220;buggy&#8221;) way. Also, vendors have even changed licensing terms and started charging money for interpreters that had been free. Backblaze&#8217;s native code doesn&#8217;t have those problems.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Platform-standard user interface<\/h3>\n\n\n\n<p>Operating system vendors like Microsoft and Apple strongly encourage developers to write programs that use a platform-standard user interface &#8220;look-and-feel.\u201d Programs that do that help users feel comfortable, minimize surprises, and support accessibility features like text-to-speech.<\/p>\n\n\n\n<p>The most effective way to ensure a program&#8217;s user interface matches a platform&#8217;s standard look-and-feel is to use features built into the operating system, and those are typically only available to native code like Backblaze&#8217;s client.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What are the challenges of using native code in a backup application?<\/h2>\n\n\n\n<p>Nothing is perfect. What are the downsides to this approach?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Industry preference moving towards interpreted language\/web apps<\/h3>\n\n\n\n<p>Has anyone else noticed that the world of development has changed recently? (No need to qualify that statement\u2014it will be true tomorrow, tomorrow, and tomorrow again.)&nbsp;<\/p>\n\n\n\n<p>As with any industry, tech\u2019s (and developers\u2019) favorite strategies for creating things and solving problems have changed over time.&nbsp;<\/p>\n\n\n\n<p>There are various players in this space, including platforms (Mac, Windows, Linux), software (Adobe, Office), applications (Slack, the latest mobile game, your headphone utility client), and frankly, many things that skirt the boundaries of the above buckets. Executing any program, and particularly third-party applications, is a negotiation between operating systems\u2019 publishers and the program\/application\u2019s developers.&nbsp;<\/p>\n\n\n\n<p>Over time, those who sell computers and manage OSes have grown to prefer the lightweight development of application ecosystems. It lets them have more control over their platforms, and it gives developers a shorter time to deployment\u2014as long as they play within the sandbox the OS has made available. OS publishers are attempting to anticipate the needs of program and app developers, but there are some types of utilities\u2014and backup is one of them\u2014that justifiably break standard rules. Giving access to all your files by default, for example, isn\u2019t something you\u2019d do for a social media application. However, in order to get a full and complete backup, a program does justifiably require that level of access.\u00a0<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Limited dev libraries<\/h3>\n\n\n\n<p>Given the preference of developers to move to web applications and interpreted languages (for good reason in some cases), many OSes are releasing less detailed support and\/or technical documentation for some of their deeper-level tools. If you\u2019re implementing in native code in today\u2019s environment, you need both historical knowledge and ingenuity in house. Which leads us to our next point\u2026<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Expertise<\/h3>\n\n\n\n<p>We\u2019re on board with the evolution of development\u2014innovation is at the heart of our company\u2014but for aspects of our backup client, we need developers with a deep understanding of compiled code languages and our supported ecosystems. And luckily, in any sufficiently large tech company, you\u2019ll find folks specializing in different code languages and parts of the tech stack. That means we can spend more time nurturing and developing our internal talent rather than seeking it externally.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hybrid approaches?<\/h2>\n\n\n\n<p>Hey, we\u2019ve spent a whole article telling you why native code matters. But, many folks agree that the future requires a hybrid approach, largely because of that gray area between compiled and interpreted languages we mentioned above. You can certainly see that in our style as well\u2014our Mac client uses a combination of Objective C, SwiftUI and C++, for example.\u00a0<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The now and future Backblaze<\/h2>\n\n\n\n<p>The core functionality of our client depends on native code for very good design reasons, and they\u2019re ultimately all about making things easier for our end users.&nbsp;<\/p>\n\n\n\n<p>Overall, our design ideas are all centered on what it means to use Backblaze every day, regardless of an end user\u2019s skill level. We want things to be simpler, and sometimes the questions we need to answer (how do I make sure the Backblaze client backs everything up?) are actually a tad more complicated upfront (the Backblaze client needs system permissions\u2014and that means implementing it in native code), in that they require forethought and an investment of time and resources. But, we also prioritize the kind of thinking we can use over and over\u2014so, even if we spend a little more time building native code, it\u2019s an investment that has longevity. Put another way: Build once, run everywhere.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>You may have seen us talk about implementing our Computer Backup client in native code. But, what does that mean and why did we choose this method? <\/p>\n","protected":false},"author":138,"featured_media":111431,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"content-type":"","footnotes":""},"categories":[121,434,439,5],"tags":[469],"class_list":["post-111430","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backing-up","category-featured-1","category-featured-entrepreneurship","category-mac-love","tag-consumerbackup","entry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Why We Use Native Code in Backblaze Computer Backup<\/title>\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.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Why We Use Native Code in Backblaze Computer Backup\" \/>\n<meta property=\"og:description\" content=\"You may have seen us talk about implementing our Computer Backup client in native code. But, what does that mean and why did we choose this method?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/\" \/>\n<meta property=\"og:site_name\" content=\"Backblaze Blog | Cloud Storage &amp; Cloud Backup\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/backblaze\" \/>\n<meta property=\"article:published_time\" content=\"2024-07-18T16:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png?fit=936%2C534&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"936\" \/>\n\t<meta property=\"og:image:height\" content=\"534\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Natasha Rabinov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@backblaze\" \/>\n<meta name=\"twitter:site\" content=\"@backblaze\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Natasha Rabinov\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Why We Use Native Code in Backblaze Computer Backup","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.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/","og_locale":"en_US","og_type":"article","og_title":"Why We Use Native Code in Backblaze Computer Backup","og_description":"You may have seen us talk about implementing our Computer Backup client in native code. But, what does that mean and why did we choose this method?","og_url":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/","og_site_name":"Backblaze Blog | Cloud Storage &amp; Cloud Backup","article_publisher":"https:\/\/www.facebook.com\/backblaze","article_published_time":"2024-07-18T16:00:00+00:00","og_image":[{"width":936,"height":534,"url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png?fit=936%2C534&ssl=1","type":"image\/png"}],"author":"Natasha Rabinov","twitter_card":"summary_large_image","twitter_creator":"@backblaze","twitter_site":"@backblaze","twitter_misc":{"Written by":"Natasha Rabinov","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#article","isPartOf":{"@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/"},"author":{"name":"Natasha Rabinov","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/1cb320467c8169617d0654bb693c6240"},"headline":"Why We Use Native Code in Backblaze Computer Backup","datePublished":"2024-07-18T16:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/"},"wordCount":1758,"commentCount":0,"publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png","keywords":["ConsumerBackup"],"articleSection":["Backing Up","Featured","Featured-Business Lab","Mac Love"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/","url":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/","name":"Why We Use Native Code in Backblaze Computer Backup","isPartOf":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#primaryimage"},"image":{"@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#primaryimage"},"thumbnailUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png","datePublished":"2024-07-18T16:00:00+00:00","breadcrumb":{"@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#primaryimage","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png","width":936,"height":534,"caption":"A decorative image showing icons of file types superimposed over a cloud."},{"@type":"BreadcrumbList","@id":"https:\/\/www.backblaze.com\/blog\/why-we-use-native-code-in-backblaze-computer-backup\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Why We Use Native Code in Backblaze Computer Backup"}]},{"@type":"WebSite","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#website","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","name":"Backblaze Cloud Solutions Blog","description":"Cloud Storage &amp; Cloud Backup","publisher":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#organization","name":"Backblaze","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.backblaze.com\/blog\/wp-content\/uploads\/2017\/12\/backblaze_icon_transparent.png?fit=512%2C512&ssl=1","width":512,"height":512,"caption":"Backblaze"},"image":{"@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/backblaze","https:\/\/x.com\/backblaze","https:\/\/www.youtube.com\/user\/Backblaze","https:\/\/en.wikipedia.org\/wiki\/Backblaze"]},{"@type":"Person","@id":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/#\/schema\/person\/1cb320467c8169617d0654bb693c6240","name":"Natasha Rabinov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2019\/04\/natasha-150x150.png","url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2019\/04\/natasha-150x150.png","contentUrl":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2019\/04\/natasha-150x150.png","caption":"Natasha Rabinov"},"description":"Natasha Rabinov is the general manager of Computer Backup at Backblaze. With over a decade of experience in IT and cloud, Natasha has continuously advocated for customers and how to best help them protect critical data.","url":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/author\/natasha\/"}]}},"jetpack_featured_media_url":"https:\/\/backblazeprod.wpenginepowered.com\/wp-content\/uploads\/2024\/07\/bb-header-native-code.png","_links":{"self":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/111430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/users\/138"}],"replies":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/comments?post=111430"}],"version-history":[{"count":0,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/posts\/111430\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media\/111431"}],"wp:attachment":[{"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/media?parent=111430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/categories?post=111430"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/backblazeprod.wpenginepowered.com\/blog\/wp-json\/wp\/v2\/tags?post=111430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}