{"id":5894,"date":"2018-10-12T13:16:47","date_gmt":"2018-10-12T20:16:47","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5894"},"modified":"2025-06-13T20:52:35","modified_gmt":"2025-06-14T03:52:35","slug":"offline-barcode-scanning-zebra-datawedge-couchbase-mobile","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/","title":{"rendered":"Escaneamento de invent\u00e1rio off-line com o Zebra DataWedge e o Couchbase Mobile"},"content":{"rendered":"<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div style=\"margin: 0 auto\">\n<div class=\"mceTemp\"><\/div>\n<\/div>\n<div style=\"clear: both\"><\/div>\n<p><span class=\"image\"><a class=\"image\" title=\"https:\/\/www.couchbase.com\/downloads\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/badge\/Couchbase%20Server-v5.5-red.svg\" alt=\"Couchbase%20Server v5.5 red\" \/><\/a><\/span>\u00a0<span class=\"image\"><a class=\"image\" title=\"https:\/\/www.couchbase.com\/downloads\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/badge\/Sync%20Gateway-v2.1-red.svg\" alt=\"Sync%20Gateway v2.1 red\" \/><\/a><\/span>\u00a0<span class=\"image\"><a class=\"image\" title=\"https:\/\/www.couchbase.com\/downloads\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\"><img decoding=\"async\" src=\"https:\/\/img.shields.io\/badge\/Couchbase%20Lite-v2.1-red.svg\" alt=\"Couchbase%20Lite v2.1 red\" \/><\/a><\/span><\/p>\n<\/div>\n<h2 id=\"_introduction\" class=\"discrete\">Introdu\u00e7\u00e3o<\/h2>\n<div class=\"paragraph\">\n<p><a title=\"https:\/\/www.zebra.com\/us\/en.html\" href=\"https:\/\/www.zebra.com\/us\/en.html\">Zebra Technologies<\/a>\u2122 \u00e9 l\u00edder global em impress\u00e3o de c\u00f3digos de barras, computa\u00e7\u00e3o m\u00f3vel, captura de dados e recursos relacionados. A Zebra oferece uma linha completa de computadores de m\u00e3o robustos com scanners de c\u00f3digo de barras incorporados. Esses dispositivos baseados em Android t\u00eam uma ampla gama de aplicativos, incluindo rastreamento de entregas, venda assistida e gerenciamento de ativos, para citar alguns.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Muitos desses aplicativos se encaixam perfeitamente com o\u00a0<a title=\"https:\/\/www.couchbase.com\/developers\/mobile\/\" href=\"https:\/\/developer.couchbase.com\/mobile\">Couchbase Mobile<\/a>\u00a0que fornece a plataforma de dados de apoio. Como o Couchbase Lite \u00e9 um banco de dados NoSQL verdadeiro e completo, voc\u00ea tem o desempenho dos dados no dispositivo combinado com a f\u00e1cil sincroniza\u00e7\u00e3o fora do dispositivo.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para demonstrar um caso de uso, criamos um aplicativo de digitaliza\u00e7\u00e3o de invent\u00e1rio de amostra.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<div style=\"margin: 0 auto\">\n<div style=\"width: 210px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" style=\"margin: 0 auto\" src=\"https:\/\/raw.githubusercontent.com\/couchbaselabs\/blog-source-code\/master\/Greeley\/0051ZebraInventory\/images\/application.png\" alt=\"Screenshot\" width=\"200\" height=\"1280\" \/><p class=\"wp-caption-text\">Captura de tela<\/p><\/div>\n<\/div>\n<div style=\"clear: both\"><\/div>\n<p>Os dados consistem em informa\u00e7\u00f5es sobre um conjunto fict\u00edcio de livros. A leitura dos c\u00f3digos de barras ISBN extrai as informa\u00e7\u00f5es do\u00a0<a title=\"https:\/\/www.couchbase.com\/products\/lite\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/lite\/\">Couchbase Lite<\/a>\u00a0banco de dados incorporado. Ele se baseia no\u00a0<a title=\"https:\/\/www.zebra.com\/us\/en\/products\/software\/mobile-computers\/datawedge.html\" href=\"https:\/\/www.zebra.com\/us\/en\/products\/software\/mobile-computers\/datawedge.html\">Zebra DataWedge<\/a>\u00a0para leitura de c\u00f3digo de barras ISBN.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O aplicativo completo, juntamente com dados de amostra, est\u00e1 dispon\u00edvel no GitHub\u00a0<a title=\"https:\/\/github.com\/HodGreeley\/Zebra-Inventory\" href=\"https:\/\/github.com\/HodGreeley\/Zebra-Inventory\">aqui<\/a>. Esta postagem examinar\u00e1 o c\u00f3digo. Para ver a demonstra\u00e7\u00e3o em a\u00e7\u00e3o e saber mais sobre a Zebra e o Couchbase, assista a este webinar do Zebra DEVTALK.<\/p>\n<\/div>\n<div class=\"videoblock\">\n<div class=\"content\"><\/div>\n<\/div>\n<div id=\"toc\" class=\"toc\">\n<div id=\"toctitle\" class=\"title\">Conte\u00fado<\/div>\n<ul class=\"sectlevel1\">\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_overview\" href=\"#_overview\">Vis\u00e3o geral<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_the_zebra_datawedge_profile\" href=\"#_the_zebra_datawedge_profile\">O perfil do Zebra DataWedge<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_initializing_the_database_and_starting_replication\" href=\"#_initializing_the_database_and_starting_replication\">Inicializa\u00e7\u00e3o do banco de dados e in\u00edcio da replica\u00e7\u00e3o<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_soft_scan_button\" href=\"#_soft_scan_button\">Bot\u00e3o de varredura suave<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_receiving_scan_results\" href=\"#_receiving_scan_results\">Recebimento de resultados de exames<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_setting_up_the_query\" href=\"#_setting_up_the_query\">Configura\u00e7\u00e3o da consulta<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_query_execution_and_results\" href=\"#_query_execution_and_results\">Execu\u00e7\u00e3o de consultas e resultados<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_wrapping_up\" href=\"#_wrapping_up\">Concluindo<\/a><\/li>\n<li><a title=\"file:\/\/\/Applications\/Visual%20Studio%20Code.app\/Contents\/Resources\/app\/out\/vs\/workbench\/parts\/webview\/electron-browser\/webview.html#_postscript\" href=\"#_postscript\">P\u00f3s-escrito<\/a><\/li>\n<\/ul>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_overview\">Vis\u00e3o geral<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O aplicativo consiste em uma \u00fanica atividade. O Couchbase Lite \u00e9 integrado como uma biblioteca no projeto. O aplicativo \u00e9 instalado sem nenhum dado. Armazenamos os dados de invent\u00e1rio no Couchbase Server. Os dados do dispositivo ser\u00e3o preenchidos em tempo de execu\u00e7\u00e3o usando uma replica\u00e7\u00e3o bidirecional.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O DataWedge \u00e9 executado como um componente separado no dispositivo. A API \u00e9 totalmente orientada por Intents. Acionamos a varredura transmitindo uma inten\u00e7\u00e3o, e os dados retornam por meio de uma. Para habilitar isso, voc\u00ea associa um perfil do DataWedge ao seu aplicativo. (Dessa forma, o DataWedge pode, entre outras coisas, direcionar o aplicativo especificamente ao retornar um resultado).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O c\u00f3digo (al\u00e9m do trabalho da interface do usu\u00e1rio) consiste em configurar o banco de dados, iniciar uma replica\u00e7\u00e3o e adicionar um bot\u00e3o de acionamento de verifica\u00e7\u00e3o. Quando o resultado da verifica\u00e7\u00e3o retorna (lembre-se de que \u00e9 um ISBN), o aplicativo consulta o banco de dados para obter os detalhes do livro e os exibe. (Como observa\u00e7\u00e3o, usamos o RxJava para lidar com multi-threading).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_the_zebra_datawedge_profile\">O perfil do Zebra DataWedge<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O DataWedge faz uso elegante do sistema Android Intent. Isso requer a configura\u00e7\u00e3o de um perfil. Estas capturas de tela mostram as op\u00e7\u00f5es usadas aqui.<\/p>\n<\/div>\n<div class=\"openblock float-group\">\n<div class=\"content\">\n<div class=\"imageblock\">\n<div class=\"content\">\n<div style=\"float: left;margin-right: 5px\">\n<div style=\"width: 210px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/couchbaselabs\/blog-source-code\/master\/Greeley\/0051ZebraInventory\/images\/profile_1.png\" alt=\"Enable Scanning\" width=\"200\" height=\"1280\" \/><p class=\"wp-caption-text\">Ativar a varredura<\/p><\/div>\n<\/div>\n<div style=\"float: left;margin-right: 5px\">\n<div style=\"width: 210px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/raw.githubusercontent.com\/couchbaselabs\/blog-source-code\/master\/Greeley\/0051ZebraInventory\/images\/profile_2.png\" alt=\"Enable Intents\" width=\"200\" height=\"1280\" \/><p class=\"wp-caption-text\">Ativar inten\u00e7\u00f5es<\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div style=\"clear: both\"><\/div>\n<div class=\"paragraph\">\n<p>Observe especialmente a configura\u00e7\u00e3o \"Intent action\". Precisaremos da mesma cadeia de caracteres no pr\u00f3prio aplicativo.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_initializing_the_database_and_starting_replication\">Inicializa\u00e7\u00e3o do banco de dados e in\u00edcio da replica\u00e7\u00e3o<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para manter o aplicativo compacto, inicializamos o banco de dados no\u00a0<code>onCreate<\/code>\u00a0no m\u00e9todo\u00a0<code>ScanActivity<\/code>\u00a0classe. Tamb\u00e9m configuramos a replica\u00e7\u00e3o l\u00e1.<\/p>\n<pre class=\"theme:tomorrow-night lang:java decode:true\">\/\/ com\/couchbase\/mobile\/zebra\/ScanActivity.java\r\n\r\ntry {\r\n    DatabaseConfiguration config = new DatabaseConfiguration(getApplicationContext());\r\n    database = new Database(\"inventory\", config);\r\n\r\n    Endpoint targetEndpoint = new URLEndpoint(new URI(\"ws:\/\/localhost:4984\/inventory\"));\r\n    ReplicatorConfiguration repConfig = new ReplicatorConfiguration(database, targetEndpoint)\r\n            .setReplicatorType(ReplicatorConfiguration.ReplicatorType.PUSH_AND_PULL)\r\n            .setAuthenticator(new BasicAuthenticator(\"user\", \"password\"))\r\n            .setContinuous(true);\r\n    Replicator replicator = new Replicator(repConfig);\r\n    replicator.start();\r\n} catch(CouchbaseLiteException | URISyntaxException ex) {\r\n    ex.printStackTrace();\r\n}<\/pre>\n<\/div>\n<div class=\"paragraph\">\n<p>Tudo isso \u00e9 muito simples. O ponto de extremidade \u00e9 o endere\u00e7o da nossa inst\u00e2ncia do Sync Gateway. Definir a replica\u00e7\u00e3o para\u00a0<code>cont\u00ednuo<\/code>\u00a0faz com que o Couchbase atualize constantemente o banco de dados em segundo plano.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_soft_scan_button\">Bot\u00e3o de varredura suave<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Os dispositivos Zebra t\u00eam hardware dedicado para acionar o escaneamento. Adicionamos um bot\u00e3o na interface do usu\u00e1rio para fazer isso tamb\u00e9m. O retorno de chamada para cliques no bot\u00e3o mostra como usar a API baseada em inten\u00e7\u00e3o do DataWedge. Basta preencher a inten\u00e7\u00e3o com algumas cadeias de caracteres chave e deixar o Android cuidar do resto.<\/p>\n<pre class=\"theme:tomorrow-night lang:java decode:true\">softScanButton.setOnClickListener(view -&gt; {\r\n    Intent intent = new Intent();\r\n    intent.setAction(DATAWEDGE_ACTION);\r\n    intent.putExtra(DATAWEDGE_SOFT_SCAN_TRIGGER, DATAWEDGE_TOGGLE_SCANNING);\r\n    sendBroadcast(intent);\r\n});<\/pre>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_receiving_scan_results\">Recebimento de resultados de exames<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Uma vez acionado, o scanner se acende e captura os dados em segundo plano. Se for bem-sucedido, as informa\u00e7\u00f5es do c\u00f3digo de barras ser\u00e3o retornadas, tamb\u00e9m usando uma inten\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Configuramos o DataWedge para fornecer a inten\u00e7\u00e3o usando\u00a0<code>startActivity<\/code>. \u00c9 aqui que o\u00a0<code>A\u00e7\u00e3o intencional<\/code>\u00a0entra em a\u00e7\u00e3o a partir do perfil. Definimos um filtro de inten\u00e7\u00e3o em nosso manifesto do Android para corresponder \u00e0 string dessa configura\u00e7\u00e3o.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por padr\u00e3o, isso normalmente criaria uma nova inst\u00e2ncia da atividade correspondente. Aqui, queremos apenas manter a mesma atividade em andamento e deix\u00e1-la processar o resultado. Fazemos isso definindo o modo de lan\u00e7amento da atividade como\u00a0<code>singleTop<\/code>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso significa que a inten\u00e7\u00e3o ser\u00e1 entregue por meio do\u00a0<code>onNewIntent<\/code>\u00a0m\u00e9todo. Isso n\u00e3o afeta a inten\u00e7\u00e3o original que iniciou a atividade em primeiro lugar. Usamos um padr\u00e3o comum de redefinir a inten\u00e7\u00e3o da atividade para a nova inten\u00e7\u00e3o em\u00a0<code>onNewIntent<\/code>e, em seguida, processando-o em\u00a0<code>onResume<\/code>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_setting_up_the_query\">Configura\u00e7\u00e3o da consulta<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Interior\u00a0<code>onResume<\/code>Em seguida, fazemos uma verifica\u00e7\u00e3o para ver se a inten\u00e7\u00e3o corresponde ao que esper\u00e1vamos. Depois disso, extra\u00edmos o n\u00famero ISBN e realizamos nossa consulta.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>O Couchbase Lite usa uma interface no estilo de construtor para criar consultas. A API foi projetada para mapear diretamente para uma instru\u00e7\u00e3o SQL. Aqui, o SQL equivalente seria\u00a0<code>SELECT * FROM inventory WHERE isbn = \"\";<\/code>, onde\u00a0<code>&lt;scan result&gt;<\/code>representa a cadeia de caracteres que nos foi devolvida.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Isso se traduz no seguinte c\u00f3digo.<\/p>\n<pre class=\"theme:tomorrow-night lang:java decode:true\">String isbn = intent.getStringExtra(DATAWEDGE_INTENT_DATA);\r\n\r\n...\r\n\r\nQuery query = QueryBuilder\r\n        .select(SelectResult.all())\r\n        .from(DataSource.database(database))\r\n        .where(Expression.property(\"isbn\").equalTo(Expression.string(isbn)));<\/pre>\n<\/div>\n<div class=\"paragraph\">\n<p>Esse recurso de consulta din\u00e2mica foi adicionado ao Couchbase Lite 2.0. Ele \u00e9 baseado na linguagem de consulta N1QL do Couchbase, que \u00e9 um superconjunto do SQL. Para uma introdu\u00e7\u00e3o mais profunda \u00e0s consultas no Couchbase Lite, recomendo a leitura de\u00a0<a title=\"https:\/\/www.couchbase.com\/blog\/sql-for-json-query-interface-couchbase-mobile\/\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/sql-for-json-query-interface-couchbase-mobile\/\">esta postagem do blog<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_query_execution_and_results\">Execu\u00e7\u00e3o de consultas e resultados<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Com o objeto de consulta em m\u00e3os, n\u00f3s o executamos e recuperamos os resultados como uma lista. Esperamos que cada ISBN corresponda a um \u00fanico livro. Se for bem-sucedida, mostraremos uma miniatura da capa do livro e outras informa\u00e7\u00f5es. Se o livro estiver faltando ou se obtivermos mais de um resultado, mostraremos um erro no lugar da capa do livro. Esse c\u00f3digo \u00e9 agrupado usando o RxJava para que a consulta seja executada em um thread em segundo plano.<\/p>\n<pre class=\"theme:tomorrow-night lang:java decode:true\">try {\r\n    results = query.execute().allResults();\r\n} catch(CouchbaseLiteException ex) {\r\n    source.onError((ex));\r\n}\r\n\r\nif (0 == results.size()) {\r\n    info = warning(\"Missing\");\r\n} else if (1 &lt; results.size()) {\r\n    info = warning(\"Duplicate\");\r\n} else {\r\n    Dictionary result = results.get(0).getDictionary(database.getName());\r\n    info = result.toMap();\r\n\r\n    InputStream is = result.getBlob(\"cover\").getContentStream();\r\n    Bitmap thumbnail = BitmapFactory.decodeStream(is);\r\n    info.put(\"thumbnail\", thumbnail);\r\n}<\/pre>\n<\/div>\n<div class=\"paragraph\">\n<p>Recuperamos todo o conte\u00fado do documento como um objeto Dictionary. (Dicion\u00e1rios s\u00e3o estruturas de dados imut\u00e1veis com sem\u00e2ntica semelhante a um mapa definida pelo Couchbase Lite). Precisamos converter a imagem da capa do livro, anexada como um blob, em um bitmap. Por conveni\u00eancia, convertemos o dicion\u00e1rio em um mapa, criamos o bitmap e o adicionamos ao mapa. Isso \u00e9 passado para o c\u00f3digo da interface do usu\u00e1rio.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_wrapping_up\">Concluindo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O reposit\u00f3rio do GitHub para esse projeto tem todos os extras necess\u00e1rios para execut\u00e1-lo. H\u00e1 um arquivo de configura\u00e7\u00e3o do Sync Gateway, configurado para se comunicar com uma inst\u00e2ncia local do Couchbase Server. Voc\u00ea tamb\u00e9m pode encontrar um PDF com alguns exemplos de c\u00f3digos de barras.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Para saber mais sobre como integrar o escaneamento de c\u00f3digo de barras em seu aplicativo, visite\u00a0<a class=\"bare\" title=\"https:\/\/developer.zebra.com\/\" href=\"https:\/\/developer.zebra.com\">https:\/\/developer.zebra.com<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_postscript\">P\u00f3s-escrito<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>O Couchbase \u00e9 de c\u00f3digo aberto e\u00a0<a title=\"https:\/\/www.couchbase.com\/downloads\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/downloads\/\">gr\u00e1tis para experimentar<\/a>.<br \/>\n<strong>Comece a usar<\/strong>\u00a0com\u00a0<a title=\"https:\/\/www.couchbase.com\/get-started\" href=\"https:\/\/developer.couchbase.com\/tutorials\">c\u00f3digo de amostra, consultas de exemplo, tutoriais e muito mais<\/a>.<br \/>\nEncontre mais recursos em nosso\u00a0<a title=\"https:\/\/developer.couchbase.com\/community\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/developers\/community\/\">portal do desenvolvedor<\/a>.<br \/>\nSiga-nos no Twitter\u00a0<a title=\"https:\/\/twitter.com\/CouchbaseDev\" href=\"https:\/\/twitter.com\/CouchbaseDev\">@CouchbaseDev<\/a>.<br \/>\nVoc\u00ea pode postar perguntas em nosso\u00a0<a title=\"https:\/\/www.couchbase.com\/forums\/\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\">f\u00f3runs<\/a>.<br \/>\nParticipamos ativamente de\u00a0<a title=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\" href=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\">Estouro de pilha<\/a>.<br \/>\nEntre em contato comigo pelo Twitter com perguntas, coment\u00e1rios, t\u00f3picos que voc\u00ea gostaria de ver etc.\u00a0<a title=\"https:\/\/twitter.com\/HodGreeley\" href=\"https:\/\/twitter.com\/HodGreeley\">@HodGreeley<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>\u00a0\u00a0 Introduction Zebra Technologies\u2122 is a global leader in barcode printing, mobile computing, data capture, and related capabilities. Zebra offers a complete line of ruggedized handheld computers with built-in bar code scanners. These Android-based devices have a wide range of [&hellip;]<\/p>","protected":false},"author":73,"featured_media":5895,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[2370,1815,7667,1810,1812,2366],"tags":[],"ppma_author":[9042],"class_list":["post-5894","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-best-practices-and-tutorials","category-couchbase-lite","category-couchbase-mobile","category-n1ql-query","category-sync-gateway"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.9 (Yoast SEO v25.9) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Zebra DataWedge Profile - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Android Mobile tutorial showing offline barcode scanning synced to a backing database using Zebra DataWedge and Couchbase Mobile.\" \/>\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\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Offline Inventory Scanning with Zebra DataWedge and Couchbase Mobile\" \/>\n<meta property=\"og:description\" content=\"Android Mobile tutorial showing offline barcode scanning synced to a backing database using Zebra DataWedge and Couchbase Mobile.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-10-12T20:16:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T03:52:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png\" \/>\n\t<meta property=\"og:image:width\" content=\"670\" \/>\n\t<meta property=\"og:image:height\" content=\"404\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Hod Greeley, Developer Advocate, Couchbase\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@HodGreeley\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hod Greeley, Developer Advocate, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\"},\"author\":{\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4\"},\"headline\":\"Offline Inventory Scanning with Zebra DataWedge and Couchbase Mobile\",\"datePublished\":\"2018-10-12T20:16:47+00:00\",\"dateModified\":\"2025-06-14T03:52:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\"},\"wordCount\":1057,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png\",\"articleSection\":[\"Android\",\"Best Practices and Tutorials\",\"Couchbase Lite\",\"Couchbase Mobile\",\"SQL++ \/ N1QL Query\",\"Sync Gateway\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\",\"name\":\"The Zebra DataWedge Profile - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png\",\"datePublished\":\"2018-10-12T20:16:47+00:00\",\"dateModified\":\"2025-06-14T03:52:35+00:00\",\"description\":\"Android Mobile tutorial showing offline barcode scanning synced to a backing database using Zebra DataWedge and Couchbase Mobile.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png\",\"width\":670,\"height\":404},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Offline Inventory Scanning with Zebra DataWedge and Couchbase Mobile\"}]},{\"@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\/9b62593c8a13531e53d52fcd5aabbca4\",\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/21eb69cb5d4a401fb23b149e4f4e9e87\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g\",\"caption\":\"Hod Greeley, Developer Advocate, Couchbase\"},\"description\":\"Hod Greeley is a Developer Advocate for Couchbase, living in Silicon Valley. He has over two decades of experience as a software engineer and engineering manager. He has worked in a variety of software fields, including computational physics and chemistry, computer and network security, finance, and mobile. Prior to joining Couchbase in 2016, Hod led developer relations for mobile at Samsung. Hod holds a Ph.D. in chemical physics from Columbia University.\",\"sameAs\":[\"https:\/\/hod.greeley.org\/blog\",\"https:\/\/x.com\/HodGreeley\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/hod-greeley\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The Zebra DataWedge Profile - The Couchbase Blog","description":"Tutorial para Android Mobile mostrando o escaneamento de c\u00f3digo de barras off-line sincronizado com um banco de dados de apoio usando o Zebra DataWedge e o Couchbase Mobile.","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\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/","og_locale":"pt_BR","og_type":"article","og_title":"Offline Inventory Scanning with Zebra DataWedge and Couchbase Mobile","og_description":"Android Mobile tutorial showing offline barcode scanning synced to a backing database using Zebra DataWedge and Couchbase Mobile.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-10-12T20:16:47+00:00","article_modified_time":"2025-06-14T03:52:35+00:00","og_image":[{"width":670,"height":404,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png","type":"image\/png"}],"author":"Hod Greeley, Developer Advocate, Couchbase","twitter_card":"summary_large_image","twitter_creator":"@HodGreeley","twitter_misc":{"Written by":"Hod Greeley, Developer Advocate, Couchbase","Est. reading time":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/"},"author":{"name":"Hod Greeley, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4"},"headline":"Offline Inventory Scanning with Zebra DataWedge and Couchbase Mobile","datePublished":"2018-10-12T20:16:47+00:00","dateModified":"2025-06-14T03:52:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/"},"wordCount":1057,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png","articleSection":["Android","Best Practices and Tutorials","Couchbase Lite","Couchbase Mobile","SQL++ \/ N1QL Query","Sync Gateway"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/","url":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/","name":"The Zebra DataWedge Profile - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png","datePublished":"2018-10-12T20:16:47+00:00","dateModified":"2025-06-14T03:52:35+00:00","description":"Tutorial para Android Mobile mostrando o escaneamento de c\u00f3digo de barras off-line sincronizado com um banco de dados de apoio usando o Zebra DataWedge e o Couchbase Mobile.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/10\/hero.png","width":670,"height":404},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/offline-barcode-scanning-zebra-datawedge-couchbase-mobile\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Offline Inventory Scanning with Zebra DataWedge and Couchbase Mobile"}]},{"@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\/9b62593c8a13531e53d52fcd5aabbca4","name":"Hod Greeley, Advogado do desenvolvedor, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/21eb69cb5d4a401fb23b149e4f4e9e87","url":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","caption":"Hod Greeley, Developer Advocate, Couchbase"},"description":"Hod Greeley \u00e9 um defensor dos desenvolvedores da Couchbase e mora no Vale do Sil\u00edcio. Ele tem mais de duas d\u00e9cadas de experi\u00eancia como engenheiro de software e gerente de engenharia. Trabalhou em diversas \u00e1reas de software, incluindo f\u00edsica e qu\u00edmica computacional, seguran\u00e7a de computadores e redes, finan\u00e7as e dispositivos m\u00f3veis. Antes de ingressar na Couchbase em 2016, Hod liderou as rela\u00e7\u00f5es com desenvolvedores para dispositivos m\u00f3veis na Samsung. Hod \u00e9 Ph.D. em f\u00edsica qu\u00edmica pela Universidade de Columbia.","sameAs":["https:\/\/hod.greeley.org\/blog","https:\/\/x.com\/HodGreeley"],"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/hod-greeley\/"}]}},"authors":[{"term_id":9042,"user_id":73,"is_guest":0,"slug":"hod-greeley","display_name":"Hod Greeley, Developer Advocate, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/52d0018695c0ced0d1c68cf64a6195c81dbac03dce5983f98eb209e7c84350df?s=96&d=mm&r=g","author_category":"","last_name":"Greeley","first_name":"Hod","job_title":"","user_url":"https:\/\/hod.greeley.org\/blog","description":"Hod Greeley \u00e9 um defensor dos desenvolvedores da Couchbase e mora no Vale do Sil\u00edcio. Ele tem mais de duas d\u00e9cadas de experi\u00eancia como engenheiro de software e gerente de engenharia. Trabalhou em diversas \u00e1reas de software, incluindo f\u00edsica e qu\u00edmica computacional, seguran\u00e7a de computadores e redes, finan\u00e7as e dispositivos m\u00f3veis. Antes de ingressar na Couchbase em 2016, Hod liderou as rela\u00e7\u00f5es com desenvolvedores para dispositivos m\u00f3veis na Samsung. Hod \u00e9 Ph.D. em f\u00edsica qu\u00edmica pela Universidade de Columbia."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5894","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\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=5894"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/5894\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/5895"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=5894"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=5894"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=5894"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=5894"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}