{"id":2146,"date":"2016-02-03T22:38:13","date_gmt":"2016-02-03T22:38:12","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2146"},"modified":"2023-06-23T05:52:16","modified_gmt":"2023-06-23T12:52:16","slug":"how-to-set-channel-parameters-in-sync-gateway","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/","title":{"rendered":"Coffee on Couchbase:  How to Securely Set Channel Parameters in Sync Gateway"},"content":{"rendered":"<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/2016\/february\/how-to-set-channel-parameters-in-sync-gateway\/screen-shot-2016-01-19-at-3.00.04-am.png\" \/><\/p>\n<p style=\"text-align: justify\">From the previous <a href=\"https:\/\/www.youtube.com\/playlist?list=PLcspbWiU9RutpdziptYay2TMa4CegzObL\">Coffee on Couchbase<\/a> Sync Gateway series, we explored <a href=\"https:\/\/www.couchbase.com\/blog\/how-to-authorize-users-in-sync-gateway\/\">how to authenticate users<\/a> and also <a href=\"https:\/\/www.couchbase.com\/blog\/using-channels-in-sync-gateway\/\">how to use Channels in Sync Gateway<\/a>.\u00a0 Sync Gateway provides the data orchestration layer for Couchbase Mobile and previously we saw how data routing can be done by <a href=\"https:\/\/www.couchbase.com\/blog\/how-to-validate-documents-types-in-sync-gateway\/\">validating the document types<\/a> from within the Sync Function.<\/p>\n<p style=\"text-align: justify\">In the video below, we are again joined by <a href=\"https:\/\/twitter.com\/jchris\">Chris Anderson<\/a> who will discuss together about Sync Gateway and dive deeper on how\u00a0to secure your mobile applications with using Channels. \u00a0We will continue to use the <a href=\"https:\/\/stackoverflow.com\">Stackoverflow<\/a> example and the tags we imported.<\/p>\n<p style=\"text-align: center\">\n<p style=\"text-align: justify\">The administrator\u00a0is able to specify whatever channel they like to see from the admin port which is secured behind a firewall. \u00a0The public port is where the end users connect to\u00a0through the privileges that are set from the &#8216;users&#8217; key. \u00a0This is defines such as:<\/p>\n<pre><code class=\"\u201cjava\">\u201cadmin_channels\u201d : [\u201candroid\u201d]<\/code><\/pre>\n<p style=\"text-align: justify\">where the user is able\u00a0to see the &#8216;android&#8217; channel; this is the Stackoverflow questions that contain all the android\u00a0tags will be available to the user if the specific tag is contained in the &#8216;admin_channels&#8217; key. \u00a0If for a particular user accesses a channel that they have not been granted for then the end user will see an empty set back. \u00a0This is channel setting on the server side where the users\/clients do not need to specify the channel that they are interested in.<\/p>\n<h3 style=\"text-align: justify\">Administrator API<\/h3>\n<p style=\"text-align: justify\">If we want our users to have different channel accesses\u00a0aside from the ones set explicitly on the server side, then a way we can set that is to use the <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/references\/sync-gateway\/admin-rest-api\/index.html\">Administrator API<\/a>. \u00a0The Admin REST API runs on port 4985 and we can update the user record with a JSON such as :<\/p>\n<pre><code class=\"\u201cjava\">{\r\n\u201cdisabled\u201d : false,\r\n\u201cadmin_channels\u201d : [\u201chtml\u201d]\r\n}<\/code><\/pre>\n<p style=\"text-align: justify\">and through the Admin REST API, we can give the GUEST user access to a different set of channels by executing the command:<\/p>\n<pre><code class=\"\u201cbash\">curl -X PUT -H content-type:application\/json -d '{\u201cdisabled\u201d: false, \u201cadmin_channels\u201d:[\u201chtml\u201d]}\u2019 https:\/\/localhost:4985\/db\/_user\/GUEST<\/code><\/pre>\n<p style=\"text-align: justify\">Sending the above request to Sync Gateway will allow\u00a0the GUEST user\u00a0to have access to the &#8216;html&#8217; channel as well. \u00a0There is an API endpoint that is <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/references\/couchbase-lite\/rest-api\/database\/get-changes\/index.html\">GET\/{db}\/_changes<\/a>\u00a0which would allow us to see all the document change request made to the database from port 4984. \u00a0From an adminstrator&#8217;s perspective, this\u00a0allows you to provide permissions to what your users is allowed to see and hence control READ access to your data.<\/p>\n<p style=\"text-align: justify\">If we now provide both the &#8216;html&#8217; and &#8216;android&#8217; tag names for the channels in the command below:<\/p>\n<pre><code class=\"\u201cbash\">curl -X PUT -H content-type:application\/json -d '{\u201cdisabled\u201d: false, \u201cadmin_channels\u201d:[\u201chtml\u201d,\"android\"]}\u2019 https:\/\/localhost:4985\/db\/_user\/GUEST<\/code><\/pre>\n<p style=\"text-align: justify\">the GUEST user will now have access to both channels and the dataset will be expanded accordingly with both &#8216;android&#8217; and &#8216;html&#8217; documents in the &#8216;_changes&#8217; endpoint.\u00a0 This controls which channels an user is allowed to see and controls READ access to the database.\u00a0 The Channel security model can be controlled with the Admin REST API and through the user requirements, you as a developer are able to incorporate fine grain level control to the database.<\/p>\n<h3 style=\"text-align: justify\">Sync Gateway<\/h3>\n<p style=\"text-align: justify\">In the Coffee on Couchbase Sync Gateway series, we have talk about <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/sync-gateway\/channels\/index.html\">Channels<\/a> and how you are able to secure or restrict proportions of your database through various feature enablements in the Sync Function.\u00a0 We will explore <a href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/1.1.0\/develop\/guides\/sync-gateway\/index.html\">Sync Gateway<\/a> further and also dive into encryption of data next in our series with <a href=\"https:\/\/www.youtube.com\/watch?v=D8N-fMP0Xjc\">ForestDB<\/a> as our new storage engine in Couchbase Lite.<\/p>\n<p style=\"text-align: justify\">Be sure to connect with us over in our <a href=\"https:\/\/www.couchbase.com\/forums\/c\/mobile\/\">Mobile Developer Forums<\/a> for any questions or on <a href=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase-sync-gateway\">Stackoverflow<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>From the previous Coffee on Couchbase Sync Gateway series, we explored how to authenticate users and also how to use Channels in Sync Gateway.\u00a0 Sync Gateway provides the data orchestration layer for Couchbase Mobile and previously we saw how data [&hellip;]<\/p>\n","protected":false},"author":30,"featured_media":13873,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1810],"tags":[],"ppma_author":[8983],"class_list":["post-2146","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-mobile"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway - The Couchbase Blog<\/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.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway\" \/>\n<meta property=\"og:description\" content=\"From the previous Coffee on Couchbase Sync Gateway series, we explored how to authenticate users and also how to use Channels in Sync Gateway.\u00a0 Sync Gateway provides the data orchestration layer for Couchbase Mobile and previously we saw how data [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-03T22:38:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-23T12:52:16+00:00\" \/>\n<meta name=\"author\" content=\"William Hoang, Mobile Developer Advocate, 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=\"William Hoang, Mobile 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\/how-to-set-channel-parameters-in-sync-gateway\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\"},\"author\":{\"name\":\"William Hoang, Mobile Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/425717456c198fdf9aaa5d7a6d42ad32\"},\"headline\":\"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway\",\"datePublished\":\"2016-02-03T22:38:12+00:00\",\"dateModified\":\"2023-06-23T12:52:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\"},\"wordCount\":571,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Mobile\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\",\"name\":\"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2016-02-03T22:38:12+00:00\",\"dateModified\":\"2023-06-23T12:52:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#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\/how-to-set-channel-parameters-in-sync-gateway\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway\"}]},{\"@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\/425717456c198fdf9aaa5d7a6d42ad32\",\"name\":\"William Hoang, Mobile Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/650445f1ea30314c4f3555dd680154f5\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g\",\"caption\":\"William Hoang, Mobile Developer Advocate, Couchbase\"},\"description\":\"William was a Developer Advocate on the Mobile Engineering\/Developer Experience team at Couchbase. His love for coffee and code has transcended him into the world of mobile while appreciating the offline in-person experiences. Prior, William worked on the Developer Relations team over at Twitter, BlackBerry, and Microsoft while also having been a Software Embedded GPS engineer at Research In Motion. William graduated from McGill University in Electrical Software Engineering\",\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/william-hoang\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway - The Couchbase Blog","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\/how-to-set-channel-parameters-in-sync-gateway\/","og_locale":"en_US","og_type":"article","og_title":"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway","og_description":"From the previous Coffee on Couchbase Sync Gateway series, we explored how to authenticate users and also how to use Channels in Sync Gateway.\u00a0 Sync Gateway provides the data orchestration layer for Couchbase Mobile and previously we saw how data [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/","og_site_name":"The Couchbase Blog","article_published_time":"2016-02-03T22:38:12+00:00","article_modified_time":"2023-06-23T12:52:16+00:00","author":"William Hoang, Mobile Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"William Hoang, Mobile Developer Advocate, Couchbase","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/"},"author":{"name":"William Hoang, Mobile Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/425717456c198fdf9aaa5d7a6d42ad32"},"headline":"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway","datePublished":"2016-02-03T22:38:12+00:00","dateModified":"2023-06-23T12:52:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/"},"wordCount":571,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Mobile"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/","url":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/","name":"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2016-02-03T22:38:12+00:00","dateModified":"2023-06-23T12:52:16+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/how-to-set-channel-parameters-in-sync-gateway\/#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\/how-to-set-channel-parameters-in-sync-gateway\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Coffee on Couchbase: How to Securely Set Channel Parameters in Sync Gateway"}]},{"@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\/425717456c198fdf9aaa5d7a6d42ad32","name":"William Hoang, Mobile Developer Advocate, Couchbase","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/650445f1ea30314c4f3555dd680154f5","url":"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g","caption":"William Hoang, Mobile Developer Advocate, Couchbase"},"description":"William was a Developer Advocate on the Mobile Engineering\/Developer Experience team at Couchbase. His love for coffee and code has transcended him into the world of mobile while appreciating the offline in-person experiences. Prior, William worked on the Developer Relations team over at Twitter, BlackBerry, and Microsoft while also having been a Software Embedded GPS engineer at Research In Motion. William graduated from McGill University in Electrical Software Engineering","url":"https:\/\/www.couchbase.com\/blog\/author\/william-hoang\/"}]}},"authors":[{"term_id":8983,"user_id":30,"is_guest":0,"slug":"william-hoang","display_name":"William Hoang, Mobile Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/b912c9a97568a859697ee195432d0bd7cc3ed67d720ae2e6588b67313fa49e08?s=96&d=mm&r=g","author_category":"","last_name":"Hoang","first_name":"William","job_title":"","user_url":"","description":"William was a Developer Advocate on the Mobile Engineering\/Developer Experience team at Couchbase. His love for coffee and code has transcended him into the world of mobile while appreciating the offline in-person experiences. Prior, William worked on the Developer Relations team over at Twitter, BlackBerry, and Microsoft while also having been a Software Embedded GPS engineer at Research In Motion. William graduated from McGill University in Electrical Software Engineering"}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2146","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\/30"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=2146"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/2146\/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=2146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=2146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=2146"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=2146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}