{"id":5374,"date":"2018-06-21T06:40:58","date_gmt":"2018-06-21T13:40:58","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=5374"},"modified":"2025-06-13T22:39:41","modified_gmt":"2025-06-14T05:39:41","slug":"couchbase-data-platform-action-eventing-functions","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-data-platform-action-eventing-functions\/","title":{"rendered":"La plataforma de datos Couchbase en acci\u00f3n: Eventos\/Funciones"},"content":{"rendered":"<div id=\"content\">\n<div id=\"preamble\">\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Este post se adentrar\u00e1 en el uso del <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\">Servicio de eventos Couchbase<\/a> en el Couchbase Silicon Valley 2017 <a title=\"https:\/\/youtu.be\/-U_UjqnhMBI\" href=\"https:\/\/youtu.be\/-U_UjqnhMBI\">demostraci\u00f3n t\u00e9cnica<\/a> aplicaci\u00f3n.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Si a\u00fan no est\u00e1 familiarizado con la demo o <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\">Servicio de eventos Couchbase<\/a>echa un vistazo a los recursos al final de este post. El c\u00f3digo fuente de todo el conjunto de aplicaciones es <a title=\"https:\/\/github.com\/couchbaselabs\/connect-fall-2017-demo\" href=\"https:\/\/github.com\/couchbaselabs\/connect-fall-2017-demo\">disponible en GitHub<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_introduction\">Introducci\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>En la demostraci\u00f3n, utilizamos un tel\u00e9fono m\u00f3vil con NFC para leer las temperaturas de un parche sin bater\u00eda. Las lecturas se almacenan como un <a title=\"https:\/\/www.hl7.org\/fhir\/observation.html\" href=\"https:\/\/www.hl7.org\/fhir\/observation.html\">Recurso de observaci\u00f3n FHIR<\/a> en JSON utilizando <a title=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/couchbase-lite\/index.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/couchbase-lite\/index.html\">Couchbase Lite<\/a>. Estos documentos se sincronizan con un <a title=\"https:\/\/www.couchbase.com\/nosql-databases\/couchbase-server\" href=\"https:\/\/www.couchbase.com\/blog\/es\/nosql-databases\/couchbase-server\/\">Servidor Couchbase<\/a> cl\u00faster a trav\u00e9s de <a title=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/index.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/index.html\">Pasarela de sincronizaci\u00f3n<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>El cliente web dispone de un panel de control dise\u00f1ado para realizar un seguimiento de la informaci\u00f3n del paciente casi en tiempo real. Esto plantea un par de retos bastante comunes. \u00bfC\u00f3mo lo hacemos?<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>Actualizar el cuadro de mandos bas\u00e1ndose en los registros escritos por otra parte del sistema.<\/li>\n<li>Transferir eficazmente la informaci\u00f3n necesaria<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>Veamos c\u00f3mo el Servicio de Eventos ayuda en ambos casos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_pushing_updates_to_the_client\">Env\u00edo de actualizaciones al cliente<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Incluso sin un <a title=\"https:\/\/en.wikipedia.org\/wiki\/Active_database\" href=\"https:\/\/en.wikipedia.org\/wiki\/Active_database\">base de datos activa<\/a>...puedes hacerlo de un par de maneras diferentes. Por ejemplo, podr\u00edamos encontrar la manera de enviar las lecturas a una cola de mensajes, o sondear la base de datos. Ambos enfoques tienen inconvenientes.<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>A\u00f1adir una cola de mensajes introduce m\u00e1s complejidad en la infraestructura y m\u00e1s posibilidades de fallo.<\/li>\n<li>Las encuestas son, bueno, encuestas.<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p>En su lugar, hemos utilizado <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\">Funciones Couchbase<\/a>una funci\u00f3n del Servicio de Eventos. Las funciones escuchan los cambios en la base de datos. (T\u00e9cnicamente, las funciones procesan un <a title=\"https:\/\/www.couchbase.com\/blog\/couchbases-history-everything-dcp\/\" href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbases-history-everything-dcp\/\">Protocolo de cambio de base de datos Couchbase<\/a> feed). A continuaci\u00f3n, escriba dos callbacks en JavaScript, <code>OnUpdate<\/code> y <code>OnDelete<\/code>que se invocan para cada evento de creaci\u00f3n\/actualizaci\u00f3n y eliminaci\u00f3n de documentos, respectivamente. Esto le permite implementar c\u00f3digo reactivo que se ejecuta directamente en su cl\u00faster.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>(Como nota al margen, podr\u00edamos haber resuelto esto utilizando <a title=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/server-integration\/index.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/mobile\/current\/guides\/sync-gateway\/server-integration\/index.html\">Ganchos web de Sync Gateway<\/a>. Este enfoque tiene algunos aspectos en com\u00fan con la t\u00e9cnica que utilizamos. Tiene varias desventajas, pero ese es un tema para otro post).<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_data_efficiency\">Eficacia de los datos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>La aplicaci\u00f3n m\u00f3vil crea documentos basados en lecturas de temperatura que deben registrar una serie de datos relacionados.<sup class=\"footnote\">[<a id=\"_footnoteref_1\" class=\"footnote\" title=\"Ver nota a pie de p\u00e1gina.\" href=\"#_footnotedef_1\">1<\/a>] <\/sup>Para el cuadro de mandos, s\u00f3lo necesitamos un peque\u00f1o subconjunto de esos datos. Podr\u00edamos recuperar todo el documento con una b\u00fasqueda clave\/valor. Eso ser\u00eda r\u00e1pido, pero significa transferir datos que no nos interesan. Es bastante f\u00e1cil utilizar un <a title=\"https:\/\/www.couchbase.com\/n1ql\" href=\"https:\/\/www.couchbase.com\/blog\/es\/n1ql\/\">N1QL<\/a> para reducir los datos. Aunque N1QL es incre\u00edblemente eficiente, esto implica procesar los nodos de consulta.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Con Functions, se obtiene una copia del documento con cada actualizaci\u00f3n. Naturalmente, puedes extraer los datos que quieras de ah\u00ed con bastante facilidad. Dado que Eventing es un <a title=\"https:\/\/www.couchbase.com\/multi-dimensional-scalability-overview\" href=\"https:\/\/www.couchbase.com\/blog\/es\/multi-dimensional-scalability-overview\/\">servicio independiente<\/a>puede escalar los recursos que dedica a sus Funciones independientemente del resto de su cl\u00faster.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_the_code\">El C\u00f3digo<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>El c\u00f3digo es bastante sencillo.<\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_couchbase_functions\">Funciones Couchbase<\/h3>\n<div class=\"paragraph\">\n<p>Aqu\u00ed est\u00e1 la parte de Funciones. Puedes a\u00f1adir esto a trav\u00e9s del panel Eventing de la consola de Couchbase Server, o a trav\u00e9s de una llamada REST.<sup class=\"footnote\">[<a id=\"_footnoteref_2\" class=\"footnote\" title=\"Ver nota a pie de p\u00e1gina.\" href=\"#_footnotedef_2\">2<\/a>]<\/sup><\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"pygments highlight\"><code>function OnUpdate(doc, meta) {\r\n  if (doc.resourceType != 'Observation') return;\r\n\r\n  let reference = doc.subject.reference;\r\n  let url = \"https:\/\/localhost:8080\/events\/\" + reference.substr(9);\r\n  let data = JSON.stringify({\r\n    \"reference\": doc.subject.reference,\r\n    \"code\": doc.code.coding[0].code,\r\n    \"recordedAt\": doc.issued,\r\n    \"value\": doc.valueQuantity.value\r\n  });\r\n\r\n  let curl = SELECT CURL($url, {\r\n    \"request\": \"POST\",\r\n    \"header\": [ \"Content-Type: application\/json\", \"accept: application\/json\" ],\r\n    \"data\": $data\r\n  });\r\n\r\n  curl.execQuery();\r\n}\r\n\r\nfunction OnDelete(meta) {}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>En la especificaci\u00f3n FHIR, todos los documentos tienen un <code>resourceType<\/code>. S\u00f3lo miramos los recursos de \"Observaci\u00f3n\", as\u00ed que la primera comprobaci\u00f3n filtra eso.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, extraemos el UUID del paciente del campo de referencia del sujeto. Esto se utiliza en el enrutamiento en el servidor de la aplicaci\u00f3n web. (Para m\u00e1s informaci\u00f3n, v\u00e9ase la siguiente secci\u00f3n).<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>A continuaci\u00f3n, creamos una cadena JSON con s\u00f3lo la referencia del sujeto, un c\u00f3digo que indica el tipo de observaci\u00f3n realizada, la fecha en que se tom\u00f3 esta en particular y el valor de la medici\u00f3n. Esos son los \u00fanicos datos que necesitamos pasar.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Por \u00faltimo, utilizamos el <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/curl.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/current\/n1ql\/n1ql-language-reference\/curl.html\">cURL<\/a> en N1QL para enviar esos datos al punto final REST del servidor de aplicaciones. <a href=\"https:\/\/www.couchbase.com\/blog\/es\/using-curl-eventing-service-update\/\">(En lugar de utilizar una consulta SELECT para ejecutar la funci\u00f3n CURL, considere la posibilidad de utilizar la propia funci\u00f3n CURL de eventing)<\/a>.<\/p>\n<\/div>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_web_server_rest_endpoint\">Servidor Web REST Endpoint<\/h3>\n<div class=\"paragraph\">\n<p>El servidor de aplicaciones est\u00e1 escrito en <a title=\"https:\/\/nodejs.org\/\" href=\"https:\/\/nodejs.org\">Nodo<\/a> utilizando <a title=\"https:\/\/expressjs.com\/\" href=\"https:\/\/expressjs.com\">Express<\/a>. Definimos un <a title=\"https:\/\/expressjs.com\/en\/guide\/routing.html\" href=\"https:\/\/expressjs.com\/en\/guide\/routing.html\">ruta<\/a> en Express para crear el endpoint utilizado en la llamada cURL en el c\u00f3digo de Funciones.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Aqu\u00ed est\u00e1 el c\u00f3digo.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"pygments highlight\"><code>router.post('\/:id', function(req, res, next) {\r\n  res.send('');\r\n\r\n  if (sse[req.params.id] === undefined) return; \/\/ Not listening yet\r\n\r\n  sse[req.params.id](`event: update\\ndata: { \"values\": [${JSON.stringify(req.body)}]}\\n\\n`);\r\n});\r\n\r\nmodule.exports = router;<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Express le permite definir una parte de una ruta, y luego colgarla de una ruta m\u00e1s larga cuando se conectan las cosas. Por lo tanto, todo lo que ves aqu\u00ed es la parte final de la especificaci\u00f3n de la ruta. La direcci\u00f3n <code>:id<\/code> indica a Express que tome el \u00faltimo segmento de la URL y lo introduzca como par\u00e1metro en nuestra llamada de retorno. Recordemos que aqu\u00ed a\u00f1adimos el UUID del paciente como la \u00faltima parte de la ruta URL. As\u00ed que eso es lo que el elemento <code>id<\/code> se establece en.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Una vez activada esta ruta con nuestra llamada cURL, necesitamos enviar la informaci\u00f3n al cliente web. Podr\u00edamos haber utilizado sockets web. En su lugar, hemos optado por utilizar <a title=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Server-sent_events\/Using_server-sent_events\" href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Server-sent_events\/Using_server-sent_events\">eventos enviados por el servidor<\/a>. Los SSEs son m\u00e1s ligeros que los web sockets, y funcionan bien para este prop\u00f3sito. Profundizaremos en los SSEs en otro post. Por ahora, piensa en ellos como un canal de mensajes que utiliza un formato muy simple.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Eso nos da lo que necesitamos saber para entender el c\u00f3digo de devoluci\u00f3n de llamada. La primera l\u00ednea especifica la ruta. La segunda l\u00ednea env\u00eda una respuesta vac\u00eda, para cerrar la sesi\u00f3n cURL. A continuaci\u00f3n comprobamos si el canal de eventos enviado por el servidor ya ha sido configurado. Esto ocurre a trav\u00e9s de una llamada desde el cliente. Si el canal SSE est\u00e1 listo, etiquetamos nuestros datos como un evento de \"actualizaci\u00f3n\", y enviamos el mismo JSON que recibimos.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_conclusion\">Conclusi\u00f3n<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Las funciones son probablemente mi nueva caracter\u00edstica favorita en Couchbase Server 5.5. Hemos visto un ejemplo aqu\u00ed, y puedes ver que no se necesita mucho para empezar. Tambi\u00e9n hay muchos otros casos de uso. Desplegar l\u00f3gica de negocio junto con los datos, con escalado f\u00e1cil, todo sin a\u00f1adir infraestructura, es algo genial.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_resources\">Recursos<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Para m\u00e1s informaci\u00f3n sobre la aplicaci\u00f3n, vea el v\u00eddeo de la keynote <a title=\"https:\/\/youtu.be\/-U_UjqnhMBI\" href=\"https:\/\/youtu.be\/-U_UjqnhMBI\">aqu\u00ed<\/a>junto con estos otros <a title=\"https:\/\/www.couchbase.com\/blog\/tag\/Connect-SV-2017-Demo\/\" href=\"https:\/\/www.couchbase.com\/blog\/es\/tag\/Connect-SV-2017-Demo\/\">puestos<\/a>.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>Puede leer una excelente introducci\u00f3n a <a title=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\" href=\"https:\/\/developer.couchbase.com\/documentation\/server\/5.5\/eventing\/eventing-overview.html\">Servicio de eventos Couchbase<\/a> en <a title=\"https:\/\/www.couchbase.com\/blog\/eventing\/\" href=\"https:\/\/www.couchbase.com\/blog\/es\/eventing\/\">esta entrada<\/a>. Tambi\u00e9n recomiendo encarecidamente echar un vistazo a este v\u00eddeo de Couchbase Connect NYC 2018: <a title=\"https:\/\/youtu.be\/SXa6PJEuaHY\" href=\"https:\/\/youtu.be\/SXa6PJEuaHY\">Haz m\u00e1s con el cambio - Presentamos Couchbase Eventing<\/a><\/p>\n<\/div>\n<div class=\"sect2\">\n<h3 id=\"_postscript\">Posdata<\/h3>\n<div class=\"paragraph\">\n<p>Couchbase es de c\u00f3digo abierto y <a title=\"https:\/\/www.couchbase.com\/downloads\" href=\"https:\/\/www.couchbase.com\/blog\/es\/downloads\/\">probar gratis<\/a>.<br \/>\n<strong>Empezar<\/strong> con <a title=\"https:\/\/www.couchbase.com\/get-started\" href=\"https:\/\/developer.couchbase.com\/tutorials\">c\u00f3digo de ejemplo, consultas de ejemplo, tutoriales y mucho m\u00e1s<\/a>.<br \/>\nM\u00e1s recursos en nuestra <a title=\"https:\/\/www.couchbase.com\/developers\/community\/\" href=\"https:\/\/www.couchbase.com\/blog\/es\/developers\/community\/\">portal para desarrolladores<\/a>.<br \/>\nS\u00edguenos en Twitter <a title=\"https:\/\/twitter.com\/CouchbaseDev\" href=\"https:\/\/twitter.com\/CouchbaseDev\">@CouchbaseDev<\/a>.<br \/>\nPuede enviar preguntas a nuestro <a title=\"https:\/\/www.couchbase.com\/forums\/\" href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\">foros<\/a>.<br \/>\nParticipamos activamente en <a title=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\" href=\"https:\/\/stackoverflow.com\/questions\/tagged\/couchbase\">Stack Overflow<\/a>.<br \/>\nEnv\u00edame tus preguntas, comentarios, temas que te gustar\u00eda ver, etc. a Twitter. <a title=\"https:\/\/twitter.com\/HodGreeley\" href=\"https:\/\/twitter.com\/HodGreeley\">@HodGreeley<\/a><\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"footnotes\">\n<hr \/>\n<div id=\"_footnotedef_1\" class=\"footnote\"><a title=\"\" href=\"#_footnoteref_1\">1<\/a>. V\u00e9ase <a title=\"https:\/\/github.com\/couchbaselabs\/connect-fall-2017-demo\/blob\/master\/mobile\/android\/CBCHealth\/app\/src\/main\/java\/com\/couchbase\/mobile\/app\/temperature\/TemperatureActivity.java\" href=\"https:\/\/github.com\/couchbaselabs\/connect-fall-2017-demo\/blob\/master\/mobile\/android\/CBCHealth\/app\/src\/main\/java\/com\/couchbase\/mobile\/app\/temperature\/TemperatureActivity.java\">TemperatureActivity.java<\/a><\/div>\n<div id=\"_footnotedef_2\" class=\"footnote\"><a title=\"\" href=\"#_footnoteref_2\">2<\/a>. Ver todos los detalles de configuraci\u00f3n <a title=\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-setup-steps\/\" href=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-data-platform-action-setup-steps\/\">aqu\u00ed<\/a><\/div>\n<\/div>\n<p>&nbsp;<\/p>","protected":false},"excerpt":{"rendered":"<p>This post will dive into the use of the Couchbase Eventing Service in the Couchbase Silicon Valley 2017 technical keynote demonstration application. If you aren\u2019t already familiar with the demo or Couchbase Eventing Service, take a look at the resources [&hellip;]<\/p>","protected":false},"author":73,"featured_media":5425,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1814,1815,1816,2273,1822],"tags":[1998,2255,1996,2177,2226,1771,2239,2240,1725],"ppma_author":[9042],"class_list":["post-5374","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-design","category-best-practices-and-tutorials","category-couchbase-server","category-eventing","category-node-js","tag-application","tag-connect-sv-2017-demo","tag-couchbase-connect","tag-couchbase-data-platform","tag-couchbase-functions","tag-curl","tag-demo","tag-demonstration","tag-nosql-database"],"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>The Couchbase Data Platform in Action: Eventing\/Fu<\/title>\n<meta name=\"description\" content=\"The blog dives into the use of the Couchbase Eventing Service in the Couchbase Silicon Valley 2017 technical keynote demonstration application.\" \/>\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\/es\/couchbase-data-platform-action-eventing-functions\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Couchbase Data Platform in Action: Eventing\/Functions\" \/>\n<meta property=\"og:description\" content=\"The blog dives into the use of the Couchbase Eventing Service in the Couchbase Silicon Valley 2017 technical keynote demonstration application.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/es\/couchbase-data-platform-action-eventing-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2018-06-21T13:40:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:39:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"785\" \/>\n\t<meta property=\"og:image:height\" content=\"400\" \/>\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=\"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\/couchbase-data-platform-action-eventing-functions\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/\"},\"author\":{\"name\":\"Hod Greeley, Developer Advocate, Couchbase\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4\"},\"headline\":\"The Couchbase Data Platform in Action: Eventing\/Functions\",\"datePublished\":\"2018-06-21T13:40:58+00:00\",\"dateModified\":\"2025-06-14T05:39:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/\"},\"wordCount\":1075,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png\",\"keywords\":[\"application\",\"Connect SV 2017 Demo\",\"Couchbase Connect\",\"Couchbase Data Platform\",\"Couchbase Functions\",\"curl\",\"Demo\",\"Demonstration\",\"NoSQL Database\"],\"articleSection\":[\"Application Design\",\"Best Practices and Tutorials\",\"Couchbase Server\",\"Eventing\",\"Node.js\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/\",\"name\":\"The Couchbase Data Platform in Action: Eventing\/Fu\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png\",\"datePublished\":\"2018-06-21T13:40:58+00:00\",\"dateModified\":\"2025-06-14T05:39:41+00:00\",\"description\":\"The blog dives into the use of the Couchbase Eventing Service in the Couchbase Silicon Valley 2017 technical keynote demonstration application.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png\",\"width\":785,\"height\":400},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Couchbase Data Platform in Action: Eventing\/Functions\"}]},{\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/author\/hod-greeley\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"The Couchbase Data Platform in Action: Eventing\/Fu","description":"El blog se sumerge en el uso del servicio de eventos de Couchbase en la aplicaci\u00f3n de demostraci\u00f3n de la keynote t\u00e9cnica de Couchbase Silicon Valley 2017.","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\/es\/couchbase-data-platform-action-eventing-functions\/","og_locale":"es_MX","og_type":"article","og_title":"The Couchbase Data Platform in Action: Eventing\/Functions","og_description":"The blog dives into the use of the Couchbase Eventing Service in the Couchbase Silicon Valley 2017 technical keynote demonstration application.","og_url":"https:\/\/www.couchbase.com\/blog\/es\/couchbase-data-platform-action-eventing-functions\/","og_site_name":"The Couchbase Blog","article_published_time":"2018-06-21T13:40:58+00:00","article_modified_time":"2025-06-14T05:39:41+00:00","og_image":[{"width":785,"height":400,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.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":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/"},"author":{"name":"Hod Greeley, Developer Advocate, Couchbase","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/9b62593c8a13531e53d52fcd5aabbca4"},"headline":"The Couchbase Data Platform in Action: Eventing\/Functions","datePublished":"2018-06-21T13:40:58+00:00","dateModified":"2025-06-14T05:39:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/"},"wordCount":1075,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png","keywords":["application","Connect SV 2017 Demo","Couchbase Connect","Couchbase Data Platform","Couchbase Functions","curl","Demo","Demonstration","NoSQL Database"],"articleSection":["Application Design","Best Practices and Tutorials","Couchbase Server","Eventing","Node.js"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/","url":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/","name":"The Couchbase Data Platform in Action: Eventing\/Fu","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png","datePublished":"2018-06-21T13:40:58+00:00","dateModified":"2025-06-14T05:39:41+00:00","description":"El blog se sumerge en el uso del servicio de eventos de Couchbase en la aplicaci\u00f3n de demostraci\u00f3n de la keynote t\u00e9cnica de Couchbase Silicon Valley 2017.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2018\/06\/F_of_CB-785x400-1.png","width":785,"height":400},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/couchbase-data-platform-action-eventing-functions\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"The Couchbase Data Platform in Action: Eventing\/Functions"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Defensor del Desarrollador, Couchbase","image":{"@type":"ImageObject","inLanguage":"es","@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 es desarrollador de Couchbase y vive en Silicon Valley. Tiene m\u00e1s de dos d\u00e9cadas de experiencia como ingeniero de software y director de ingenier\u00eda. Ha trabajado en una variedad de campos de software, incluyendo f\u00edsica computacional y qu\u00edmica, seguridad inform\u00e1tica y de redes, finanzas y m\u00f3viles. Antes de unirse a Couchbase en 2016, Hod dirigi\u00f3 las relaciones con desarrolladores para m\u00f3viles en Samsung. Hod es doctor en f\u00edsica qu\u00edmica por la Universidad de Columbia.","sameAs":["https:\/\/hod.greeley.org\/blog","https:\/\/x.com\/HodGreeley"],"url":"https:\/\/www.couchbase.com\/blog\/es\/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 es desarrollador de Couchbase y vive en Silicon Valley. Tiene m\u00e1s de dos d\u00e9cadas de experiencia como ingeniero de software y director de ingenier\u00eda. Ha trabajado en una variedad de campos de software, incluyendo f\u00edsica computacional y qu\u00edmica, seguridad inform\u00e1tica y de redes, finanzas y m\u00f3viles. Antes de unirse a Couchbase en 2016, Hod dirigi\u00f3 las relaciones con desarrolladores para m\u00f3viles en Samsung. Hod es doctor en f\u00edsica qu\u00edmica por la Universidad de Columbia."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/73"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=5374"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/5374\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/5425"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=5374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=5374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=5374"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=5374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}