{"id":7080,"date":"2019-06-18T10:08:07","date_gmt":"2019-06-18T17:08:07","guid":{"rendered":"http:\/\/www.couchbase.com\/blog\/?p=7080"},"modified":"2019-06-19T03:39:54","modified_gmt":"2019-06-19T10:39:54","slug":"introducing-the-couchbase-node-js-sdk-3-0-alpha","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/","title":{"rendered":"Introducing the Couchbase Node.js SDK 3.0 Alpha"},"content":{"rendered":"<p>One of the challenges of writing software used by a huge range of developers is maintaining API\u2019s which are stable and cross-compatible. Sometimes this need for compatibility can back us into a corner which restricts our ability to implement exciting new features. In light of that, I am very excited to announce the release of Alpha versions of our upcoming Node.js 3.0 SDK. This major version bump enables us to focus again on building powerful APIs which strongly leverage new features available in ECMAScript 6 and more intuitively integrate Couchbase\u2019s extensive feature set into Node.js. We also had the opportunity to take lessons learned over the past 4 years of SDK 2.0 and build more future-proof APIs which will allow us to evolve with the language and server features throughout the life of this next generation SDK. Now that you know what our goals were, let\u2019s talk a bit about the resulting changes!<\/p>\n<h3>Introduction of Promises and Async\/Await<\/h3>\n<p>The 3.0 version of the Node.js SDK introduces built-in support for Promises throughout the APIs, this lends itself well to writing non-blocking serially written code using the new Async\/Await features introduced in ECMAScript 6. All methods now support both Promises and the callback pattern native to older Javascript code. In addition to this, all event emitters have been enhanced with promises support. In the case of the various query interfaces within the SDK, this enables you to choose on a case by case basis whether to process data on the fly, or simply await on it and process the entire result set at once.<\/p>\n<h3>Initializing the Cluster and Buckets in SDK 3.0<\/h3>\n<p>Just like SDK 2.0, Cluster and Bucket objects are back in SDK 3.0 each representing their server equivalences. Connecting to a Cluster is done in a similar manner to SDK 2.0, though the parameters and pattern for authenticating have gotten some improvements:<\/p>\n<pre class=\"\">const couchbase = require('couchbase');\r\n\r\nvar cluster = new couchbase.Cluster('couchbase:\/\/localhost', {\r\n    username: 'Administrator',\r\n    password: 'password',\r\n});\r\n\r\nvar bucket = cluster.bucket('default');<\/pre>\n<p>Similar to SDK 2.0, your Cluster objects are long lived resource management objects whose life generally spans from application starts-up until the application shuts-down. As of this next generation of SDKs, the rest of your objects can be short lived, or kept around without having any performance penalties. The SDK will internally cache bucket objects, collection objects, etc on your behalf.<\/p>\n<h3>The New KV APIs for Couchbase Server 6.5<\/h3>\n<p>All Key\/Value operations now exist on the Collections level, which will always be a member of exactly one scope. In the case of a Server version which does not support collections, you have access to the default collection which will work exactly like our buckets did in the past. Here is an example of accessing the default Collection and then writing and reading some data with it.<\/p>\n<pre class=\"\">var coll = bucket.defaultCollection();\r\n\r\nvar res = await coll.upsert('test', { x: 14 });\r\n\r\nvar res = await coll.get(\u2018test\u2019);<\/pre>\n<h3>Scope and Collections with Developer Preview mode<\/h3>\n<p>As part of the upcoming Server 6.5 release, we have introduced the ability to enable a developer preview mode which exposes some upcoming features which are still in development. Turning on the Collections feature enables you to access a feature which represents the future of data access with Couchbase Server 6.5. Collections enable you to slice a Bucket into multiple logical Scopes and Collections. This replaces the requirement in early versions of Couchbase server to add a special \u201ctype\u201d field which designated a sort of grouping of documents by name which could then be queried independently within a Bucket. I think you\u2019ll find it&#8217;s a much more intuitive programming model and will allow you to keep your data better organized. Here is an example:<\/p>\n<pre class=\"\">var scope = bucket.scope('app1');\r\nvar coll = scope.collection('users');\r\n\r\nvar res = await coll.upsert('test', { x: 14 });<\/pre>\n<h3>The New Querying APIs<\/h3>\n<p>N1QL, like Analytics and FTS, are considered \u201cglobal\u201d scope in that a query can reference multiple Buckets. Initially in SDK 2.0, N1QL queries were scoped to the Bucket and later added to Cluster. In SDK 3.0 you can currently only query from the Cluster object.<\/p>\n<pre class=\"\">var res = await cluster.query('SELECT * FROM default WHERE x=14');<\/pre>\n<p>Overall, all of the services (Query, FTS, and Analytics) have a public API very similar to SDK 2.0, however, for consistency all required fields have been added as a parameter on the left-hand side and the optional parameters are now consolidated into an \u201coptions\u201d block or structure on the right hand side. You will notice that this continues across the entire SDK and greatly improves the consistency of our APIs.<\/p>\n<pre class=\"\">var res = await cluster.query('SELECT * FROM default', {\r\n    adhoc: false,\r\n    readonly: true,\r\n});<\/pre>\n<h3>Getting the Release<\/h3>\n<p>Installing the alpha release of the Node.js 3.0 SDK, you can simply use npm like you normally would, while specifying the specific version when performing the install.<\/p>\n<pre class=\"\">&gt; npm install couchbase@3.0.0-alpha.1<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>One of the challenges of writing software used by a huge range of developers is maintaining API\u2019s which are stable and cross-compatible. Sometimes this need for compatibility can back us into a corner which restricts our ability to implement exciting [&hellip;]<\/p>\n","protected":false},"author":31,"featured_media":7097,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1],"tags":[],"ppma_author":[9004],"class_list":["post-7080","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Introducing the Couchbase Node.js SDK 3.0 Alpha - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"This post introduces the Couchbase Node.js SDK 3.0 Alpha version which has built-in support for Promises throughout the API&#039;s and new KV APIs.\" \/>\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\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introducing the Couchbase Node.js SDK 3.0 Alpha\" \/>\n<meta property=\"og:description\" content=\"This post introduces the Couchbase Node.js SDK 3.0 Alpha version which has built-in support for Promises throughout the API&#039;s and new KV APIs.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-06-18T17:08:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-06-19T10:39:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/New-Project.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2048\" \/>\n\t<meta property=\"og:image:height\" content=\"640\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Brett Lawson, Principal Software Engineer, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Brett Lawson, Principal Software Engineer, Couchbase\" \/>\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:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/\"},\"author\":{\"name\":\"Brett Lawson, Principal Software Engineer, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/5cfc2fbf25776be2a027a474562be02f\"},\"headline\":\"Introducing the Couchbase Node.js SDK 3.0 Alpha\",\"datePublished\":\"2019-06-18T17:08:07+00:00\",\"dateModified\":\"2019-06-19T10:39:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/\"},\"wordCount\":731,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2019\\\/06\\\/New-Project.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/\",\"name\":\"Introducing the Couchbase Node.js SDK 3.0 Alpha - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2019\\\/06\\\/New-Project.png\",\"datePublished\":\"2019-06-18T17:08:07+00:00\",\"dateModified\":\"2019-06-19T10:39:54+00:00\",\"description\":\"This post introduces the Couchbase Node.js SDK 3.0 Alpha version which has built-in support for Promises throughout the API's and new KV APIs.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2019\\\/06\\\/New-Project.png\",\"contentUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2019\\\/06\\\/New-Project.png\",\"width\":2048,\"height\":640},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/introducing-the-couchbase-node-js-sdk-3-0-alpha\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introducing the Couchbase Node.js SDK 3.0 Alpha\"}]},{\"@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\\\/5cfc2fbf25776be2a027a474562be02f\",\"name\":\"Brett Lawson, Principal Software Engineer, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=gee3586f0c112c20e863af447d44dec8f\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g\",\"caption\":\"Brett Lawson, Principal Software Engineer, Couchbase\"},\"description\":\"Brett Lawson is a Principal Software Engineer at Couchbase. Brett is responsible for the design and development of the Couchbase Node.js and PHP clients as well as playing a role in the design and development of the C library, libcouchbase.\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/author\\\/brett-lawson\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Introducing the Couchbase Node.js SDK 3.0 Alpha - The Couchbase Blog","description":"This post introduces the Couchbase Node.js SDK 3.0 Alpha version which has built-in support for Promises throughout the API's and new KV APIs.","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\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/","og_locale":"en_US","og_type":"article","og_title":"Introducing the Couchbase Node.js SDK 3.0 Alpha","og_description":"This post introduces the Couchbase Node.js SDK 3.0 Alpha version which has built-in support for Promises throughout the API's and new KV APIs.","og_url":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-06-18T17:08:07+00:00","article_modified_time":"2019-06-19T10:39:54+00:00","og_image":[{"width":2048,"height":640,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/06\/New-Project.png","type":"image\/png"}],"author":"Brett Lawson, Principal Software Engineer, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Brett Lawson, Principal Software Engineer, Couchbase","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/"},"author":{"name":"Brett Lawson, Principal Software Engineer, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/5cfc2fbf25776be2a027a474562be02f"},"headline":"Introducing the Couchbase Node.js SDK 3.0 Alpha","datePublished":"2019-06-18T17:08:07+00:00","dateModified":"2019-06-19T10:39:54+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/"},"wordCount":731,"commentCount":1,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/New-Project.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/","url":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/","name":"Introducing the Couchbase Node.js SDK 3.0 Alpha - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/New-Project.png","datePublished":"2019-06-18T17:08:07+00:00","dateModified":"2019-06-19T10:39:54+00:00","description":"This post introduces the Couchbase Node.js SDK 3.0 Alpha version which has built-in support for Promises throughout the API's and new KV APIs.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/New-Project.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/06\/New-Project.png","width":2048,"height":640},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/introducing-the-couchbase-node-js-sdk-3-0-alpha\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introducing the Couchbase Node.js SDK 3.0 Alpha"}]},{"@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\/5cfc2fbf25776be2a027a474562be02f","name":"Brett Lawson, Principal Software Engineer, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=gee3586f0c112c20e863af447d44dec8f","url":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g","caption":"Brett Lawson, Principal Software Engineer, Couchbase"},"description":"Brett Lawson is a Principal Software Engineer at Couchbase. Brett is responsible for the design and development of the Couchbase Node.js and PHP clients as well as playing a role in the design and development of the C library, libcouchbase.","url":"https:\/\/www.couchbase.com\/blog\/author\/brett-lawson\/"}]}},"acf":[],"authors":[{"term_id":9004,"user_id":31,"is_guest":0,"slug":"brett-lawson","display_name":"Brett Lawson, Principal Software Engineer, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/6aec1ba24ef7558a248dcde7b7a18b15b06e2885b24b663906a448634066c1c4?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7080","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\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=7080"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/7080\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/7097"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=7080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=7080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=7080"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=7080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}