{"id":1585,"date":"2014-12-16T19:26:34","date_gmt":"2014-12-16T19:26:34","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=1585"},"modified":"2017-05-02T15:46:47","modified_gmt":"2017-05-02T22:46:47","slug":"couchtalk-calling","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/couchtalk-calling\/","title":{"rendered":"Chamada do CouchTalk"},"content":{"rendered":"<h2>tldr;<\/h2>\n<p>The storage part of CouchTalk is easy, just jpeg and wav resources keyed by id. What&#8217;s interesting is the application model that assumes sequential keys, allowing the front end to index into the data without issuing any queries. To detect the last key we just watch browser events on the img tag and stop on 404.<\/p>\n<h2>Talk What?<\/h2>\n<p>Everyone knows push-to-talk messaging is hot, and the audio\/video features in HTML5 bring it within our grasp from JavaScript. As a web dev, I\u2019m always interested in pushing the edge of what\u2019s practical with today\u2019s browsers. If you haven\u2019t played with CouchTalk yet, go do it now (requires Google Chrome).<\/p>\n<h2>Design Considerations<\/h2>\n<p>The main aspect of Couchbase Server I wanted to highlight with the CouchTalk app is speed. Push-to-talk is especially performance sensitive \u2014 add a few tenths of a second latency and an app can go from fun to sluggish. Couchbase Server\u2019s managed memory architecture means that the performance you see today is primarily limited by the end-to-end Internet latency, with response times at the application server mostly based on the data sizes. Small thumbnails are served in a few milliseconds, where large images can take longer as they are limited by the connection speeds.<\/p>\n<h2>Implementation (Architecture and Data Model)<\/h2>\n<p>The application server is extremely simple, just an HTTP server for reading and writing images and audio clips, and a web endpoint to hand out new message ids to clients.<\/p>\n<p>The HTTP server requests can be load balanced across the node.js servers in whatever way, so scaling that aspect of the application is a matter of following Couchbase Server sizing practices, and adding more node.js servers when needed.<\/p>\n<p>PubNub is used to notify room members of new changes. The PubNub messages do not contain actual images or audio clips. Instead the messages send document IDs, which the client can use to request the media.<\/p>\n<p>The data model is driven by an INCR key pattern, so for each message in the room, the client declares their intent to save a message, and the server gives them a key to save it under. They keys are formatted `room-sequence` where the sequence is an incrementing integer. Clients already know which room they are in, so once they know a current sequence, they can backfill recent messages by generating their keys.<\/p>\n<p>When a client asks for the next message ID it just increments the key and sends the result back to the client. Increment operations are atomic so you can use them to construct a keyspace without any collisions.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace;\">\u00a0 \u00a0 db.incr(\u201cct-&#8220;+room, {initial: 0}, function(err, result){<br \/>\ncb(err, [&#8220;snap&#8221;,room,result.value].join(&#8216;-&#8216;))<br \/>\n})<\/div>\n<\/div>\n<p>This key pattern is a great way to manage related data in Couchbase Server. Another example would be: if you know the number of comments on a blog post you can load all the comments. Or in the case of CouchTalk: there\u2019s no need to track how many snapshots are part of a clip, as long as you know how long the clip is and how frequently new snapshots are taken.<\/p>\n<p>When images or audio are saved to the server, we use the \u201cadd\u201d command instead of \u201cset\u201d to ensure that images and audio are immutable, once they\u2019ve been set they won&#8217;t be modified.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace;\">\u00a0 \u00a0 db.add(req.params.snapshot_id, new Buffer(data, &#8220;base64&#8221;), opts, function(err, result) {})<\/div>\n<\/div>\n<p><span style=\"font-family: inherit; font-size: 1em;\">Note that we are directly saving a binary buffer into the database. Thanks Couchbase!<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>tldr; The storage part of CouchTalk is easy, just jpeg and wav resources keyed by id. What&#8217;s interesting is the application model that assumes sequential keys, allowing the front end to index into the data without issuing any queries. To [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":13873,"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":[8974],"class_list":["post-1585","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>CouchTalk Calling - 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\/pt\/couchtalk-calling\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CouchTalk Calling\" \/>\n<meta property=\"og:description\" content=\"tldr; The storage part of CouchTalk is easy, just jpeg and wav resources keyed by id. What&#8217;s interesting is the application model that assumes sequential keys, allowing the front end to index into the data without issuing any queries. To [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/couchtalk-calling\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2014-12-16T19:26:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-05-02T22:46:47+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=\"J. Chris Anderson, Co-Founder and Mobile Architect, 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=\"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/\"},\"author\":{\"name\":\"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#\\\/schema\\\/person\\\/a84a25965e85f0df5045b90d5131c970\"},\"headline\":\"CouchTalk Calling\",\"datePublished\":\"2014-12-16T19:26:34+00:00\",\"dateModified\":\"2017-05-02T22:46:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/\"},\"wordCount\":585,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Uncategorized\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/\",\"name\":\"CouchTalk Calling - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/1\\\/2022\\\/11\\\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2014-12-16T19:26:34+00:00\",\"dateModified\":\"2017-05-02T22:46:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/couchtalk-calling\\\/#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\\\/couchtalk-calling\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CouchTalk Calling\"}]},{\"@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\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@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\\\/a84a25965e85f0df5045b90d5131c970\",\"name\":\"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g3b845df9c9cb4e78ccc618b81ebf4c85\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g\",\"caption\":\"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase\"},\"url\":\"https:\\\/\\\/www.couchbase.com\\\/blog\\\/pt\\\/author\\\/j-chris-anderson\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"CouchTalk Calling - 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\/pt\/couchtalk-calling\/","og_locale":"pt_BR","og_type":"article","og_title":"CouchTalk Calling","og_description":"tldr; The storage part of CouchTalk is easy, just jpeg and wav resources keyed by id. What&#8217;s interesting is the application model that assumes sequential keys, allowing the front end to index into the data without issuing any queries. To [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/couchtalk-calling\/","og_site_name":"The Couchbase Blog","article_published_time":"2014-12-16T19:26:34+00:00","article_modified_time":"2017-05-02T22:46:47+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":"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase","Est. reading time":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/"},"author":{"name":"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/a84a25965e85f0df5045b90d5131c970"},"headline":"CouchTalk Calling","datePublished":"2014-12-16T19:26:34+00:00","dateModified":"2017-05-02T22:46:47+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/"},"wordCount":585,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Uncategorized"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/","url":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/","name":"CouchTalk Calling - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2014-12-16T19:26:34+00:00","dateModified":"2017-05-02T22:46:47+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/couchtalk-calling\/#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\/couchtalk-calling\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"CouchTalk Calling"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","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":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@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\/a84a25965e85f0df5045b90d5131c970","name":"J. Chris Anderson, cofundador e arquiteto de dispositivos m\u00f3veis, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g3b845df9c9cb4e78ccc618b81ebf4c85","url":"https:\/\/secure.gravatar.com\/avatar\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g","caption":"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase"},"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/j-chris-anderson\/"}]}},"acf":[],"authors":[{"term_id":8974,"user_id":5,"is_guest":0,"slug":"j-chris-anderson","display_name":"J. Chris Anderson, Co-Founder and Mobile Architect, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/1ec96665f438e5c389cd989f227c4ca973c97775c034fe3327866b6603bf7f6c?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1585","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=1585"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/1585\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/13873"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=1585"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=1585"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=1585"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=1585"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}