﻿
{"id":17367,"date":"2020-08-16T22:11:16","date_gmt":"2020-08-16T22:11:16","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=17367"},"modified":"2020-08-16T22:11:16","modified_gmt":"2020-08-16T22:11:16","slug":"azure-functions-serisi-13-bindings","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/azure-functions-serisi-13-bindings\/","title":{"rendered":"Azure Functions Serisi #13 &#8211; Bindings"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p>Bu i\u00e7eri\u011fimizde geli\u015ftirdi\u011fimiz Azure Function uygulamalar\u0131n\u0131 di\u011fer Azure servislerine ba\u011flayarak kullanabilmemizi sa\u011flayan Binding konusu \u00fczerine detayl\u0131 izahat ve incelemede bulunaca\u011f\u0131z.<\/p>\n<h3 style=\"color: #e83e8c;\">Azure Function Bindings Nedir?<\/h3>\n<blockquote><p><em>Azure Function Bindings, Azure Function yap\u0131lanmas\u0131n\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelli\u011fidir.<\/em><\/p><\/blockquote>\n<p>Azure Function Bindings, Azure Functionlar&#8217;\u0131 di\u011fer Azure servislerine ba\u011flayarak kullanabilmemizi sa\u011flayan bir \u00f6zelliktir. \u0130\u015flevsel a\u00e7\u0131dan spesifik bir \u00f6rnek vermemiz gerekirse e\u011fer; <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-functions-serisi-9-http-trigger\/\" rel=\"noopener noreferrer\" target=\"_blank\">Http Trigger<\/a> ile elde edilen datay\u0131 <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-storage-serisi-6-azure-table-storage-ve-net-core\/\" rel=\"noopener noreferrer\" target=\"_blank\">Azure Storage Table<\/a>&#8216;a yazd\u0131rmak, gelen dosyay\u0131 <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-storage-serisi-7-azure-blob-storage-ve-asp-net-core-ile-kullanimi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Azure Storage Blog<\/a>&#8216;a eklemek yahut asenkron i\u015flenmesi gereken bir mesaj\u0131 <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-storage-serisi-8-azure-queue-storage-ve-asp-net-core-ile-kullanimi\/\" target=\"_blank\" rel=\"noopener noreferrer\">Azure Storage Queue<\/a>&#8216;da kuyru\u011fa dahil etmek i\u00e7in bu servislerle function aras\u0131nda ba\u011flant\u0131y\u0131 sa\u011flayacak olan mekanizma binding yap\u0131lanmas\u0131d\u0131r.<\/p>\n<p>Normal \u015fartlarda bir yaz\u0131l\u0131m \u00fczerinden Azure servislerine ba\u011flant\u0131 sa\u011flayabilmek i\u00e7in yap\u0131y\u0131 in\u015fa etmemiz gerekmektedir. Bu yaz\u0131l\u0131m Azure Function oldu\u011fu zamanda s\u00fcre\u00e7 fark etmeyecek ve ayn\u0131 i\u015fi tekrar sergilememiz gerekecektir. \u0130\u015fte burada binding \u00f6zelli\u011fi sayesinde Azure Function&#8217;lar da ekstradan ba\u011flant\u0131 i\u00e7in kodlamaya gerek kalmaks\u0131z\u0131n haz\u0131r nesneler arac\u0131l\u0131\u011f\u0131yla di\u011fer servislere eri\u015fim rahat\u00e7a ger\u00e7ekle\u015ftirilebilecek ve i\u015f mant\u0131\u011f\u0131ndaki ekstra y\u00fck ay\u0131klanaca\u011f\u0131ndan dolay\u0131 kod ve i\u015f maliyeti minimize edilmi\u015f olacakt\u0131r.<\/p>\n<blockquote style=\"color:orange;\"><p><em>Binding sayesinde ekstra kod yazmaks\u0131z\u0131n Azure i\u00e7erisindeki bir\u00e7ok servise ba\u011flant\u0131 ger\u00e7ekle\u015ftirilebilmektedir.<\/em><\/p><\/blockquote>\n<p>Bindingler; <span style=\"color:green;\">Input Binding<\/span> ve <span style=\"color:green;\">Output Binding<\/span> olmak \u00fczere ikiye ayr\u0131l\u0131rlar.<\/p>\n<ul>\n<li><strong style=\"color:green;\">Input Binding<\/strong><br \/>\nAzure Function&#8217;\u0131n ilgili servislere ekstradan kod yazmaks\u0131z\u0131n ba\u011flanmas\u0131d\u0131r. Function&#8217;\u0131m\u0131z bu input binding \u00fczerinden verileri okuyabilir, i\u015fleyebilir. Varsay\u0131lan binding t\u00fcr\u00fcd\u00fcr.\n<\/li>\n<li><strong style=\"color:green;\">Output Binding<\/strong><br \/>\nAzure Function&#8217;\u0131n ilgili servislerden data&#8217;y\u0131 d\u0131\u015far\u0131ya g\u00f6ndermesi ve i\u015fletmesidir.\n<\/li>\n<\/ul>\n<h3 style=\"color: #e83e8c;\">Binding Yap\u0131lanmas\u0131(function.json)<\/h3>\n<p>Azure Function, binding mekanizmas\u0131n\u0131 &#8216;function.json&#8217; isimli dosya \u00fczerinden yap\u0131land\u0131rmaktad\u0131r. Binding, compile olabilen dillerde(Java, C#) attributes\/annotations gibi yap\u0131larla ger\u00e7ekle\u015ftirilirken, compile olmayan dillerde(Node.JS) ise direkt olarak &#8216;function.json&#8217; dosyas\u0131 \u00fczerinden ger\u00e7ekle\u015ftirilmektedir. Lakin compile edilen dillerde her ne kadar attribute kullan\u0131lsada, esas\u0131nda bu bir tan\u0131mlamadan ibarettir ve \u00f6z\u00fcnde &#8216;function.json&#8217; dosyas\u0131 olu\u015fturulmu\u015f olmakta ve kullan\u0131lmaktad\u0131r.<\/p>\n<p>\u00d6rnek olmas\u0131 hasebiyle bir &#8216;function.json&#8217; dosyas\u0131n\u0131n nas\u0131l olu\u015fturuldu\u011funu ve yap\u0131sal olarak ne oldu\u011funu inceleyebilmek i\u00e7in Visual Studio&#8217;da geli\u015ftirdi\u011finiz Azure Function uygulamas\u0131n\u0131 derleyiniz ve ard\u0131ndan a\u015fa\u011f\u0131daki dizinine gidiniz;<br \/>\n<code><strong style=\"color:red;\">...\\{app_name}\\{app_name}\\bin\\Debug\\netcoreapp3.1\\<span style=\"color:blue;\">{function_name}<\/span><\/strong><\/code><br \/>\nDizini incelerseniz e\u011fer <span style=\"color:blue;\">{function_name}<\/span> k\u0131sm\u0131n\u0131n uygulama i\u00e7erisinde tan\u0131mlanm\u0131\u015f her bir function&#8217;a kar\u015f\u0131l\u0131k geldi\u011fini anlayacaks\u0131n\u0131z. Misal; i\u00e7erisinde &#8216;Function1&#8217; ve &#8216;Function2&#8217; isimli iki adet fonksiyon bulunan bir Azure Function uygulamas\u0131 derlendikten sonra a\u015fa\u011f\u0131daki \u00e7\u0131kt\u0131y\u0131 verecektir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"203\" height=\"131\" class=\"aligncenter size-full wp-image-17394\" \/><\/a><br \/>\nBu klas\u00f6rlerin her birinde bir &#8216;function.json&#8217; dosyas\u0131 mevcuttur.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-1.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"142\" height=\"89\" class=\"aligncenter size-full wp-image-17396\" \/><\/a><br \/>\n\u0130\u015fte bu dosya bizim binding yap\u0131land\u0131rmas\u0131n\u0131 bar\u0131nd\u0131ran dosyam\u0131zd\u0131r. Art\u0131k ilgili dosyan\u0131n i\u00e7eri\u011fine g\u00f6z atabiliriz;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n{\r\n  &quot;generatedBy&quot;: &quot;Microsoft.NET.Sdk.Functions-3.0.3&quot;,\r\n  &quot;configurationSource&quot;: &quot;attributes&quot;,\r\n  &quot;bindings&quot;: &#x5B;\r\n    {\r\n      &quot;type&quot;: &quot;httpTrigger&quot;,\r\n      &quot;methods&quot;: &#x5B;\r\n        &quot;get&quot;,\r\n        &quot;post&quot;\r\n      ],\r\n      &quot;authLevel&quot;: &quot;function&quot;,\r\n      &quot;name&quot;: &quot;req&quot;\r\n    }\r\n  ],\r\n  &quot;disabled&quot;: false,\r\n  &quot;scriptFile&quot;: &quot;..\/bin\/ExampleAzureFunctions.dll&quot;,\r\n  &quot;entryPoint&quot;: &quot;ExampleAzureFunctions.Function1.Run&quot;\r\n}\r\n<\/pre>\n<ul>\n<li><em>&#8216;configurationSource&#8217;<\/em><br \/>\nKonfig\u00fcrasyonun davran\u0131\u015fsal olarak hangi kaynaktan oldu\u011funu ifade eder. Yukar\u0131daki tan\u0131mda &#8216;attributes&#8217; de\u011ferini ta\u015f\u0131yarak, compile edilen bir dil kullan\u0131ld\u0131\u011f\u0131n\u0131 ve ilgili binding&#8217;in attribute arac\u0131l\u0131\u011f\u0131 ile yap\u0131land\u0131r\u0131ld\u0131\u011f\u0131n\u0131 ifade eder.\n<\/li>\n<li><em>&#8216;type&#8217;<\/em><br \/>\nTrigger&#8217;\u00een t\u00fcr\u00fcn\u00fc ifade eder.\n<\/li>\n<li><em>&#8216;methods&#8217;<\/em><br \/>\n\u0130lgili function&#8217;\u0131 hangi t\u00fcr metotlar\u0131n tetikleyebilece\u011fini ifade eder.\n<\/li>\n<li><em>&#8216;authLevel&#8217;<\/em><br \/>\nFunction&#8217;\u0131n hangi authentication level ile tan\u0131mland\u0131\u011f\u0131n\u0131 ifade eder.\n<\/li>\n<li><em>&#8216;name&#8217;<\/em><br \/>\n\u0130lgili Function&#8217;\u0131 tetikleyecek olan trigger&#8217;\u0131 yakalayacak request nesnesinin parametrik ismini ifade eder.\n<\/li>\n<\/ul>\n<p><strong>Bir binding i\u015flemi i\u00e7in &#8216;function.json&#8217; dosyas\u0131nda en az nelerin yap\u0131land\u0131r\u0131lmas\u0131 gerekmektedir?<\/strong><\/p>\n<ol>\n<li>Y\u00f6n(direction)<\/li>\n<li>Type(type) ve<\/li>\n<li>Name<\/li>\n<\/ol>\n<p>bildirilmelidir. Y\u00f6n; ilgili binding&#8217;in input mu output mu oldu\u011funu ifade eder. Type; Hangi Azure servis&#8217;e(Queue, Table, Blob) binding yap\u0131laca\u011f\u0131n\u0131 bildirir. Name ise; request&#8217;i kar\u015f\u0131layan parametrik nesnenin referans\u0131n\u0131 temsil eder. Yukar\u0131daki \u00f6rnek &#8216;function.json&#8217; i\u00e7eri\u011fine g\u00f6z atarsan\u0131z bu \u00fc\u00e7 asli tan\u0131m\u0131n &#8216;direction&#8217; hari\u00e7 yap\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rm\u00fc\u015f olacaks\u0131n\u0131z. <em>Neden &#8216;direction&#8217; tan\u0131mlamas\u0131 yap\u0131lmam\u0131\u015ft\u0131r?<\/em> sorusuna kar\u015f\u0131l\u0131k &#8211;<em>default olarak trigger&#8217;lar\u0131n &#8216;input&#8217; kabul edilmesinden dolay\u0131<\/em>&#8211; cevab\u0131n\u0131 vermemiz yeterli olacakt\u0131r.<\/p>\n<blockquote><p><em style=\"color:purple;\">Binding, sadece Azure servisleri ile \u00e7al\u0131\u015fmaktad\u0131r. Amazon, Google vs. gibi harici servislerle \u00e7al\u0131\u015fabilmek i\u00e7in ilgili servise \u00f6zg\u00fc hususi kodlamalar\u0131n yap\u0131lmas\u0131 gerekmektedir.<\/em><\/p><\/blockquote>\n<h3 style=\"color: #e83e8c;\">Binding \u0130\u015fleminin Uygulanmas\u0131<\/h3>\n<p>Bir Azure Function uygulamas\u0131 \u00fczerinden binding i\u015fleminin ger\u00e7ekle\u015ftirilebilmesi i\u00e7in uygulamaya &#8216;<a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.Azure.WebJobs.Extensions.Storage\" rel=\"noopener noreferrer\" target=\"_blank\">Microsoft.Azure.WebJobs.Extensions.Storage<\/a>&#8216; k\u00fct\u00fcphanesinin entegre edilmesi gerekmektedir.<br \/>\n<a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-2.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-2.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"400\" height=\"125\" class=\"aligncenter size-full wp-image-17412\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-2.jpg 400w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-2-300x94.jpg 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><\/p>\n<h4>Table Output Binding<\/h4>\n<p>\u015eimdi a\u015fa\u011f\u0131da Table Output Binding&#8217;e \u00f6zel bir \u00f6rnek ele alal\u0131m;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class Function1\r\n    {\r\n        const string routeName = &quot;products&quot;;\r\n        &#x5B;FunctionName(&quot;Post&quot;)]\r\n        async public static Task&lt;IActionResult&gt; Post(\r\n            &#x5B;HttpTrigger(AuthorizationLevel.Function, &quot;post&quot;, Route = routeName)] HttpRequest req,\r\n            ILogger log, &#x5B;Table(tableName: &quot;products&quot;, Connection = &quot;StorageConnectionString&quot;)] CloudTable cloudTable)\r\n        {\r\n            string body = await new StreamReader(req.Body).ReadToEndAsync();\r\n            Product product = JsonConvert.DeserializeObject&lt;Product&gt;(body);\r\n            await cloudTable.CreateIfNotExistsAsync();\r\n            TableOperation operation = TableOperation.Insert(product);\r\n            TableResult tableResult = await cloudTable.ExecuteAsync(operation);\r\n\r\n            return new OkObjectResult(tableResult.Result);\r\n        }\r\n\r\n        &#x5B;FunctionName(&quot;Get&quot;)]\r\n        async public static Task&lt;IActionResult&gt; Get(\r\n            &#x5B;HttpTrigger(AuthorizationLevel.Function, &quot;get&quot;, Route = routeName)] HttpRequest req,\r\n            ILogger log, &#x5B;Table(tableName: &quot;products&quot;, Connection = &quot;StorageConnectionString&quot;)] CloudTable cloudTable)\r\n        {\r\n            return new OkObjectResult(cloudTable.CreateQuery&lt;Product&gt;().AsQueryable());\r\n        }\r\n    }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer &#8216;Post&#8217; ve &#8216;Get&#8217; olmak \u00fczere iki adet function olu\u015fturulmu\u015ftur. Bu functionlar\u0131n &#8216;CloudTable&#8217; isimli parametreleri &#8216;Table&#8217; attribute&#8217;u arac\u0131l\u0131\u011f\u0131yla <a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-storage-serisi-6-azure-table-storage-ve-net-core\/\" rel=\"noopener noreferrer\" target=\"_blank\">Table Storage<\/a> servisine output binding ile ba\u011flanm\u0131\u015f bulunmaktad\u0131r. Ek olarak &#8216;Connection&#8217; bilgisi &#8216;<a href=\"https:\/\/www.gencayyildiz.com\/blog\/azure-functions-serisi-12-local-settings-json-dosyasi-ve-kullanimi\/\" rel=\"noopener noreferrer\" target=\"_blank\">local.storage.json<\/a>&#8216; dosyas\u0131ndaki &#8216;StorageConnectionString&#8217; alan\u0131nda tutulmaktad\u0131r.<\/p>\n<p>\u0130lgili functionlar\u0131 Postman \u00fczerinden test edelim&#8230;<\/p>\n<table>\n<thead>\n<tr>\n<th>POST<\/th>\n<th>GET<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-3.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-3.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"749\" height=\"559\" class=\"aligncenter size-full wp-image-17414\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-3.jpg 749w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-3-300x224.jpg 300w\" sizes=\"auto, (max-width: 749px) 100vw, 749px\" \/><\/a><\/td>\n<td><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-4.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-4.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"809\" height=\"780\" class=\"aligncenter size-full wp-image-17415\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-4.jpg 809w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-4-300x289.jpg 300w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-4-768x740.jpg 768w\" sizes=\"auto, (max-width: 809px) 100vw, 809px\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>Queue Output Binding<\/h4>\n<p>\u015eimdide bir Queue Output Binding&#8217;e \u00f6rnek verelim;<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n    public static class Function1\r\n    {\r\n        const string routeName = &quot;message&quot;;\r\n        &#x5B;FunctionName(&quot;Post&quot;)]\r\n        async public static Task&lt;IActionResult&gt; Post(\r\n            &#x5B;HttpTrigger(AuthorizationLevel.Function, &quot;post&quot;, Route = routeName)] HttpRequest req,\r\n            ILogger log, &#x5B;Queue(queueName: &quot;mymessage&quot;, Connection = &quot;StorageConnectionString&quot;)] CloudQueue cloudQueue)\r\n        {\r\n            string body = await new StreamReader(req.Body).ReadToEndAsync();\r\n            await cloudQueue.CreateIfNotExistsAsync();\r\n            CloudQueueMessage cloudQueueMessage = new CloudQueueMessage(body);\r\n            await cloudQueue.AddMessageAsync(cloudQueueMessage);\r\n            return new OkResult();\r\n        }\r\n\r\n        &#x5B;FunctionName(&quot;Get&quot;)]\r\n        async public static Task&lt;IActionResult&gt; Get(\r\n            &#x5B;HttpTrigger(AuthorizationLevel.Function, &quot;get&quot;, Route = routeName)] HttpRequest req,\r\n            ILogger log, &#x5B;Queue(queueName: &quot;mymessage&quot;, Connection = &quot;StorageConnectionString&quot;)] CloudQueue cloudQueue)\r\n        {\r\n            return new OkObjectResult((await cloudQueue.GetMessageAsync()).AsString);\r\n        }\r\n    }\r\n<\/pre>\n<table>\n<thead>\n<tr>\n<th>POST<\/th>\n<th>GET<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-5.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-5.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"645\" height=\"265\" class=\"aligncenter size-full wp-image-17420\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-5.jpg 645w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-5-300x123.jpg 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/a><\/td>\n<td><a href=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-6.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-6.jpg\" alt=\"Azure Functions Serisi #13 - Bindings\" width=\"333\" height=\"250\" class=\"aligncenter size-full wp-image-17421\" srcset=\"https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-6.jpg 333w, https:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2020\/08\/Azure-Functions-Serisi-13-Bindings-6-300x225.jpg 300w\" sizes=\"auto, (max-width: 333px) 100vw, 333px\" \/><\/a><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\nSonraki yaz\u0131lar\u0131mda g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Bu i\u00e7eri\u011fimizde geli\u015ftirdi\u011fimiz Azure Function uygulamalar\u0131n\u0131 di\u011fer Azure servislerine ba\u011flayarak kullanabilmemizi sa\u011flayan Binding konusu \u00fczerine detayl\u0131 izahat ve incelemede bulunaca\u011f\u0131z. Azure Function Bindings Nedir? Azure Function Bindings, Azure Function yap\u0131lanmas\u0131n\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelli\u011fidir.&#46;&#46;&#46;<!-- 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":1,"featured_media":17011,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3121],"tags":[3734,3661,3733,3738,3737,3739,3735,3736,3741,3740],"class_list":["post-17367","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","tag-azure-bindings","tag-azure-functions","tag-azure-functions-bindings","tag-azure-input-binding","tag-azure-output-binding","tag-function-json","tag-input-binding","tag-output-binding","tag-queue-output-binding","tag-table-output-binding"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17367","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=17367"}],"version-history":[{"count":48,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17367\/revisions"}],"predecessor-version":[{"id":17424,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/17367\/revisions\/17424"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/17011"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=17367"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=17367"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=17367"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}