{"id":2070,"date":"2015-12-16T01:04:57","date_gmt":"2015-12-16T01:04:56","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=2070"},"modified":"2023-07-20T14:35:30","modified_gmt":"2023-07-20T21:35:30","slug":"sync-gateway-webhooks","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/sync-gateway-webhooks\/","title":{"rendered":"Webhooks do gateway de sincroniza\u00e7\u00e3o"},"content":{"rendered":"<p>Acabamos de lan\u00e7ar o Couchbase Mobile 1.1 e, com essa nova vers\u00e3o, h\u00e1 muitos\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/announcing-couchbase-mobile-1.1\/\">novos recursos<\/a>. Nesta postagem do blog, daremos uma olhada nos webhooks do Sync Gateway e pensaremos em alguns exemplos concretos para us\u00e1-los.<\/p>\n<h1>Webhooks<\/h1>\n<p>Antes da vers\u00e3o 1.1, a \u00fanica maneira de adicionar l\u00f3gica personalizada na forma de plug-ins ao Sync Gateway era ouvir o feed de altera\u00e7\u00f5es. Embora essa abordagem ainda funcione, ela n\u00e3o \u00e9 a mais f\u00e1cil de configurar. Com os webhooks, voc\u00ea pode simplesmente fornecer uma fun\u00e7\u00e3o de filtro e o URL para publicar o evento. Em seguida, voc\u00ea trata o evento com a fun\u00e7\u00e3o\u00a0<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/backend-languages\/\">linguagem de back-end<\/a> de sua escolha (NodeJS, Java, Go, Ruby...).<\/p>\n<p>Os webhooks podem ser usados para muitos casos de uso diferentes:<\/p>\n<ul>\n<li><strong>Mensagens<\/strong>Notifica\u00e7\u00f5es direcionadas para informar os usu\u00e1rios sobre eventos importantes.<\/li>\n<li><strong>Programa\u00e7\u00e3o<\/strong>: inicia grandes tarefas que podem estar sendo executadas em um web worker.<\/li>\n<li><strong>L\u00f3gica personalizada<\/strong>Sync Function: amplie os recursos da Sync Function usando um webhook para executar tarefas adicionais no documento.<\/li>\n<\/ul>\n<p>Na se\u00e7\u00e3o a seguir, voc\u00ea se concentrar\u00e1 na cria\u00e7\u00e3o do recurso de notifica\u00e7\u00e3o por push de um aplicativo de not\u00edcias para informar os usu\u00e1rios quando novos artigos que correspondem aos t\u00f3picos de interesse deles forem publicados. Este tutorial foi extra\u00eddo da se\u00e7\u00e3o <a href=\"https:\/\/github.com\/couchbaselabs\/couchbase-by-example\">Couchbase por exemplo<\/a>\u00a0reposit\u00f3rio.<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/sync-gateway-webhooks\/gcmnotification.gif\" \/><\/p>\n<h1><strong>Considera\u00e7\u00f5es sobre a arquitetura<\/strong><\/h1>\n<p>A notifica\u00e7\u00e3o por push \u00e9 uma indica\u00e7\u00e3o visual para que o usu\u00e1rio saiba que h\u00e1 um novo conte\u00fado dispon\u00edvel, mas tamb\u00e9m pode ser para que o pr\u00f3prio aplicativo extraia os novos artigos do servidor:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/sync-gateway-webhooks\/architecture.png\" \/><\/p>\n<p>O motivo pelo qual estamos usando a Web Push API em vez de uma replica\u00e7\u00e3o pull cont\u00ednua com o Sync Gateway para verificar se h\u00e1 novos artigos \u00e9 que ela pode funcionar mesmo quando o navegador est\u00e1 fechado. Em compara\u00e7\u00e3o com um soquete da Web ou polling longo, que s\u00f3 ser\u00e1 mantido ativo enquanto o navegador e a p\u00e1gina da Web forem mantidos abertos.<\/p>\n<h1>Cen\u00e1rios<\/h1>\n<p>H\u00e1 diferentes cen\u00e1rios para o envio de uma notifica\u00e7\u00e3o por push:<\/p>\n<ul>\n<li><strong>Mensagens de grupo<\/strong>Esse conceito foi introduzido no GCM para enviar notifica\u00e7\u00f5es a at\u00e9 20 dispositivos simultaneamente. Ele \u00e9 muito adequado para enviar notifica\u00e7\u00f5es a todos os dispositivos que pertencem a um \u00fanico usu\u00e1rio.<\/li>\n<li><strong>Para cima e para baixo<\/strong>Por exemplo, um usu\u00e1rio atualizou um documento e outros usu\u00e1rios devem ser notificados sobre isso por meio de uma notifica\u00e7\u00e3o por push.<\/li>\n<\/ul>\n<h1>Modelo de dados<\/h1>\n<p>Vamos come\u00e7ar com o menor documento, um documento de perfil que cont\u00e9m tokens de registro dos dispositivos e t\u00f3picos de interesse do usu\u00e1rio:<\/p>\n<pre><code class=\"language-json\">\r\n{\r\n    \"type\": \"profile\",\r\n    \"name\": \"Oliver\",\r\n    \"subscription\": \"free\", \/\/ other values \"expired\", \"premium\"\r\n    \"topics\": [\"g20\", \"science\", \"nsa\", \"design\"],\r\n    \"registration_ids\": [\"AP91DIwQ\", \"AP91W9kX\"]\r\n}\r\n\r\n<\/code><\/pre>\n<p>E o documento Artigo pode ter as seguintes propriedades:<\/p>\n<pre><code class=\"language-json\">\r\n{\r\n    \"type\": \"article\",\r\n    \"title\": \"Design tools for developers\",\r\n    \"content\": \"...\",\r\n    \"topic\": \"design\"\r\n}\r\n\r\n<\/code><\/pre>\n<h1><strong>Mensagens de grupo<\/strong><\/h1>\n<p>Imagine um cen\u00e1rio em que um usu\u00e1rio esteja inscrito em uma conta freemium e insira um c\u00f3digo de convite para acessar o plano premium por um tempo limitado. Seria bom enviar uma notifica\u00e7\u00e3o a todos os dispositivos do usu\u00e1rio para buscar o conte\u00fado adicional.<\/p>\n<p><strong>Breve<\/strong>: Envie uma notifica\u00e7\u00e3o \u00fanica para usu\u00e1rios freemium que tamb\u00e9m tenham um c\u00f3digo de convite para desbloquear outros dispositivos.<\/p>\n<p>Fa\u00e7a o download do <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/nosql-databases\/downloads\/#Couchbase_Mobile\">1.1 vers\u00e3o<\/a> do Sync Gateway. Voc\u00ea encontrar\u00e1 o bin\u00e1rio do Sync Gateway no diret\u00f3rio <strong>caixa<\/strong>\u00a0e exemplos de arquivos de configura\u00e7\u00e3o na pasta <strong>exemplos<\/strong>\u00a0pasta. Copie o <strong>exampleconfig.json<\/strong>\u00a0na raiz do seu projeto:<\/p>\n<pre><code class=\"language-bash\">\r\ncp ~\/Downloads\/couchbase-sync-gateway\/examples\/exampleconfig.json \/path\/to\/proj\/sync-gateway-config.json\r\n\r\n<\/code><\/pre>\n<p>Adicione tr\u00eas usu\u00e1rios no arquivo de configura\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-json\">\r\n{\r\n  \"log\": [\"CRUD\", \"HTTP+\"],\r\n  \"databases\": {\r\n    \"db\": {\r\n      \"server\": \"walrus:\",\r\n      \"users\": {\r\n        \"zack\": {\r\n          \"password\": \"letmein\"\r\n        },\r\n        \"ali\": {\r\n          \"password\": \"letmein\"\r\n        },\r\n        \"adam\": {\r\n          \"password\": \"letmein\"\r\n        },\r\n        \"GUEST\": {\"disabled\": true}\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n<\/code><\/pre>\n<p>Adicione um web hook com as seguintes propriedades no <strong>db<\/strong>\u00a0objeto:<\/p>\n<pre><code class=\"language-json\">\r\n\"event_handlers\": {\r\n  \"document_changed\": [\r\n    {\r\n      \"handler\": \"webhook\",\r\n      \"url\": \"https:\/\/localhost:8000\/invitecode\",\r\n      \"filter\": `function(doc) {\r\n            if (doc.type == \"profile\" &amp;&amp; doc.invite_code) {\r\n                return true;\r\n            }\r\n            return false;\r\n        }`\r\n    }\r\n  ]\r\n}\r\n\r\n<\/code><\/pre>\n<p>Inicie o Sync Gateway:<\/p>\n<pre><code class=\"language-bash\">\r\n$ ~\/Downloads\/couchbase-sync-gateway\/bin\/sync_gateway .\/sync-gateway-config.json\r\n\r\n<\/code><\/pre>\n<p>Criar um novo arquivo <strong>main.go<\/strong>\u00a0para lidar com o webhook:<\/p>\n<pre><code>\r\nfunc main() {\r\n    http.HandleFunc(\"\/invitecode\", func(w http.ResponseWriter, r *http.Request) {\r\n        log.Println(\"ping\")\r\n    })\r\n    log.Fatal(http.ListenAndServe(\":8000\", nil))\r\n}\r\n\r\n<\/code><\/pre>\n<p>Inicie o servidor Go:<\/p>\n<pre><code class=\"language-bash\">\r\n$ go run main.go\r\n\r\n<\/code><\/pre>\n<p>Usando o curl, fa\u00e7a uma solicita\u00e7\u00e3o POST para <strong>:4984\/db\/bulk_doc<\/strong>\u00a0para salvar 3 documentos de perfil simultaneamente:<\/p>\n<pre><code class=\"language-bash\">\r\ncurl -H 'Content-Type: application\/json' \r\n     -vX POST https:\/\/localhost:4985\/db\/_bulk_docs \r\n     --data @profiles.json\r\n\r\n<\/code><\/pre>\n<p><strong>OBSERVA\u00c7\u00c3O<\/strong>: Para economizar espa\u00e7o na linha de comando, a op\u00e7\u00e3o <strong>-dados<\/strong>\u00a0especifica que o corpo da solicita\u00e7\u00e3o est\u00e1 em <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase-by-Example\/blob\/master\/02-gcm-webhook\/profiles.json\">profiles.json<\/a>.<\/p>\n<p>Observe que somente o documento do perfil de Ali \u00e9 enviado para o ponto de extremidade do webhook:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/sync-gateway-webhooks\/group-messaging.gif\" \/><\/p>\n<p>Na pr\u00f3xima se\u00e7\u00e3o, voc\u00ea configurar\u00e1 um segundo web hook para notificar todos os usu\u00e1rios quando um novo artigo que corresponda ao interesse deles for publicado.<\/p>\n<h1>Para cima e para baixo<\/h1>\n<p>Adicione outra entrada de webhook que filtre apenas documentos do tipo <strong>artigo<\/strong>:<\/p>\n<pre><code class=\"language-json\">\r\n{\r\n   \"handler\": \"webhook\",\r\n   \"url\": \"https:\/\/localhost:8000\/new_article\",\r\n   \"filter\": `function(doc) {\r\n       if (doc.type == \"article\") {\r\n           return true;\r\n       }\r\n       return false;\r\n   }`\r\n }\r\n\r\n<\/code><\/pre>\n<p>Adicione outro manipulador em seu servidor Go:<\/p>\n<pre><code>\r\nhttp.HandleFunc(\"\/new_article\", func(w http.ResponseWriter, r *http.Request) {\r\n    log.Println(\"ping\")\r\n})\r\n\r\n<\/code><\/pre>\n<p>Verifique se o webhook est\u00e1 funcionando como esperado adicionando um documento de artigo:<\/p>\n<pre><code class=\"language-bash\">\r\ncurl -H 'Content-Type: application\/json' \r\n     -vX POST https:\/\/localhost:4985\/db\/_bulk_docs \r\n     --data @articles.json\r\n\r\n<\/code><\/pre>\n<p><strong>OBSERVA\u00c7\u00c3O<\/strong>: O conte\u00fado de <strong>articles.json<\/strong>\u00a0pode ser encontrado <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase-by-Example\/blob\/master\/02-gcm-webhook\/articles.json\">aqui<\/a>.<\/p>\n<p>Nesse caso, \u00e9 preciso trabalhar um pouco mais para descobrir qual conjunto de usu\u00e1rios deve ser notificado. Esse \u00e9 um bom caso de uso para usar uma visualiza\u00e7\u00e3o para indexar os documentos de perfil e emitir o t\u00f3pico como a chave e as IDs de registro como o valor para cada t\u00f3pico na matriz de t\u00f3picos.<\/p>\n<p>Para registrar uma exibi\u00e7\u00e3o, podemos usar o PUT do Sync Gateway <strong>\/_design\/ddocname<\/strong>\u00a0com a defini\u00e7\u00e3o da visualiza\u00e7\u00e3o no corpo da solicita\u00e7\u00e3o:<\/p>\n<pre><code class=\"language-bash\">\r\ncurl -H 'Content-Type: application\/json' \r\n     -vX PUT https:\/\/localhost:4985\/db\/_design\/extras \r\n     --data @view.json\r\n\r\n<\/code><\/pre>\n<p><strong>OBSERVA\u00c7\u00c3O<\/strong>: O conte\u00fado de <strong>view.json<\/strong>\u00a0pode ser encontrado <a href=\"https:\/\/github.com\/couchbaselabs\/Couchbase-by-Example\/blob\/master\/02-gcm-webhook\/view.json\">aqui<\/a>.<\/p>\n<p>Observe que o artigo que postamos acima tem design em seu t\u00f3pico e o \u00fanico usu\u00e1rio inscrito nesse t\u00f3pico \u00e9 o Adam. Consequentemente, se voc\u00ea consultar essa visualiza\u00e7\u00e3o com a chave \"design\", apenas um par (chave, valor) dever\u00e1 retornar com o t\u00f3pico como chave e os tokens de dispositivo como valor:<\/p>\n<pre><code>\r\ncurl -H 'Content-Type: application\/json' \r\n     -vX GET ':4985\/db\/_design\/extras\/_view\/user_topics?key=\"design\"'\r\n\r\n&lt; HTTP\/1.1 200 OK\r\n&lt; Content-Length: 95\r\n&lt; Content-Type: application\/json\r\n* Server Couchbase Sync Gateway\/1.1.0 is not blacklisted\r\n&lt; Server: Couchbase Sync Gateway\/1.1.0\r\n&lt; Date: Wed, 17 Jun 2015 17:46:35 GMT\r\n&lt;\r\n* Connection #0 to host  left intact\r\n\r\n{\"total_rows\":1,\"rows\":[{\"id\":\"4caa204e81b118cf23500f320e138aa8\",\"key\":\"design\",\"value\":null}]}\r\n\r\n<\/code><\/pre>\n<p>Agora, voc\u00ea pode editar o manipulador em <strong>main.go<\/strong>\u00a0para consultar posteriormente o <strong>t\u00f3picos_do_usu\u00e1rio<\/strong>\u00a0com a chave sendo o t\u00f3pico do artigo:<\/p>\n<pre><code>\t\r\nhttp.HandleFunc(\"\/new_article\", func(w http.ResponseWriter, r *http.Request) {\r\n\t    log.Println(\"ping\")\r\n\t\r\n\t    var data map[string]interface{}\r\n\t    body, _ := ioutil.ReadAll(r.Body)\r\n\t    json.Unmarshal(body, &amp;data)\r\n\t\r\n\t    topic := data[\"topic\"].(string)\r\n\t    log.Printf(\"Querying user Profiles subscribed to %s\", topic)\r\n\t\r\n\t    var stringUrl string = fmt.Sprintf(\"https:\/\/localhost:4985\/db\/_design\/extras\/_view\/user_topics?key=\"%s\"\", topic)\r\n\t    res, err := http.Get(stringUrl)\r\n\t    if err != nil {\r\n\t        fmt.Print(err)\r\n\t        return\r\n\t    }\r\n\t\r\n\t    if res != nil {\r\n\t        var result map[string]interface{}\r\n\t        body, _ = ioutil.ReadAll(res.Body)\r\n\t        json.Unmarshal(body, &amp;result)\r\n\t        log.Printf(\"Result from the user_topics query %v\", result[\"rows\"].([]interface {}))\r\n\t    }\r\n})\r\n\r\n<\/code><\/pre>\n<p>Executar o <strong>bulk_doc<\/strong>\u00a0novamente e voc\u00ea ver\u00e1 a lista de tokens de dispositivo a serem usados nos registros:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/original-assets\/sync-gateway-webhooks\/up-and-down.gif\" \/><\/p>\n<h1>Conclus\u00e3o<\/h1>\n<p>Neste tutorial, voc\u00ea aprendeu a usar Web Hooks no cen\u00e1rio de notifica\u00e7\u00f5es por push do GCM e usou as visualiza\u00e7\u00f5es do Couchbase Server para acessar informa\u00e7\u00f5es adicionais no Webhook Time\u2122 :).<\/p>","protected":false},"excerpt":{"rendered":"<p>We just released Couchbase Mobile 1.1 and with this new version comes many\u00a0new features. In this blog post, we\u2019ll take a look at Sync Gateway webhooks\u00a0and think of a few concrete examples for using them. Webhooks Prior to the 1.1 [&hellip;]<\/p>","protected":false},"author":51,"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":[9028],"class_list":["post-2070","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>Sync Gateway Webhooks - 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\/sync-gateway-webhooks\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sync Gateway Webhooks\" \/>\n<meta property=\"og:description\" content=\"We just released Couchbase Mobile 1.1 and with this new version comes many\u00a0new features. In this blog post, we\u2019ll take a look at Sync Gateway webhooks\u00a0and think of a few concrete examples for using them. Webhooks Prior to the 1.1 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/sync-gateway-webhooks\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2015-12-16T01:04:56+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-07-20T21:35:30+00:00\" \/>\n<meta name=\"author\" content=\"James Nocentini, Technical Writer, Mobile, 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=\"James Nocentini, Technical Writer, Mobile, Couchbase\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/\"},\"author\":{\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6\"},\"headline\":\"Sync Gateway Webhooks\",\"datePublished\":\"2015-12-16T01:04:56+00:00\",\"dateModified\":\"2023-07-20T21:35:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/\"},\"wordCount\":861,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"articleSection\":[\"Couchbase Mobile\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/\",\"name\":\"Sync Gateway Webhooks - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png\",\"datePublished\":\"2015-12-16T01:04:56+00:00\",\"dateModified\":\"2023-07-20T21:35:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#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\/sync-gateway-webhooks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sync Gateway Webhooks\"}]},{\"@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\/ec4dfbd349cb4a321fb6a92b71a9a7f6\",\"name\":\"James Nocentini, Technical Writer, Mobile, Couchbase\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g\",\"caption\":\"James Nocentini, Technical Writer, Mobile, Couchbase\"},\"description\":\"James Nocentini is the Technical Writer in charge of the documentation for Couchbase Mobile. Previously, he worked as a Developer Advocate and before that as a front-end developer for HouseTrip. He also enjoys writing Android tutorials for raywenderlich.com in his spare time.\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/james-nocentini\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Sync Gateway Webhooks - 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\/sync-gateway-webhooks\/","og_locale":"pt_BR","og_type":"article","og_title":"Sync Gateway Webhooks","og_description":"We just released Couchbase Mobile 1.1 and with this new version comes many\u00a0new features. In this blog post, we\u2019ll take a look at Sync Gateway webhooks\u00a0and think of a few concrete examples for using them. Webhooks Prior to the 1.1 [&hellip;]","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/sync-gateway-webhooks\/","og_site_name":"The Couchbase Blog","article_published_time":"2015-12-16T01:04:56+00:00","article_modified_time":"2023-07-20T21:35:30+00:00","author":"James Nocentini, Technical Writer, Mobile, Couchbase","twitter_card":"summary_large_image","twitter_misc":{"Written by":"James Nocentini, Technical Writer, Mobile, Couchbase","Est. reading time":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/"},"author":{"name":"James Nocentini, Technical Writer, Mobile, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/ec4dfbd349cb4a321fb6a92b71a9a7f6"},"headline":"Sync Gateway Webhooks","datePublished":"2015-12-16T01:04:56+00:00","dateModified":"2023-07-20T21:35:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/"},"wordCount":861,"commentCount":5,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","articleSection":["Couchbase Mobile"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/","url":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/","name":"Sync Gateway Webhooks - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2022\/11\/couchbase-nosql-dbaas.png","datePublished":"2015-12-16T01:04:56+00:00","dateModified":"2023-07-20T21:35:30+00:00","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/sync-gateway-webhooks\/#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\/sync-gateway-webhooks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sync Gateway Webhooks"}]},{"@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\/ec4dfbd349cb4a321fb6a92b71a9a7f6","name":"James Nocentini, redator t\u00e9cnico, celular, Couchbase","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/09977bdd14473dc23a125f2f74c3e816","url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","caption":"James Nocentini, Technical Writer, Mobile, Couchbase"},"description":"James Nocentini \u00e9 o redator t\u00e9cnico respons\u00e1vel pela documenta\u00e7\u00e3o do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele tamb\u00e9m gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre.","url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/james-nocentini\/"}]}},"authors":[{"term_id":9028,"user_id":51,"is_guest":0,"slug":"james-nocentini","display_name":"James Nocentini, Technical Writer, Mobile, Couchbase","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/0aa80108e5c81e282d705199edae5a25f8ef92abf15cd64f8ff19837abcee09a?s=96&d=mm&r=g","author_category":"","last_name":"Nocentini","first_name":"James","job_title":"","user_url":"","description":"James Nocentini \u00e9 o redator t\u00e9cnico respons\u00e1vel pela documenta\u00e7\u00e3o do Couchbase Mobile. Anteriormente, ele trabalhou como Developer Advocate e, antes disso, como desenvolvedor front-end da HouseTrip. Ele tamb\u00e9m gosta de escrever tutoriais sobre Android para raywenderlich.com em seu tempo livre."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2070","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\/51"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=2070"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/2070\/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=2070"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=2070"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=2070"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=2070"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}