{"id":4921,"date":"2018-04-03T07:00:18","date_gmt":"2018-04-03T14:00:18","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=4921"},"modified":"2021-02-08T19:02:45","modified_gmt":"2021-02-09T03:02:45","slug":"define-durability-requirements-couchbase-sdks","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/","title":{"rendered":"Define Your Own Durability Requirements in Couchbase with the SDKs"},"content":{"rendered":"<p>As a Developer Advocate at <a href=\"https:\/\/www.couchbase.com\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a>, I go to many events and interact with a great deal of developers. When talking about Couchbase, I get a lot of questions around the durability of data that is being created. For example, Couchbase is a memory-first, and persisted-disk later type of database where every interaction happens against the memory layer before it asynchronously hits the disk, keeping things incredibly fast. The question that always comes up is, how can you be sure that the data is saved in the event of a node failure?<\/p>\n<p>This is a great question and we&#8217;re going to look at how to get past these problems should it ever happen.<\/p>\n<p><!--more--><\/p>\n<p>We&#8217;re going to see a few examples, all very similar, around different scenarios of data durability. These examples will be in Node.js, but the commands will be similar regardless of which Couchbase SDK you wish to use.<\/p>\n<p>Let&#8217;s start with the first scenario. We have a massive multiplayer online role playing game (MMORPG) like World of Warcraft of similar and we need to periodically save the game state for a particular player so that when they sign back in at a later time, their position, statistics, and items are all kept in line. In this scenario, because saves happen frequently and latency is everything, saving to the cache is probably good enough. We can write code like the following:<\/p>\n<pre class=\"lang:default decode:true \">bucket.insert(id, data, (error, result) =&gt; {\r\n    if(error) {\r\n        throw error;\r\n    }\r\n    console.log(result);\r\n});<\/pre>\n<p>The player state is saved and the game receives a response saying it is alright to move along. If the node fails and the save hasn&#8217;t hit the disk or has been replicated, it probably isn&#8217;t too big a deal because of the frequent saves.<\/p>\n<p>Now let&#8217;s come up with another scenario. Let&#8217;s say we are creating user accounts for our application. While we could rely on the memory layer, we want a little more confidence that our data will reach the disk. After all if the node fails, we can&#8217;t recover from what was in memory, but we could recover what was on disk. So instead, we adjust our operation a bit:<\/p>\n<pre class=\"lang:default decode:true \">bucket.insert(id, data, { \"persist_to\": 1 }, (error, result) =&gt; {\r\n    if(error) {\r\n        throw error;\r\n    }\r\n    console.log(result);\r\n});<\/pre>\n<p>We&#8217;ve added <code>persist_to<\/code> which allows us to specify how many nodes the data must persist to disk on before giving a response. In our case, we only want to know that the data sits on disk for a single node and that is alright.<\/p>\n<p>Now let&#8217;s come up with our third and final scenario. Let&#8217;s say we have created a banking application. It is critical that our transactions exist on disk and it is critical this data be replicated in case of node and disk failure. Losing any information for a customer in regards to banking data could end up with massive penalties.<\/p>\n<p>With that said, our creation operation changes a bit:<\/p>\n<pre class=\"lang:default decode:true \">bucket.insert(id, data, { \"persist_to\": 1, \"replicate_to\": 2 }, (error, result) =&gt; {\r\n    if(error) {\r\n        throw error;\r\n    }\r\n    console.log(result);\r\n});<\/pre>\n<p>In the above code we are saying that after we create a document, we want it to be persisted to at least one disk and replicated to at least two other nodes before we receive a response. We can adjust these numbers as necessary, but remember, the higher the durability requirement, the slower the response from the operation.<\/p>\n<h2>Conclusion<\/h2>\n<p>There is quite a bit you can accomplish with <a href=\"https:\/\/www.couchbase.com\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase<\/a>. While many situations won&#8217;t need you to define your own durability requirements, being able to decide if your data should hit cache, disk, or replica via the SDK is a good thing. Just keep in mind that the stronger your requirements, the slower things become, not because Couchbase is slow to do these things, but because more is happening.<\/p>\n<p>If you want to learn more about using the Couchbase Node.js SDK, check out the <a href=\"https:\/\/docs.couchbase.com\/sdk-api\/couchbase-node-client-2.4.5\/Bucket.html#insert__anchor\" target=\"_blank\" rel=\"noopener noreferrer\">SDK documentation<\/a>. If you want to learn more about data durability, check out the <a href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/sdk\/durability.html\" target=\"_blank\" rel=\"noopener noreferrer\">Couchbase Developer Portal<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As a Developer Advocate at Couchbase, I go to many events and interact with a great deal of developers. When talking about Couchbase, I get a lot of questions around the durability of data that is being created. For example, [&hellip;]<\/p>\n","protected":false},"author":63,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,1816,2201],"tags":[1313,2194],"ppma_author":[9032],"class_list":["post-4921","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-couchbase-server","category-tools-sdks","tag-consistency","tag-durability"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Define Your Own Durability Requirements in Couchbase with the SDKs<\/title>\n<meta name=\"description\" content=\"Learn to set your own durability requirements, such as waiting until data has persisted or replicated, when saving data to Couchbase Server.\" \/>\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.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Define Your Own Durability Requirements in Couchbase with the SDKs\" \/>\n<meta property=\"og:description\" content=\"Learn to set your own durability requirements, such as waiting until data has persisted or replicated, when saving data to Couchbase Server.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/thepolyglotdeveloper\" \/>\n<meta property=\"article:published_time\" content=\"2018-04-03T14:00:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-09T03:02:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@nraboy\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Nic Raboy, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\"},\"author\":{\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\"},\"headline\":\"Define Your Own Durability Requirements in Couchbase with the SDKs\",\"datePublished\":\"2018-04-03T14:00:18+00:00\",\"dateModified\":\"2021-02-09T03:02:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\"},\"wordCount\":640,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"keywords\":[\"Consistency\",\"durability\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Couchbase Server\",\"Tools &amp; SDKs\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\",\"name\":\"Define Your Own Durability Requirements in Couchbase with the SDKs\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2018-04-03T14:00:18+00:00\",\"dateModified\":\"2021-02-09T03:02:45+00:00\",\"description\":\"Learn to set your own durability requirements, such as waiting until data has persisted or replicated, when saving data to Couchbase Server.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"width\":1800,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Define Your Own Durability Requirements in Couchbase with the SDKs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1\",\"name\":\"Nic Raboy, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g\",\"caption\":\"Nic Raboy, Developer Advocate, Couchbase\"},\"description\":\"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.\",\"sameAs\":[\"https:\/\/www.thepolyglotdeveloper.com\",\"https:\/\/www.facebook.com\/thepolyglotdeveloper\",\"https:\/\/x.com\/nraboy\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/nic-raboy-2\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Define Your Own Durability Requirements in Couchbase with the SDKs","description":"Learn to set your own durability requirements, such as waiting until data has persisted or replicated, when saving data to Couchbase Server.","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.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/","og_locale":"en_US","og_type":"article","og_title":"Define Your Own Durability Requirements in Couchbase with the SDKs","og_description":"Learn to set your own durability requirements, such as waiting until data has persisted or replicated, when saving data to Couchbase Server.","og_url":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/","og_site_name":"The Couchbase Blog","article_author":"https:\/\/www.facebook.com\/thepolyglotdeveloper","article_published_time":"2018-04-03T14:00:18+00:00","article_modified_time":"2021-02-09T03:02:45+00:00","og_image":[{"width":1800,"height":630,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2022\/11\/couchbase-nosql-dbaas.png","type":"image\/png"}],"author":"Nic Raboy, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@nraboy","twitter_misc":{"Written by":"Nic Raboy, Developer Advocate, Couchbase","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/"},"author":{"name":"Nic Raboy, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1"},"headline":"Define Your Own Durability Requirements in Couchbase with the SDKs","datePublished":"2018-04-03T14:00:18+00:00","dateModified":"2021-02-09T03:02:45+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/"},"wordCount":640,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","keywords":["Consistency","durability"],"articleSection":["Best Practices and Tutorials","Couchbase Server","Tools &amp; SDKs"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/","url":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/","name":"Define Your Own Durability Requirements in Couchbase with the SDKs","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2018-04-03T14:00:18+00:00","dateModified":"2021-02-09T03:02:45+00:00","description":"Learn to set your own durability requirements, such as waiting until data has persisted or replicated, when saving data to Couchbase Server.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","width":1800,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/define-durability-requirements-couchbase-sdks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Define Your Own Durability Requirements in Couchbase with the SDKs"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"The Couchbase Blog","description":"Couchbase, the NoSQL Database","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/bb545ebe83bb2d12f91095811d0a72e1","name":"Nic Raboy, Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/8863514d8bed0cf6080f23db40e00354","url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","caption":"Nic Raboy, Developer Advocate, Couchbase"},"description":"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand.","sameAs":["https:\/\/www.thepolyglotdeveloper.com","https:\/\/www.facebook.com\/thepolyglotdeveloper","https:\/\/x.com\/nraboy"],"url":"https:\/\/www.couchbase.com\/blog\/author\/nic-raboy-2\/"}]}},"authors":[{"term_id":9032,"user_id":63,"is_guest":0,"slug":"nic-raboy-2","display_name":"Nic Raboy, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/bedeb68368d4681aca4c74fe5f697f0c423b80d498ec50fd915ba018b72c101f?s=96&d=mm&r=g","author_category":"","last_name":"Raboy","first_name":"Nic","job_title":"","user_url":"https:\/\/www.thepolyglotdeveloper.com","description":"Nic Raboy is an advocate of modern web and mobile development technologies. He has experience in Java, JavaScript, Golang and a variety of frameworks such as Angular, NativeScript, and Apache Cordova. Nic writes about his development experiences related to making web and mobile development easier to understand."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4921","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/63"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=4921"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/4921\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=4921"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=4921"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=4921"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=4921"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}