{"id":1491,"date":"2022-01-13T10:57:22","date_gmt":"2022-01-13T10:57:22","guid":{"rendered":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?p=1491"},"modified":"2022-01-13T12:37:23","modified_gmt":"2022-01-13T12:37:23","slug":"enlaces-de-salida-output-bindings-en-azure-functions","status":"publish","type":"post","link":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/","title":{"rendered":"Enlaces de salida (output bindings) en Azure Functions"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1523\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg\" alt=\"\" width=\"1791\" height=\"1028\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg 1791w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida-300x172.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida-1024x588.jpg 1024w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida-768x441.jpg 768w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida-1536x882.jpg 1536w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida-610x350.jpg 610w\" sizes=\"auto, (max-width: 1791px) 100vw, 1791px\" \/><\/p>\n<p>Por mi experiencia he podido observar que muchos developers no aplican o desconocen el concepto de <a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/functions-triggers-bindings?tabs=csharp#supported-bindings\" target=\"_blank\" rel=\"noopener\"><strong>binding o enlace<\/strong><\/a>. En este art\u00edculo vamos a conocerlos un poco mejor \ud83d\ude09<\/p>\n<p><!--more--><\/p>\n<p>Pocos desarrolladores a estas alturas no habr\u00e1n o\u00eddo hablar del concepto<strong><em> \u00abserverless\u00bb<\/em><\/strong> o de las arquitecturas sin servidor. En Azure para poder implementarlas disponemos del servicio de <a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/functions-overview\" target=\"_blank\" rel=\"noopener\">Azure Functions<\/a><a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/functions-overview\" target=\"_blank\" rel=\"noopener\">.<\/a><\/p>\n<p>Si ya tienes algunas horas de vuelo en este tema, seguro que conoces el concepto de <a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/functions-triggers-bindings?tabs=csharp\"><em><strong>trigger<\/strong><\/em>.<\/a> Estos <em>triggers<\/em> o <em>desencadenadores<\/em> provocan la ejecuci\u00f3n de una Azure Function cuando sucede algo, como por ejemplo, cuando se escribe un mensaje en un Service Bus. Pero, como dec\u00eda al principio, tras muchos a\u00f1os de experiencia he observado que algunos desarrolladores no aplican o no conocen el concepto de <a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/functions-triggers-bindings?tabs=csharp#supported-bindings\" target=\"_blank\" rel=\"noopener\"><strong>binding o enlace<\/strong><\/a>.<\/p>\n<p>Quiz\u00e1 s\u00ed se conoce el concepto de enlace de entrada, ya que el trigger, en s\u00ed mismo, es un tipo especial de enlace de entrada que permite leer del origen de datos que ha disparado la ejecuci\u00f3n de la funci\u00f3n, pero sin duda, el tipo de enlace que menos se emplea es el de salida. Por ejemplo, si en una Azure Function queremos escribir un mensaje en una cola o insertar datos en un Table Storage, la mayor\u00eda de desarrolladores hacen uso del SDK de Azure Storage correspondiente y generan una soluci\u00f3n \u00aba mano\u00bb, obviando la existencia de esta caracter\u00edstica que nos simplifica el trabajo, con alg\u00fan matiz a tener en cuenta.<\/p>\n<h1>\u00bfQu\u00e9 son los bindings o enlaces?<\/h1>\n<p>Los enlaces o bindings conectan recursos o datos a una funci\u00f3n. Podemos tener varios enlaces para acceder a diferentes tipos de datos, lo que nos permite conectarnos al origen o al destino del dato sin tener que escribir la l\u00f3gica espec\u00edfica para ello. Hay dos tipos de enlaces:<\/p>\n<ul>\n<li><strong>Entrada<\/strong>: Permiten leer datos. Se conecta al origen de datos.<\/li>\n<li><strong>Salida<\/strong>: Permiten escribir datos. Se conecta al destino de los datos.<\/li>\n<\/ul>\n<p>Hay bastantes m\u00e1s enlaces de salida que de entrada (todos los tipos de funciones menos las de tipo temporizador tienen enlaces de salida). Los enlaces nos van a permitir establecer un flujo de ejecuci\u00f3n de funciones haciendo uso de una caracter\u00edstica nativa del servicio, sin necesidad de escribir m\u00e1s c\u00f3digo extra.<\/p>\n<p>Vamos al l\u00edo, y veremos qu\u00e9 podemos hacer con estos enlaces.<\/p>\n<h1>Show me the code<\/h1>\n<p>En este ejemplo se va a enlazar la ejecuci\u00f3n de varias Azure Functions haciendo uso de los enlaces de salida. En primer lugar, esta demo se ha realizado en .NET 6 y Visual Studio 2022, que nos gusta estar a la \u00faltima. Por tanto, con la versi\u00f3n 4.x de Azure Functions. Podemos crear el proyecto de tipo Azure Functions con el wizard de Visual Studio, en VsCode o desde un terminal haciendo uso de los comandos de <a href=\"https:\/\/docs.microsoft.com\/es-es\/azure\/azure-functions\/functions-run-local?tabs=v4%2Cwindows%2Ccsharp%2Cportal%2Cbash%2Ckeda\" target=\"_blank\" rel=\"noopener\">Azure Functions Core Tools.<\/a><\/p>\n<p>En este caso hemos escrito el ejemplo en C#, pero podr\u00edamos hacer uso de cualquier otro lenguaje de programaci\u00f3n como JavaScript o Python. En C#, para hacer uso de las extensiones del SDK de Azure Storage empleadas, hay que instalar el paquete Nuget <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Azure.WebJobs.Extensions.Storage\" target=\"_blank\" rel=\"noopener\">Microsoft.Azure.WebJobs.Extensions.Storage<\/a>, en este caso hemos usado la versi\u00f3n 4.0.5 para poder hacer uso de los atributos de los enlaces de salida de Table Storage, ya que la versi\u00f3n 5.0.0 de la librer\u00eda no hace uso de los mismos (<a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-functions\/functions-bindings-storage-table#packages---functions-2x-and-higher\" target=\"_blank\" rel=\"noopener\">m\u00e1s info<\/a>).<\/p>\n<p>Como dec\u00edamos, el objetivo de este ejemplo es conectar varias Azure Function mediante enlaces de salida. Para ello, vamos a tener tres functions:<\/p>\n<ul>\n<li>Un <strong><em>HttpTrigger<\/em> <\/strong>que recibe unos datos en el cuerpo de la petici\u00f3n y los escribe en un mensaje en un <strong><em>Azure Queue Storage<\/em><\/strong>.<\/li>\n<li>Un <strong><em>QueueTrigger<\/em> <\/strong>que va a copiar el mensaje en un fichero JSON y lo almacena en un <strong><em>Blob Storage<\/em><\/strong>.<\/li>\n<li>Un <strong><em>BlobTrigger<\/em> <\/strong>que lee el contenido del fichero e inserta un registro en un <strong><em>Azure Table Storage<\/em><\/strong>.<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/demo-architecture-diagram.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1505 size-full\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/demo-architecture-diagram.jpg\" alt=\"\" width=\"354\" height=\"395\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/demo-architecture-diagram.jpg 354w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/demo-architecture-diagram-269x300.jpg 269w\" sizes=\"auto, (max-width: 354px) 100vw, 354px\" \/><\/a><\/p>\n<h3>Azure Function HTTP Trigger.<\/h3>\n<p>Creamos un endpoint HTTP muy sencillo al que, mediante un POST, se le env\u00edan los datos de un grupo de m\u00fasica. Como vemos, el m\u00e9todo Run tiene este atributo:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n&#x5B;return: Queue(&quot;%BandQueueName%&quot;)]\r\n<\/pre>\n<p>Esta l\u00ednea indica, mediante un <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/azure-functions\/functions-bindings-storage-queue-output?tabs=csharp\" target=\"_blank\" rel=\"noopener\">enlace de salida de Azure Queue Storage<\/a>, que el tipo de dato que devuelve la Azure Function, un array de bytes, se va a escribir en la cola de mensajes que indiquemos en el par\u00e1metro. En caso de que no existiese la cola, se crear\u00eda autom\u00e1ticamente en el Storage correspondiente, en este ejemplo, en el emulador.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static class BandApi\r\n{\r\n\t&#x5B;FunctionName(&quot;BandApi&quot;)]\r\n\t&#x5B;return: Queue(&quot;%BandQueueName%&quot;)]\r\n\tpublic static async Task&lt;byte&#x5B;]&gt; Run(\r\n\t\t&#x5B;HttpTrigger(AuthorizationLevel.Anonymous, &quot;post&quot;, Route = &quot;band&quot;)] HttpRequest req)\r\n\t{\r\n\t\tusing MemoryStream ms = new();\r\n\t\tawait req.Body.CopyToAsync(ms);\r\n\t\treturn ms.ToArray();\r\n\t}\r\n}\r\n<\/pre>\n<h3>Azure Function Queue Trigger.<\/h3>\n<p>Esta Azure Function recibe el mensaje y esta vez, en lugar de usar un atributo en el m\u00e9todo, se usa como par\u00e1metro de salida de la funci\u00f3n, indicando que se va a escribir en un blob de un contenedor determinado, generando un fichero JSON cuyo nombre ser\u00e1 un GUID. Como anteriormente, si no existiese el contenedor d\u00f3nde queremos almacenar el fichero se crear\u00eda autom\u00e1ticamente.<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static class BandMessageHandler\r\n{\r\n\t&#x5B;FunctionName(&quot;BandMessageHandler&quot;)]\r\n\tpublic static async Task Run(\r\n\t\t&#x5B;QueueTrigger(&quot;%BandQueueName%&quot;)] byte&#x5B;] message,\r\n\t\t&#x5B;Blob(&quot;%BandsContainerName%\/{rand-guid}.json&quot;, FileAccess.Write)] CloudBlockBlob outputBlob)\r\n\t{\r\n\t\tusing var ms = new MemoryStream(message);\r\n\t\tawait outputBlob.UploadFromStreamAsync(ms);\r\n\t}\r\n}\r\n<\/pre>\n<h3>Azure Function Blob Trigger<\/h3>\n<p>Para terminar, se recibe el contenido del fichero y se inserta en un Table Storage. Haciendo uso de nuevo del atributo en el m\u00e9todo, de esta manera:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n&#x5B;return: Table(&quot;%BandTable%&quot;)]\r\n<\/pre>\n<p>En este caso, si la tabla no existiese, obtendr\u00edamos un error, por lo que habr\u00eda que crearla previamente. La funci\u00f3n quedar\u00eda as\u00ed:<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\npublic static class StoreBand\r\n{\r\n\t&#x5B;FunctionName(&quot;StoreBand&quot;)]\r\n\t&#x5B;return: Table(&quot;%BandTable%&quot;)]\r\n\tpublic static async Task&lt;BandEntity&gt; Run(\r\n\t\t&#x5B;BlobTrigger(&quot;%BandsContainerName%\/{name}&quot;)] Stream myBlob,\r\n\t\tstring name)\r\n\t{\r\n\t\tvar band = await JsonSerializer.DeserializeAsync&lt;Band&gt;(myBlob, new JsonSerializerOptions\r\n\t\t{\r\n\t\t\tPropertyNameCaseInsensitive = true\r\n\t\t});\r\n\r\n\t\treturn new BandEntity\r\n\t\t{\r\n\t\t\tPartitionKey = band.Genre,\r\n\t\t\tRowKey = Guid.NewGuid().ToString(),\r\n\t\t\tName = band.Name,\r\n\t\t\tFoundationYear = band.FoundationYear,\r\n\t\t\tAlbums = band.Albums\r\n\t\t};\r\n\t}\r\n}\r\n\r\n<\/pre>\n<p>Pod\u00e9is ver la demo del ejemplo en el siguiente v\u00eddeo:<\/p>\n<p><iframe loading=\"lazy\" title=\"YouTube video player\" src=\"https:\/\/www.youtube.com\/embed\/NP90ntdhpos\" width=\"560\" height=\"315\" frameborder=\"0\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<h1>Conclusi\u00f3n.<\/h1>\n<p>Los enlaces de salida nos permiten escribir en el destino de datos de manera nativa, sin la necesidad de un trabajo extra por parte del desarrollador para realizar esta tarea. A su vez, nos va a permitir separar responsabilidades en nuestras funciones, pudiendo generar un flujo de ejecuci\u00f3n l\u00f3gico en funci\u00f3n de nuestras necesidades.<\/p>\n<p>Adjunto un enlace al repo de Github con el c\u00f3digo.<\/p>\n<p><a href=\"https:\/\/github.com\/cmorenoe\/azure-functions-output-bindings\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1476 size-medium\" src=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2021\/12\/github-300x94.jpg\" alt=\"\" width=\"300\" height=\"94\" srcset=\"https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2021\/12\/github-300x94.jpg 300w, https:\/\/encaminablogs.wpenginepowered.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2021\/12\/github.jpg 303w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Saludos y Happy Coding!<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content --><span class=\"et_bloom_bottom_trigger\"><\/span>","protected":false},"excerpt":{"rendered":"<p>Por mi experiencia he podido observar que muchos developers no aplican o desconocen el concepto de binding o enlace. En este art\u00edculo vamos a conocerlos un poco mejor \ud83d\ude09<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":202,"featured_media":1523,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[70,111,4],"tags":[],"class_list":["post-1491","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-net","category-azure-functions","category-microsoft-azure"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v18.2.1 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Enlaces de salida (output bindings) en Azure Functions | ENCAMINA<\/title>\n<meta name=\"description\" content=\"Por mi experiencia he podido observar que muchos desarrolladores no aplican o desconocen el concepto de binding o enlace. Hoy te lo explico.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Enlaces de salida (output bindings) en Azure Functions\" \/>\n<meta property=\"og:description\" content=\"Por mi experiencia he podido observar que muchos desarrolladores no aplican o desconocen el concepto de binding o enlace. Hoy te lo explico.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/\" \/>\n<meta property=\"og:site_name\" content=\"Piensa en software, desarrolla en colores\" \/>\n<meta property=\"article:published_time\" content=\"2022-01-13T10:57:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-01-13T12:37:23+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1791\" \/>\n\t<meta property=\"og:image:height\" content=\"1028\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Carlos Moreno\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Carlos Moreno\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\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\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/#article\",\"isPartOf\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/\"},\"author\":{\"name\":\"Carlos Moreno\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/264d85a82af4cb1f08aea35047b510cd\"},\"headline\":\"Enlaces de salida (output bindings) en Azure Functions\",\"datePublished\":\"2022-01-13T10:57:22+00:00\",\"dateModified\":\"2022-01-13T12:37:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/\"},\"wordCount\":1159,\"commentCount\":0,\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2022\\\/01\\\/enlaces-salida.jpg\",\"articleSection\":[\".NET\",\"Azure Functions\",\"Microsoft Azure\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/\",\"url\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/\",\"name\":\"Enlaces de salida (output bindings) en Azure Functions | ENCAMINA\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/#primaryimage\"},\"image\":{\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2022\\\/01\\\/enlaces-salida.jpg\",\"datePublished\":\"2022-01-13T10:57:22+00:00\",\"dateModified\":\"2022-01-13T12:37:23+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/264d85a82af4cb1f08aea35047b510cd\"},\"description\":\"Por mi experiencia he podido observar que muchos desarrolladores no aplican o desconocen el concepto de binding o enlace. Hoy te lo explico.\",\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"http:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/enlaces-de-salida-output-bindings-en-azure-functions\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2022\\\/01\\\/enlaces-salida.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/wp-content\\\/uploads\\\/sites\\\/21\\\/2022\\\/01\\\/enlaces-salida.jpg\",\"width\":1791,\"height\":1028},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#website\",\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/\",\"name\":\"Piensa en software, desarrolla en colores\",\"description\":\"Las ventajas que te ofrece Microsoft Azure y el mundo.NET\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/#\\\/schema\\\/person\\\/264d85a82af4cb1f08aea35047b510cd\",\"name\":\"Carlos Moreno\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7c0a1fc177e7f659eaea95ce9e35459039fd8e6473c1d44b9ed3d72b82b38078?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7c0a1fc177e7f659eaea95ce9e35459039fd8e6473c1d44b9ed3d72b82b38078?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/7c0a1fc177e7f659eaea95ce9e35459039fd8e6473c1d44b9ed3d72b82b38078?s=96&d=mm&r=g\",\"caption\":\"Carlos Moreno\"},\"description\":\"Software &amp; Cloud Architect en ENCAMINA, con 10 a\u00f1os de experiencia en el desarrollo de soluciones empresariales en tecnolog\u00edas Microsoft, ya sea realizando tareas de frontend como de backend. Desde hace un tiempo con el foco puesto en el dise\u00f1o, implementaci\u00f3n y formaci\u00f3n sobre arquitecturas distribuidas en Azure.\",\"sameAs\":[\"admin\"],\"url\":\"https:\\\/\\\/blogs.encamina.com\\\/piensa-en-software-desarrolla-en-colores\\\/author\\\/cmoreno\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Enlaces de salida (output bindings) en Azure Functions | ENCAMINA","description":"Por mi experiencia he podido observar que muchos desarrolladores no aplican o desconocen el concepto de binding o enlace. Hoy te lo explico.","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":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/","og_locale":"es_ES","og_type":"article","og_title":"Enlaces de salida (output bindings) en Azure Functions","og_description":"Por mi experiencia he podido observar que muchos desarrolladores no aplican o desconocen el concepto de binding o enlace. Hoy te lo explico.","og_url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/","og_site_name":"Piensa en software, desarrolla en colores","article_published_time":"2022-01-13T10:57:22+00:00","article_modified_time":"2022-01-13T12:37:23+00:00","og_image":[{"width":1791,"height":1028,"url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg","type":"image\/jpeg"}],"author":"Carlos Moreno","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Carlos Moreno","Tiempo de lectura":"6 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/#article","isPartOf":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/"},"author":{"name":"Carlos Moreno","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/264d85a82af4cb1f08aea35047b510cd"},"headline":"Enlaces de salida (output bindings) en Azure Functions","datePublished":"2022-01-13T10:57:22+00:00","dateModified":"2022-01-13T12:37:23+00:00","mainEntityOfPage":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/"},"wordCount":1159,"commentCount":0,"image":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg","articleSection":[".NET","Azure Functions","Microsoft Azure"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/#respond"]}]},{"@type":"WebPage","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/","url":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/","name":"Enlaces de salida (output bindings) en Azure Functions | ENCAMINA","isPartOf":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website"},"primaryImageOfPage":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/#primaryimage"},"image":{"@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg","datePublished":"2022-01-13T10:57:22+00:00","dateModified":"2022-01-13T12:37:23+00:00","author":{"@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/264d85a82af4cb1f08aea35047b510cd"},"description":"Por mi experiencia he podido observar que muchos desarrolladores no aplican o desconocen el concepto de binding o enlace. Hoy te lo explico.","inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"http:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/enlaces-de-salida-output-bindings-en-azure-functions\/#primaryimage","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg","contentUrl":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-content\/uploads\/sites\/21\/2022\/01\/enlaces-salida.jpg","width":1791,"height":1028},{"@type":"WebSite","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#website","url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/","name":"Piensa en software, desarrolla en colores","description":"Las ventajas que te ofrece Microsoft Azure y el mundo.NET","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/#\/schema\/person\/264d85a82af4cb1f08aea35047b510cd","name":"Carlos Moreno","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/7c0a1fc177e7f659eaea95ce9e35459039fd8e6473c1d44b9ed3d72b82b38078?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/7c0a1fc177e7f659eaea95ce9e35459039fd8e6473c1d44b9ed3d72b82b38078?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/7c0a1fc177e7f659eaea95ce9e35459039fd8e6473c1d44b9ed3d72b82b38078?s=96&d=mm&r=g","caption":"Carlos Moreno"},"description":"Software &amp; Cloud Architect en ENCAMINA, con 10 a\u00f1os de experiencia en el desarrollo de soluciones empresariales en tecnolog\u00edas Microsoft, ya sea realizando tareas de frontend como de backend. Desde hace un tiempo con el foco puesto en el dise\u00f1o, implementaci\u00f3n y formaci\u00f3n sobre arquitecturas distribuidas en Azure.","sameAs":["admin"],"url":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/author\/cmoreno\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/users\/202"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/comments?post=1491"}],"version-history":[{"count":0,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/posts\/1491\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media\/1523"}],"wp:attachment":[{"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/media?parent=1491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/categories?post=1491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.encamina.com\/piensa-en-software-desarrolla-en-colores\/wp-json\/wp\/v2\/tags?post=1491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}