{"id":6779,"date":"2019-05-01T10:50:58","date_gmt":"2019-05-01T17:50:58","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=6779"},"modified":"2025-06-13T22:39:32","modified_gmt":"2025-06-14T05:39:32","slug":"using-curl-eventing-service-update","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/","title":{"rendered":"Using cURL with the Eventing Service: Update"},"content":{"rendered":"<div class=\"paragraph\">\n<p>CURL is a utility function that has been available as a Developer Preview feature in <a href=\"https:\/\/docs.couchbase.com\/server\/current\/eventing\/eventing-overview.html\">Couchbase Eventing Functions<\/a>. It has been in developer preview and was not recommended for production. We are listening to feedback to improve usability, and we have several new enhancements coming up:<\/p>\n<\/div>\n<div class=\"olist arabic\">\n<ol class=\"arabic\">\n<li>Automatic parsing of common types of data<\/li>\n<li>Automatic marshaling of common types of data<\/li>\n<li>Ability to access HTTP request and response headers<\/li>\n<li>Ability to handle HTTPS connections<\/li>\n<li>Support for session cookies<\/li>\n<li>Additional authentication types supported<\/li>\n<\/ol>\n<\/div>\n<div class=\"paragraph\">\n<p>There are some changes to CURL coming in Couchbase Server 6.5. This blog post will give you a small preview of what\u2019s coming in 6.5. It also serves as a reference point for some older blog posts that were using the old CURL API.<\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>If you are interested in trying an early build of Couchbase Server 6.5 before the beta release in summer 2019, please contact <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_eventing_6_5_specification\">Eventing 6.5 Specification<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>There are improvements and enhancements coming to Eventing in Couchbase Server 6.5. You can read the entire <a href=\"https:\/\/github.com\/couchbase\/eventing\/blob\/master\/docs\/specification-65.pdf\">Eventing 6.5 Specification on GitHub<\/a>. For this post, I want to highlight CURL, which has changed considerably from its first developer preview.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_url_alias_bindings_for_curl\">URL alias Bindings for CURL<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>To use CURL in an event, you must create a URL alias in the Function Settings. Specify the base URL that you will be making a call to with CURL. For instance, I want to make calls to the <a href=\"https:\/\/openweathermap.org\/\">Open Weather Map<\/a> API. The base URL for the <a href=\"https:\/\/openweathermap.org\/current\">API<\/a> is <strong>https:\/\/samples.openweathermap.org<\/strong>. In Function Settings, I added a binding:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>URL alias (binding type)<\/li>\n<li>weatherUrl (binding name)<\/li>\n<li>https:\/\/samples.openweathermap.org (binding value)<\/li>\n<\/ul>\n<\/div>\n<div class=\"paragraph\">\n<p><span class=\"image\"><img decoding=\"async\" src=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2019\/04\/12201-function-settings-curl.png\" alt=\"Function settings\" width=\"including URL for curl\" \/><\/span><\/p>\n<\/div>\n<div class=\"paragraph\">\n<p>I also added a bucket alias binding to the <strong>demo<\/strong> bucket, which is also the source bucket. This allows me to read and write from the <strong>demo<\/strong> bucket.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_function_code\">Function code<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>I created a very simple <a href=\"https:\/\/www.couchbase.com\/products\/eventing\/\">Eventing<\/a> function that will run whenever a document is changed, then retrieve the weather from OpenWeatherMap and finally save the weather data to the document.<\/p>\n<\/div>\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight decode:true\"><code class=\"language-JavaScript\" data-lang=\"JavaScript\">function OnUpdate(doc, meta) {\r\n    var request = {\r\n        path: '\/data\/2.5\/weather',\r\n        params: {\r\n            'q' : 'London,uk',\r\n            'appid' : 'b6907d289e10d714a6e88b30761fae22'\r\n        }\r\n    };\r\n    var response = curl('GET', weatherUrl, request);\r\n    if(response.status == 200) {\r\n        var obj = thisbucket[meta.id];\r\n        obj.weather = response.body;\r\n        thisbucket[meta.id] = obj;\r\n    }\r\n}<\/code><\/pre>\n<\/div>\n<\/div>\n<div class=\"paragraph\">\n<p>Notice that the curl method in this code takes three arguments:<\/p>\n<\/div>\n<div class=\"ulist\">\n<ul>\n<li>The HTTP method (<code>GET<\/code> in this example)<\/li>\n<li>The URL alias binding (<code>weatherUrl<\/code>)<\/li>\n<li>A request object (<code>request<\/code>). In this example, it\u2019s very simple with only a <code>path<\/code> and a <code>params<\/code> value, but you can also add <code>headers<\/code>, <code>body<\/code>, and <code>encoding<\/code>. Make sure to check out the <a href=\"https:\/\/github.com\/couchbase\/eventing\/blob\/master\/docs\/specification-65.pdf\">entire specification<\/a>.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"sect1\">\n<h2 id=\"_next_steps\">Next steps<\/h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>If you\u2019ve been using curl in developer preview, it\u2019s important that you update to use this new and improved curl. If you\u2019re interested in trying an early build of Couchbase Server 6.5 which contains the new curl function before the beta release in summer, please contact <a href=\"mailto:matthew.groves@couchbase.com\">matthew.groves@couchbase.com<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing Functions. It has been in developer preview and was not recommended for production. We are listening to feedback to improve usability, and we [&hellip;]<\/p>\n","protected":false},"author":71,"featured_media":6781,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1816,2273],"tags":[1771,2133],"ppma_author":[8937],"class_list":["post-6779","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-couchbase-server","category-eventing","tag-curl","tag-functions"],"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>Using cURL with the Eventing Service: Update - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing. Improvements are coming in the next release.\" \/>\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\/using-curl-eventing-service-update\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using cURL with the Eventing Service: Update\" \/>\n<meta property=\"og:description\" content=\"CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing. Improvements are coming in the next release.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-01T17:50:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-14T05:39:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"334\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Matthew Groves\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mgroves\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Matthew Groves\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/\"},\"author\":{\"name\":\"Matthew Groves\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58\"},\"headline\":\"Using cURL with the Eventing Service: Update\",\"datePublished\":\"2019-05-01T17:50:58+00:00\",\"dateModified\":\"2025-06-14T05:39:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/\"},\"wordCount\":438,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg\",\"keywords\":[\"curl\",\"functions\"],\"articleSection\":[\"Couchbase Server\",\"Eventing\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/\",\"name\":\"Using cURL with the Eventing Service: Update - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg\",\"datePublished\":\"2019-05-01T17:50:58+00:00\",\"dateModified\":\"2025-06-14T05:39:32+00:00\",\"description\":\"CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing. Improvements are coming in the next release.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg\",\"width\":700,\"height\":334,\"caption\":\"licensed through Creative Commons https:\/\/www.maxpixel.net\/Cheese-Curls-Curls-Food-Junk-Food-Cheese-218233\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using cURL with the Eventing Service: Update\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\/3929663e372020321b0152dc4fa65a58\",\"name\":\"Matthew Groves\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g\",\"caption\":\"Matthew Groves\"},\"description\":\"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.\",\"sameAs\":[\"https:\/\/crosscuttingconcerns.com\",\"https:\/\/x.com\/mgroves\"],\"url\":\"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Using cURL with the Eventing Service: Update - The Couchbase Blog","description":"CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing. Improvements are coming in the next release.","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\/using-curl-eventing-service-update\/","og_locale":"en_US","og_type":"article","og_title":"Using cURL with the Eventing Service: Update","og_description":"CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing. Improvements are coming in the next release.","og_url":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/","og_site_name":"The Couchbase Blog","article_published_time":"2019-05-01T17:50:58+00:00","article_modified_time":"2025-06-14T05:39:32+00:00","og_image":[{"width":700,"height":334,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg","type":"image\/jpeg"}],"author":"Matthew Groves","twitter_card":"summary_large_image","twitter_creator":"@mgroves","twitter_misc":{"Written by":"Matthew Groves","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/"},"author":{"name":"Matthew Groves","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/3929663e372020321b0152dc4fa65a58"},"headline":"Using cURL with the Eventing Service: Update","datePublished":"2019-05-01T17:50:58+00:00","dateModified":"2025-06-14T05:39:32+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/"},"wordCount":438,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg","keywords":["curl","functions"],"articleSection":["Couchbase Server","Eventing"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/","url":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/","name":"Using cURL with the Eventing Service: Update - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg","datePublished":"2019-05-01T17:50:58+00:00","dateModified":"2025-06-14T05:39:32+00:00","description":"CURL is a utility function that has been available as a Developer Preview feature in Couchbase Eventing. Improvements are coming in the next release.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2019\/04\/122-hero-curl.jpg","width":700,"height":334,"caption":"licensed through Creative Commons https:\/\/www.maxpixel.net\/Cheese-Curls-Curls-Food-Junk-Food-Cheese-218233"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/using-curl-eventing-service-update\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Using cURL with the Eventing Service: Update"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"The Couchbase Blog","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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\/3929663e372020321b0152dc4fa65a58","name":"Matthew Groves","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/ba51e6aacc53995c323a634e4502ef54","url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","caption":"Matthew Groves"},"description":"Matthew D. Groves is a guy who loves to code. It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything. He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s. He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community. He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP.","sameAs":["https:\/\/crosscuttingconcerns.com","https:\/\/x.com\/mgroves"],"url":"https:\/\/www.couchbase.com\/blog\/author\/matthew-groves\/"}]}},"authors":[{"term_id":8937,"user_id":71,"is_guest":0,"slug":"matthew-groves","display_name":"Matthew Groves","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/70feb1b28a099ad0112b8d21fe1e81e1a4524beed3e20b7f107d5370e85a07ab?s=96&d=mm&r=g","author_category":"","last_name":"Groves","first_name":"Matthew","job_title":"","user_url":"https:\/\/crosscuttingconcerns.com","description":"Matthew D. Groves is a guy who loves to code.  It doesn't matter if it's C#, jQuery, or PHP: he'll submit pull requests for anything.  He has been coding professionally ever since he wrote a QuickBASIC point-of-sale app for his parent's pizza shop back in the 90s.  He currently works as a Senior Product Marketing Manager for Couchbase. His free time is spent with his family, watching the Reds, and getting involved in the developer community.  He is the author of AOP in .NET, Pro Microservices in .NET, a Pluralsight author, and a Microsoft MVP."}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/6779","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/users\/71"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/comments?post=6779"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/posts\/6779\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media\/6781"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/media?parent=6779"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/categories?post=6779"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/tags?post=6779"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=6779"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}