{"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>A parte de armazenamento do CouchTalk \u00e9 f\u00e1cil, apenas recursos jpeg e wav codificados por id. O que \u00e9 interessante \u00e9 o modelo de aplicativo que assume chaves sequenciais, permitindo que o front-end indexe os dados sem emitir nenhuma consulta. Para detectar a \u00faltima chave, apenas observamos os eventos do navegador na tag img e paramos no 404.<\/p>\n<h2>Falar o qu\u00ea?<\/h2>\n<p>Todo mundo sabe que as mensagens push-to-talk est\u00e3o em alta, e os recursos de \u00e1udio\/v\u00eddeo do HTML5 permitem que elas sejam acess\u00edveis a partir do JavaScript. Como desenvolvedor da Web, estou sempre interessado em ir al\u00e9m do que \u00e9 pr\u00e1tico com os navegadores atuais. Se voc\u00ea ainda n\u00e3o experimentou o CouchTalk, fa\u00e7a isso agora (requer o Google Chrome).<\/p>\n<h2>Considera\u00e7\u00f5es sobre o projeto<\/h2>\n<p>O principal aspecto do Couchbase Server que eu queria destacar com o aplicativo CouchTalk \u00e9 a velocidade. O push-to-talk \u00e9 especialmente sens\u00edvel ao desempenho - adicione alguns d\u00e9cimos de segundo de lat\u00eancia e um aplicativo pode passar de divertido a lento. A arquitetura de mem\u00f3ria gerenciada do Couchbase Server significa que o desempenho que voc\u00ea v\u00ea hoje \u00e9 limitado principalmente pela lat\u00eancia da Internet de ponta a ponta, com tempos de resposta no servidor de aplicativos baseados principalmente no tamanho dos dados. Miniaturas pequenas s\u00e3o servidas em poucos milissegundos, enquanto imagens grandes podem demorar mais, pois s\u00e3o limitadas pelas velocidades de conex\u00e3o.<\/p>\n<h2>Implementa\u00e7\u00e3o (arquitetura e modelo de dados)<\/h2>\n<p>O servidor de aplicativos \u00e9 extremamente simples, apenas um servidor HTTP para leitura e grava\u00e7\u00e3o de imagens e clipes de \u00e1udio, e um ponto de extremidade da Web para distribuir novos IDs de mensagens aos clientes.<\/p>\n<p>As solicita\u00e7\u00f5es do servidor HTTP podem ser balanceadas entre os servidores node.js de qualquer maneira, portanto, o dimensionamento desse aspecto do aplicativo \u00e9 uma quest\u00e3o de seguir as pr\u00e1ticas de dimensionamento do Couchbase Server e adicionar mais servidores node.js quando necess\u00e1rio.<\/p>\n<p>O PubNub \u00e9 usado para notificar os membros da sala sobre novas altera\u00e7\u00f5es. As mensagens do PubNub n\u00e3o cont\u00eam imagens ou clipes de \u00e1udio reais. Em vez disso, as mensagens enviam IDs de documentos, que o cliente pode usar para solicitar a m\u00eddia.<\/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>Quando um cliente solicita o ID da pr\u00f3xima mensagem, ele simplesmente incrementa a chave e envia o resultado de volta ao cliente. As opera\u00e7\u00f5es de incremento s\u00e3o at\u00f4micas, portanto, voc\u00ea pode us\u00e1-las para construir um espa\u00e7o de chaves sem colis\u00f5es.<\/p>\n<div class=\"geshifilter\">\n<div class=\"text geshifilter-text\" style=\"font-family: monospace;\">\u00a0 \u00a0 db.incr(\"ct-\"+room, {initial: 0}, function(err, result){<br \/>\ncb(err, [\"snap\",room,result.value].join('-'))<br \/>\n})<\/div>\n<\/div>\n<p>Esse padr\u00e3o de chave \u00e9 uma \u00f3tima maneira de gerenciar dados relacionados no Couchbase Server. Outro exemplo seria: se voc\u00ea souber o n\u00famero de coment\u00e1rios em uma postagem de blog, poder\u00e1 carregar todos os coment\u00e1rios. Ou, no caso do CouchTalk: n\u00e3o h\u00e1 necessidade de rastrear quantos instant\u00e2neos fazem parte de um clipe, desde que voc\u00ea saiba a dura\u00e7\u00e3o do clipe e a frequ\u00eancia com que novos instant\u00e2neos s\u00e3o tirados.<\/p>\n<p>Quando as imagens ou o \u00e1udio s\u00e3o salvos no servidor, usamos o comando \"add\" em vez de \"set\" para garantir que as imagens e o \u00e1udio sejam imut\u00e1veis; uma vez definidos, eles n\u00e3o ser\u00e3o modificados.<\/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, \"base64\"), opts, function(err, result) {})<\/div>\n<\/div>\n<p><span style=\"font-family: inherit; font-size: 1em;\">Observe que estamos salvando diretamente um buffer bin\u00e1rio no banco de dados. Obrigado, Couchbase!<\/span><\/p>","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>","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"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.2 (Yoast SEO v26.2) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\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:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/3b845df9c9cb4e78ccc618b81ebf4c85\",\"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:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/3b845df9c9cb4e78ccc618b81ebf4c85","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\/"}]}},"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","author_category":"","last_name":"Chris Anderson","first_name":"J.","job_title":"","user_url":"","description":""}],"_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}]}}