{"id":36376,"date":"2025-12-14T20:40:51","date_gmt":"2025-12-14T17:40:51","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=36376"},"modified":"2025-12-14T20:40:51","modified_gmt":"2025-12-14T17:40:51","slug":"digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/","title":{"rendered":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi<\/h2>\n<h3>Giri\u015f: Sunucusuz Mimarinin Y\u00fckseli\u015fi ve DigitalOcean Functions<\/h3>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, uygulamalar\u0131n geli\u015ftirilmesi, da\u011f\u0131t\u0131lmas\u0131 ve y\u00f6netilmesi s\u00fcre\u00e7leri de s\u00fcrekli evrim ge\u00e7irmektedir. Geli\u015ftiricilerin altyap\u0131 y\u00f6netimi y\u00fck\u00fcnden kurtularak do\u011frudan kod yazmaya odaklanmas\u0131n\u0131 sa\u011flayan &#8220;sunucusuz (serverless) mimari&#8221;, bu evrimin en \u00f6nemli duraklar\u0131ndan biridir. Sunucusuz mimari, geli\u015ftiricilerin sunucu provizyonu, \u00f6l\u00e7eklendirme, yama uygulama veya bak\u0131m gibi operasyonel g\u00f6revlerle u\u011fra\u015fmak zorunda kalmadan kodlar\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmalar\u0131na olanak tan\u0131r.<\/p>\n<p>DigitalOcean Functions, bu sunucusuz trende DigitalOcean&#8217;\u0131n g\u00fc\u00e7l\u00fc ve kullan\u0131c\u0131 dostu ekosistemi i\u00e7inde bir yan\u0131t olarak ortaya \u00e7\u0131km\u0131\u015ft\u0131r. Bir Hizmet Olarak Fonksiyon (Function as a Service &#8211; FaaS) platformu olan DigitalOcean Functions, geli\u015ftiricilerin k\u00fc\u00e7\u00fck, tek odakl\u0131 kod par\u00e7ac\u0131klar\u0131n\u0131 (fonksiyonlar\u0131) da\u011f\u0131tmas\u0131na ve bunlar\u0131 belirli olaylar (eventler) tetiklendi\u011finde otomatik olarak \u00e7al\u0131\u015ft\u0131rmas\u0131na imkan tan\u0131r. Bu sayede, yaln\u0131zca kullan\u0131lan kaynak kadar \u00f6deme yap\u0131l\u0131r, uygulamalar otomatik olarak \u00f6l\u00e7eklenir ve geli\u015ftiriciler daha h\u0131zl\u0131 inovasyon yapabilir.<\/p>\n<p>Bu makalede, DigitalOcean Functions&#8217;a s\u0131f\u0131rdan ba\u015flayarak ilk fonksiyonunuzu olu\u015fturma, da\u011f\u0131tma ve y\u00f6netme s\u00fcre\u00e7lerini ad\u0131m ad\u0131m inceleyece\u011fiz. Temel kavramlardan geli\u015fmi\u015f kullan\u0131m senaryolar\u0131na, en iyi uygulamalardan fiyatland\u0131rmaya kadar geni\u015f bir yelpazede bilgi sunarak, DigitalOcean Functions ile sunucusuz d\u00fcnyaya sa\u011flam bir giri\u015f yapman\u0131z\u0131 sa\u011flayaca\u011f\u0131z.<\/p>\n<h3>DigitalOcean Functions Nedir?<\/h3>\n<p>DigitalOcean Functions, DigitalOcean&#8217;\u0131n sunucusuz bilgi i\u015flem hizmetidir. Geli\u015ftiricilerin herhangi bir sunucu veya altyap\u0131 y\u00f6netimi endi\u015fesi duymadan kodlar\u0131n\u0131 bulutta \u00e7al\u0131\u015ft\u0131rmalar\u0131na olanak tan\u0131r. Uygulaman\u0131z\u0131 k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z fonksiyonlara b\u00f6ld\u00fc\u011f\u00fcn\u00fczde, bu fonksiyonlar yaln\u0131zca ihtiya\u00e7 duyuldu\u011funda \u00e7al\u0131\u015ft\u0131r\u0131l\u0131r ve siz sadece fonksiyonunuzun \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u00fcre boyunca t\u00fcketilen kaynaklar i\u00e7in \u00f6deme yapars\u0131n\u0131z. Bu model, \u00f6zellikle olay tabanl\u0131 (event-driven) mimariler, API u\u00e7 noktalar\u0131, arka plan g\u00f6revleri ve veri i\u015fleme i\u015f y\u00fckleri i\u00e7in olduk\u00e7a etkilidir.<\/p>\n<p>DigitalOcean Functions, pop\u00fcler programlama dilleri i\u00e7in yerle\u015fik \u00e7al\u0131\u015fma zaman\u0131 (runtime) deste\u011fi sunar, bu da geli\u015ftiricilerin mevcut bilgi birikimlerini kullanarak h\u0131zla fonksiyonlar olu\u015fturmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Desteklenen \u00e7al\u0131\u015fma zamanlar\u0131 genellikle Node.js, Python, Go, PHP ve Ruby gibi dilleri i\u00e7erir.<\/p>\n<h3>Neden DigitalOcean Functions Kullanmal\u0131s\u0131n\u0131z?<\/h3>\n<p>DigitalOcean Functions&#8217;\u0131 tercih etmek i\u00e7in bir\u00e7ok ge\u00e7erli neden bulunmaktad\u0131r:<\/p>\n<p>*   <strong>Basitlik ve Kullan\u0131m Kolayl\u0131\u011f\u0131:<\/strong> DigitalOcean&#8217;\u0131n genel felsefesine uygun olarak, Functions da olduk\u00e7a basit ve kullan\u0131c\u0131 dostu bir aray\u00fcze ve CLI (Komut Sat\u0131r\u0131 Aray\u00fcz\u00fc) deneyimine sahiptir. H\u0131zl\u0131 kurulum ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri, geli\u015ftiricilerin k\u0131sa s\u00fcrede \u00fcretime ge\u00e7mesini sa\u011flar.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Sunucusuz modelin en b\u00fcy\u00fck avantajlar\u0131ndan biri olan &#8220;kulland\u0131\u011f\u0131n kadar \u00f6de&#8221; (pay-as-you-go) fiyatland\u0131rma modeli, yaln\u0131zca fonksiyonlar\u0131n\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u00fcre ve t\u00fcketti\u011fi bellek i\u00e7in \u00f6deme yapman\u0131z\u0131 sa\u011flar. Bu, \u00f6zellikle d\u00fc\u015f\u00fck trafikli veya d\u00fczensiz i\u015f y\u00fckleri i\u00e7in \u00f6nemli maliyet tasarruflar\u0131 anlam\u0131na gelir.<br \/>\n*   <strong>Otomatik \u00d6l\u00e7eklenebilirlik:<\/strong> Uygulaman\u0131z\u0131n trafi\u011fi artt\u0131\u011f\u0131nda veya azald\u0131\u011f\u0131nda, DigitalOcean Functions arka planda otomatik olarak \u00f6l\u00e7eklenir. Manuel \u00f6l\u00e7eklendirme ayarlar\u0131yla u\u011fra\u015fman\u0131za gerek kalmaz.<br \/>\n*   <strong>H\u0131zl\u0131 Da\u011f\u0131t\u0131m ve Geli\u015ftirme:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131 saniyeler i\u00e7inde da\u011f\u0131tabilir ve g\u00fcncelleyebilirsiniz. Bu, s\u00fcrekli entegrasyon ve s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r ve geli\u015ftirme d\u00f6ng\u00fclerini k\u0131salt\u0131r.<br \/>\n*   <strong>DigitalOcean Ekosistemi ile Entegrasyon:<\/strong> DigitalOcean Functions, Droplet&#8217;ler, Veritabanlar\u0131, Spaces (obje depolama) ve di\u011fer DigitalOcean hizmetleriyle sorunsuz bir \u015fekilde entegre olabilir. Bu, mevcut DigitalOcean altyap\u0131n\u0131z\u0131 kullanarak g\u00fc\u00e7l\u00fc, b\u00fct\u00fcnle\u015fik uygulamalar olu\u015fturman\u0131z\u0131 sa\u011flar.<br \/>\n*   <strong>Geli\u015ftirici Odakl\u0131l\u0131k:<\/strong> \u00c7e\u015fitli pop\u00fcler programlama dillerini desteklemesi ve g\u00fc\u00e7l\u00fc bir CLI arac\u0131 sunmas\u0131, geli\u015ftiricilerin tercih ettikleri ara\u00e7larla verimli bir \u015fekilde \u00e7al\u0131\u015fmas\u0131na olanak tan\u0131r.<\/p>\n<h3>Ba\u015flamadan \u00d6nce Gerekli \u00d6nko\u015fullar<\/h3>\n<p>DigitalOcean Functions ile \u00e7al\u0131\u015fmaya ba\u015flamadan \u00f6nce, birka\u00e7 temel \u015feye ihtiyac\u0131n\u0131z olacak:<\/p>\n<p>1.  <strong>Bir DigitalOcean Hesab\u0131:<\/strong> E\u011fer hen\u00fcz bir hesab\u0131n\u0131z yoksa, DigitalOcean web sitesi \u00fczerinden \u00fccretsiz olarak kaydolabilirsiniz. Yeni kullan\u0131c\u0131lar genellikle platformu denemek i\u00e7in kredi al\u0131rlar.<br \/>\n2.  <strong>DigitalOcean CLI (doctl):<\/strong> DigitalOcean kaynaklar\u0131n\u0131z\u0131 komut sat\u0131r\u0131ndan y\u00f6netmenizi sa\u011flayan g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Functions&#8217;\u0131 da\u011f\u0131tmak ve y\u00f6netmek i\u00e7in <code>doctl<\/code>&#8216;a ihtiyac\u0131n\u0131z olacak.<br \/>\n3.  <strong>Desteklenen Bir \u00c7al\u0131\u015fma Zaman\u0131 Ortam\u0131:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131 yazaca\u011f\u0131n\u0131z programlama diline uygun bir \u00e7al\u0131\u015fma ortam\u0131n\u0131n yerel makinenizde kurulu olmas\u0131 gerekir. Bu makalede Node.js&#8217;i \u00f6rnek olarak kullanaca\u011f\u0131z, bu nedenle Node.js ve npm (Node Package Manager) kurulu olmal\u0131d\u0131r.<br \/>\n    *   <strong>Node.js ve npm:<\/strong> Node.js&#8217;i ve npm&#8217;i resmi web sitesinden (nodejs.org) indirip kurabilirsiniz.<br \/>\n4.  <strong>Metin D\u00fczenleyici veya IDE:<\/strong> Kod yazmak i\u00e7in Visual Studio Code, Sublime Text veya tercih etti\u011finiz herhangi bir metin d\u00fczenleyiciye ihtiyac\u0131n\u0131z olacakt\u0131r.<\/p>\n<h3>DigitalOcean CLI (doctl) Kurulumu ve Kimlik Do\u011frulama<\/h3>\n<p><code>doctl<\/code> kurulumu i\u015fletim sisteminize g\u00f6re de\u011fi\u015fiklik g\u00f6sterir. A\u015fa\u011f\u0131da yayg\u0131n i\u015fletim sistemleri i\u00e7in kurulum ad\u0131mlar\u0131 verilmi\u015ftir:<\/p>\n<p>*   <strong>macOS (Homebrew ile):<\/strong><\/p>\n<pre><code class=\"language-bash\">brew install doctl<\/code><\/pre>\n<p>*   <strong>Linux (apt ile):<\/strong><\/p>\n<pre><code class=\"language-bash\">sudo snap install doctl --classic<\/code><\/pre>\n<p>    veya<\/p>\n<pre><code class=\"language-bash\">curl -sL https:\/\/repos.insights.digitalocean.com\/doctl\/install.sh | sudo bash<\/code><\/pre>\n<p>*   <strong>Windows:<\/strong><br \/>\n    <code>doctl<\/code>&#8216;\u0131n resmi GitHub sayfas\u0131ndan (github.com\/digitalocean\/doctl\/releases) en son s\u00fcr\u00fcm\u00fcn ZIP dosyas\u0131n\u0131 indirip, <code>doctl.exe<\/code> dosyas\u0131n\u0131 sistem PATH&#8217;inize ekleyebilirsiniz.<\/p>\n<p>Kurulum tamamland\u0131ktan sonra, <code>doctl<\/code>&#8216;\u0131n do\u011fru \u015fekilde y\u00fcklendi\u011fini kontrol etmek i\u00e7in s\u00fcr\u00fcm\u00fcn\u00fc kontrol edebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">doctl version<\/code><\/pre>\n<p>\u015eimdi <code>doctl<\/code>&#8216;\u0131 DigitalOcean hesab\u0131n\u0131zla kimlik do\u011frulaman\u0131z gerekiyor. Bu, <code>doctl<\/code>&#8216;\u0131n hesab\u0131n\u0131zdaki kaynaklar\u0131 y\u00f6netmesine izin verir:<\/p>\n<pre><code class=\"language-bash\">doctl auth init<\/code><\/pre>\n<p>Bu komut sizi bir web taray\u0131c\u0131s\u0131na y\u00f6nlendirecek ve DigitalOcean hesab\u0131n\u0131zda oturum a\u00e7man\u0131z\u0131 isteyecektir. Ba\u015far\u0131l\u0131 bir oturum a\u00e7ma i\u015fleminden sonra, <code>doctl<\/code> otomatik olarak bir eri\u015fim belirteci (access token) alacak ve yap\u0131land\u0131racakt\u0131r.<\/p>\n<h3>Temel DigitalOcean Functions Kavramlar\u0131<\/h3>\n<p>DigitalOcean Functions ile \u00e7al\u0131\u015f\u0131rken kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z baz\u0131 temel kavramlar\u0131 anlamak, platformu etkili bir \u015fekilde kullanman\u0131z i\u00e7in \u00f6nemlidir.<\/p>\n<h4>Namespace (\u0130sim Alan\u0131)<\/h4>\n<p>Bir namespace, DigitalOcean Functions&#8217;ta fonksiyonlar\u0131n\u0131z\u0131 ve ili\u015fkili yap\u0131land\u0131rmalar\u0131n\u0131 mant\u0131ksal olarak grupland\u0131rmak i\u00e7in kullan\u0131lan bir konteynerdir. Her fonksiyon bir namespace i\u00e7inde bulunur. Genellikle bir projeyi veya bir uygulaman\u0131n belirli bir b\u00f6l\u00fcm\u00fcn\u00fc temsil eder. Bir namespace i\u00e7inde birden fazla fonksiyon ve tetikleyici (trigger) bulunabilir.<\/p>\n<h4>Proje<\/h4>\n<p>DigitalOcean&#8217;daki projeler, farkl\u0131 hizmetleri (Droplet&#8217;ler, Veritabanlar\u0131, Spaces vb.) tek bir mant\u0131ksal birimde d\u00fczenlemenizi sa\u011flar. Functions ba\u011flam\u0131nda, bir proje genellikle bir veya daha fazla namespace i\u00e7erebilir. Projeler, kaynaklar\u0131n\u0131z\u0131 organize etmenize ve maliyetleri takip etmenize yard\u0131mc\u0131 olur. <code>doctl<\/code> CLI ile \u00e7al\u0131\u015f\u0131rken, fonksiyonlar\u0131n\u0131z\u0131 da\u011f\u0131tmadan \u00f6nce bir proje se\u00e7meniz veya olu\u015fturman\u0131z gerekecektir.<\/p>\n<h4>Fonksiyonlar ve \u00c7al\u0131\u015fma Zamanlar\u0131 (Runtimes)<\/h4>\n<p>Bir fonksiyon, uygulaman\u0131z\u0131n belirli bir g\u00f6revini yerine getiren ba\u011f\u0131ms\u0131z bir kod par\u00e7as\u0131d\u0131r. Her fonksiyonun bir &#8220;i\u015fleyici&#8221; (handler) ad\u0131 verilen bir giri\u015f noktas\u0131 vard\u0131r; bu, tetiklendi\u011finde \u00e7al\u0131\u015ft\u0131r\u0131lacak olan kod blo\u011fudur.<\/p>\n<p>DigitalOcean Functions, \u00e7e\u015fitli \u00e7al\u0131\u015fma zamanlar\u0131n\u0131 destekler. Bu \u00e7al\u0131\u015fma zamanlar\u0131, fonksiyon kodunuzu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in gereken ortam\u0131 sa\u011flar. \u00d6rne\u011fin, Node.js fonksiyonlar\u0131 i\u00e7in bir Node.js runtime&#8217;\u0131, Python fonksiyonlar\u0131 i\u00e7in bir Python runtime&#8217;\u0131 kullan\u0131l\u0131r. Desteklenen diller ve s\u00fcr\u00fcmleri s\u00fcrekli g\u00fcncellenmektedir.<\/p>\n<h4>Tetikleyiciler (Triggers)<\/h4>\n<p>Tetikleyiciler, bir fonksiyonun ne zaman \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirleyen olaylard\u0131r. DigitalOcean Functions, \u00e7e\u015fitli tetikleyici t\u00fcrlerini destekler:<\/p>\n<p>*   <strong>HTTP Tetikleyici:<\/strong> En yayg\u0131n tetikleyici t\u00fcr\u00fcd\u00fcr. Bir HTTP iste\u011fi (GET, POST vb.) belirli bir URL&#8217;ye yap\u0131ld\u0131\u011f\u0131nda fonksiyonunuzu \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, API u\u00e7 noktalar\u0131 veya webhook&#8217;lar olu\u015fturmak i\u00e7in idealdir.<br \/>\n*   <strong>Webhook Tetikleyici:<\/strong> Genellikle \u00fc\u00e7\u00fcnc\u00fc taraf hizmetlerden (\u00f6rne\u011fin, GitHub, Slack) gelen bildirimleri i\u015flemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n*   <strong>Cron Tetikleyici:<\/strong> Belirli zaman aral\u0131klar\u0131nda veya planlanm\u0131\u015f zamanlarda fonksiyonlar\u0131n\u0131z\u0131 \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r (\u00f6rne\u011fin, her gece yedekleme yapmak).<br \/>\n*   <strong>Veritaban\u0131 Tetikleyici:<\/strong> DigitalOcean Managed Databases&#8217;deki olaylara (\u00f6rne\u011fin, bir tabloya yeni bir kay\u0131t eklendi\u011finde) yan\u0131t olarak fonksiyonlar\u0131 tetikler (\u015fu anda s\u0131n\u0131rl\u0131 veya beta a\u015famas\u0131nda olabilir, dok\u00fcmantasyonu kontrol edin).<\/p>\n<h4>Ortam De\u011fi\u015fkenleri<\/h4>\n<p>Ortam de\u011fi\u015fkenleri, hassas bilgileri (API anahtarlar\u0131, veritaban\u0131 ba\u011flant\u0131 dizeleri vb.) veya yap\u0131land\u0131rma ayarlar\u0131n\u0131 kodunuzdan ay\u0131rmak i\u00e7in kullan\u0131l\u0131r. Bu, fonksiyonlar\u0131n\u0131z\u0131n daha ta\u015f\u0131nabilir ve g\u00fcvenli olmas\u0131n\u0131 sa\u011flar. DigitalOcean Functions, fonksiyonlar\u0131n\u0131za ortam de\u011fi\u015fkenleri tan\u0131mlaman\u0131za olanak tan\u0131r.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar<\/h4>\n<p>Fonksiyonlar\u0131n\u0131z\u0131n harici k\u00fct\u00fcphanelere veya mod\u00fcllere ihtiyac\u0131 olabilir. DigitalOcean Functions, \u00e7al\u0131\u015fma zaman\u0131na ba\u011fl\u0131 olarak bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00f6netmenizi sa\u011flar. \u00d6rne\u011fin, Node.js fonksiyonlar\u0131 i\u00e7in <code>package.json<\/code> dosyas\u0131 ve <code>npm install<\/code>, Python fonksiyonlar\u0131 i\u00e7in <code>requirements.txt<\/code> dosyas\u0131 ve <code>pip install<\/code> kullan\u0131l\u0131r. Da\u011f\u0131t\u0131m s\u0131ras\u0131nda bu ba\u011f\u0131ml\u0131l\u0131klar otomatik olarak kurulur.<\/p>\n<h3>\u0130lk DigitalOcean Fonksiyonunuzu Olu\u015fturma ve Da\u011f\u0131tma<\/h3>\n<p>\u015eimdi DigitalOcean Functions ile ilk &#8220;Hello World&#8221; fonksiyonumuzu olu\u015fturma ve da\u011f\u0131tma ad\u0131mlar\u0131na ge\u00e7elim. Node.js&#8217;i \u00f6rnek olarak kullanaca\u011f\u0131z.<\/p>\n<h4>Ad\u0131m 1: Proje Olu\u015fturma veya Se\u00e7me<\/h4>\n<p>\u00d6ncelikle, fonksiyonlar\u0131m\u0131z\u0131 i\u00e7eren bir DigitalOcean projesi olu\u015ftural\u0131m veya mevcut bir projeyi se\u00e7elim.<\/p>\n<pre><code class=\"language-bash\">doctl projects list<\/code><\/pre>\n<p>Bu komut mevcut projelerinizi listeler. E\u011fer yeni bir proje olu\u015fturmak isterseniz:<\/p>\n<pre><code class=\"language-bash\">doctl projects create --name \"MyServerlessProject\" --description \"DigitalOcean Functions ile ilk projem\"<\/code><\/pre>\n<p>\u015eimdi bu projeyi varsay\u0131lan proje olarak ayarlayal\u0131m, b\u00f6ylece t\u00fcm <code>doctl<\/code> komutlar\u0131 bu proje ba\u011flam\u0131nda \u00e7al\u0131\u015f\u0131r:<\/p>\n<pre><code class=\"language-bash\">doctl projects set-active MyServerlessProject<\/code><\/pre>\n<h4>Ad\u0131m 2: Fonksiyon Uygulamas\u0131 Ba\u015flatma<\/h4>\n<p>\u015eimdi fonksiyon kodumuzu tutacak yerel bir dizin olu\u015ftural\u0131m ve bu dizini bir DigitalOcean Functions uygulamas\u0131 olarak ba\u015flatal\u0131m.<\/p>\n<pre><code class=\"language-bash\">mkdir my-first-function\ncd my-first-function\ndoctl serverless init --language=nodejs<\/code><\/pre>\n<p><code>doctl serverless init<\/code> komutu, se\u00e7ti\u011finiz dil i\u00e7in gerekli yap\u0131land\u0131rma dosyalar\u0131n\u0131 (\u00f6rne\u011fin, <code>.func<\/code> dizini ve <code>project.yml<\/code> dosyas\u0131) olu\u015fturacakt\u0131r. <code>--language<\/code> parametresi ile kullanmak istedi\u011finiz dili belirtirsiniz (nodejs, python, go, php vb.).<\/p>\n<p>Bu komutun \u00e7\u0131kt\u0131s\u0131 size bir <code>project.yml<\/code> dosyas\u0131 olu\u015fturuldu\u011funu ve bir \u00f6rnek fonksiyon olu\u015fturmak i\u00e7in <code>doctl serverless functions create<\/code> komutunu kullanabilece\u011finizi s\u00f6yleyecektir.<\/p>\n<h4>Ad\u0131m 3: Basit Bir Fonksiyon Yazma<\/h4>\n<p>\u015eimdi <code>my-first-function<\/code> dizini i\u00e7inde, <code>hello-world<\/code> ad\u0131nda basit bir Node.js fonksiyonu olu\u015ftural\u0131m.<\/p>\n<pre><code class=\"language-bash\">doctl serverless functions create hello-world --language=nodejs --template=blank<\/code><\/pre>\n<p>Bu komut <code>packages\/default\/hello-world\/<\/code> dizini alt\u0131nda <code>hello-world.js<\/code> ad\u0131nda bir dosya olu\u015fturacakt\u0131r. Bu dosyay\u0131 a\u00e7\u0131p a\u015fa\u011f\u0131daki gibi d\u00fczenleyelim:<\/p>\n<pre><code class=\"language-javascript\">\/\/ packages\/default\/hello-world\/hello-world.js\n\n\/<em><\/em>\n * Bu, DigitalOcean Functions \u00fczerinde \u00e7al\u0131\u015fan basit bir \"Hello World\" fonksiyonudur.\n *\n * @param {object} params - Fonksiyona iletilen parametreler.\n * @param {string} [params.name=\"D\u00fcnya\"] - Kar\u015f\u0131lama mesaj\u0131nda kullan\u0131lacak isim.\n * @returns {object} Bir JSON nesnesi i\u00e7eren HTTP yan\u0131t\u0131.\n *\/\nexports.main = async (params) => {\n  \/\/ Varsay\u0131lan bir isim belirleyelim veya parametrelerden gelen 'name'i kullanal\u0131m.\n  const name = params.name || 'D\u00fcnya';\n\n  \/\/ Konsola bir log mesaj\u0131 yazd\u0131ral\u0131m. Bu loglar DigitalOcean kontrol panelinde g\u00f6r\u00fcnt\u00fclenebilir.\n  console.log(<code>Fonksiyon \u00e7al\u0131\u015ft\u0131r\u0131ld\u0131. \u0130sim: ${name}<\/code>);\n\n  \/\/ HTTP yan\u0131t\u0131n\u0131 d\u00f6nd\u00fcrelim.\n  return {\n    statusCode: 200, \/\/ HTTP 200 OK durumu\n    headers: { 'Content-Type': 'application\/json' },\n    body: {\n      message: <code>Merhaba, ${name}!<\/code>\n    }\n  };\n};<\/code><\/pre>\n<p><strong>Kod A\u00e7\u0131klamas\u0131:<\/strong><br \/>\n*   <code>exports.main<\/code>: Bu, DigitalOcean Functions&#8217;\u0131n fonksiyonunuzu \u00e7a\u011f\u0131rmak i\u00e7in kulland\u0131\u011f\u0131 ana giri\u015f noktas\u0131d\u0131r (handler).<br \/>\n*   <code>params<\/code>: Fonksiyona iletilen t\u00fcm verileri i\u00e7eren bir JavaScript nesnesidir. HTTP iste\u011fiyle gelen sorgu parametreleri, g\u00f6vde verileri veya di\u011fer tetikleyicilerden gelen veriler burada bulunur.<br \/>\n*   <code>params.name || 'D\u00fcnya'<\/code>: E\u011fer <code>name<\/code> parametresi sa\u011flanmazsa varsay\u0131lan olarak &#8220;D\u00fcnya&#8221; kullan\u0131l\u0131r.<br \/>\n*   <code>console.log<\/code>: Fonksiyonunuzun \u00e7\u0131kt\u0131s\u0131n\u0131 DigitalOcean Functions loglar\u0131na yazmak i\u00e7in kullan\u0131l\u0131r. Hata ay\u0131klama i\u00e7in \u00e7ok \u00f6nemlidir.<br \/>\n*   <code>return { statusCode: 200, ... }<\/code>: Bu, HTTP tetikleyicisi i\u00e7in standart bir yan\u0131t format\u0131d\u0131r. <code>statusCode<\/code>, <code>headers<\/code> ve <code>body<\/code> alanlar\u0131n\u0131 i\u00e7ermelidir.<\/p>\n<h4>Ad\u0131m 4: Fonksiyonu Da\u011f\u0131tma (Deploy Etme)<\/h4>\n<p>Fonksiyonumuzu yazd\u0131ktan sonra, onu DigitalOcean Functions&#8217;a da\u011f\u0131tma zaman\u0131 geldi. <code>my-first-function<\/code> dizinindeyken a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">doctl serverless deploy<\/code><\/pre>\n<p>Bu komut, yerel dizininizdeki t\u00fcm fonksiyonlar\u0131 DigitalOcean Functions&#8217;a y\u00fckleyecektir. \u0130\u015flem birka\u00e7 saniye s\u00fcrebilir. Ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131mdan sonra, konsolda da\u011f\u0131t\u0131lan fonksiyonlar\u0131n listesini ve her bir fonksiyon i\u00e7in bir genel HTTP u\u00e7 noktas\u0131 (URL) g\u00f6receksiniz.<\/p>\n<p>\u00c7\u0131kt\u0131da \u015funa benzer bir \u015fey g\u00f6rmelisiniz:<\/p>\n<pre><code class=\"language-\">...\nFunctions deployed successfully.\n\nEndpoint: https:\/\/faas-nyc1-xxxxxxxx.doserverless.co\/api\/v1\/web\/default\/hello-world<\/code><\/pre>\n<p>Bu <code>Endpoint<\/code> URL&#8217;si, fonksiyonunuzu internet \u00fczerinden \u00e7a\u011f\u0131rabilece\u011finiz adrestir.<\/p>\n<h4>Ad\u0131m 5: Fonksiyonu \u00c7a\u011f\u0131rma ve Test Etme<\/h4>\n<p>Fonksiyonunuzu da\u011f\u0131tt\u0131ktan sonra, onu test etmenin iki yolu vard\u0131r: <code>doctl<\/code> CLI \u00fczerinden veya do\u011frudan HTTP u\u00e7 noktas\u0131n\u0131 kullanarak.<\/p>\n<p><strong>a) doctl CLI \u00dczerinden \u00c7a\u011f\u0131rma:<\/strong><\/p>\n<pre><code class=\"language-bash\">doctl serverless functions invoke hello-world --param name:\"DigitalOcean Kullan\u0131c\u0131s\u0131\"<\/code><\/pre>\n<p>Bu komut, <code>hello-world<\/code> fonksiyonunu <code>name<\/code> parametresiyle \u00e7a\u011f\u0131r\u0131r. \u00c7\u0131kt\u0131 olarak fonksiyonun d\u00f6nd\u00fcrd\u00fc\u011f\u00fc JSON yan\u0131t\u0131n\u0131 g\u00f6receksiniz:<\/p>\n<pre><code class=\"language-json\">{\n  \"message\": \"Merhaba, DigitalOcean Kullan\u0131c\u0131s\u0131!\"\n}<\/code><\/pre>\n<p>E\u011fer <code>name<\/code> parametresi vermezseniz, varsay\u0131lan &#8220;D\u00fcnya&#8221; ismi kullan\u0131lacakt\u0131r:<\/p>\n<pre><code class=\"language-bash\">doctl serverless functions invoke hello-world<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code class=\"language-json\">{\n  \"message\": \"Merhaba, D\u00fcnya!\"\n}<\/code><\/pre>\n<p><strong>b) HTTP U\u00e7 Noktas\u0131 \u00dczerinden \u00c7a\u011f\u0131rma:<\/strong><br \/>\nDa\u011f\u0131t\u0131m \u00e7\u0131kt\u0131s\u0131nda g\u00f6rd\u00fc\u011f\u00fcn\u00fcz <code>Endpoint<\/code> URL&#8217;sini kopyalay\u0131n. Bu URL&#8217;yi bir web taray\u0131c\u0131s\u0131nda a\u00e7abilir veya <code>curl<\/code> gibi bir ara\u00e7la \u00e7a\u011f\u0131rabilirsiniz.<\/p>\n<p>Varsay\u0131lan \u00e7a\u011fr\u0131:<\/p>\n<pre><code class=\"language-bash\">curl https:\/\/faas-nyc1-xxxxxxxx.doserverless.co\/api\/v1\/web\/default\/hello-world<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code class=\"language-json\">{\"message\":\"Merhaba, D\u00fcnya!\"}<\/code><\/pre>\n<p>Parametre ile \u00e7a\u011fr\u0131 (URL sorgu parametresi olarak):<\/p>\n<pre><code class=\"language-bash\">curl \"https:\/\/faas-nyc1-xxxxxxxx.doserverless.co\/api\/v1\/web\/default\/hello-world?name=DigitalOcean\"<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131:<\/p>\n<pre><code class=\"language-json\">{\"message\":\"Merhaba, DigitalOcean!\"}<\/code><\/pre>\n<p>Tebrikler! \u0130lk DigitalOcean fonksiyonunuzu ba\u015far\u0131yla olu\u015fturdunuz, da\u011f\u0131tt\u0131n\u0131z ve test ettiniz.<\/p>\n<h3>Geli\u015fmi\u015f Konular ve Entegrasyonlar<\/h3>\n<p>DigitalOcean Functions, temel i\u015flevselli\u011fin \u00f6tesinde, daha karma\u015f\u0131k uygulamalar olu\u015fturman\u0131z\u0131 sa\u011flayacak \u00e7e\u015fitli geli\u015fmi\u015f \u00f6zellikler ve entegrasyonlar sunar.<\/p>\n<h4>Ortam De\u011fi\u015fkenlerinin Y\u00f6netimi<\/h4>\n<p>Fonksiyonlar\u0131n\u0131z\u0131n hassas bilgileri veya yap\u0131land\u0131rma de\u011ferlerini do\u011frudan kod i\u00e7inde tutmak yerine ortam de\u011fi\u015fkenleri olarak tan\u0131mlamak en iyi uygulamad\u0131r.<br \/>\nBir fonksiyon i\u00e7in ortam de\u011fi\u015fkeni ayarlamak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">doctl serverless functions env set hello-world MY_API_KEY=\"your_secret_api_key\"<\/code><\/pre>\n<p>Fonksiyonunuzun i\u00e7inde bu de\u011fi\u015fkene <code>process.env.MY_API_KEY<\/code> (Node.js i\u00e7in) veya <code>os.environ.get('MY_API_KEY')<\/code> (Python i\u00e7in) gibi yollarla eri\u015febilirsiniz.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131k Y\u00f6netimi<\/h4>\n<p>Fonksiyonlar\u0131n\u0131z\u0131n harici k\u00fct\u00fcphanelere ihtiyac\u0131 oldu\u011funda, bunlar\u0131 <code>package.json<\/code> (Node.js) veya <code>requirements.txt<\/code> (Python) gibi standart ba\u011f\u0131ml\u0131l\u0131k dosyalar\u0131n\u0131za eklemeniz yeterlidir.<\/p>\n<p><strong>Node.js \u00f6rne\u011fi:<\/strong><br \/>\n<code>packages\/default\/my-function\/package.json<\/code> dosyan\u0131za bir ba\u011f\u0131ml\u0131l\u0131k ekleyin:<\/p>\n<pre><code class=\"language-json\">{\n  \"name\": \"my-function\",\n  \"version\": \"1.0.0\",\n  \"description\": \"\",\n  \"main\": \"my-function.js\",\n  \"dependencies\": {\n    \"axios\": \"^0.21.1\" \/\/ \u00d6rnek bir ba\u011f\u0131ml\u0131l\u0131k\n  }\n}<\/code><\/pre>\n<p>Ard\u0131ndan, <code>my-function<\/code> dizininde <code>npm install<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n. <code>doctl serverless deploy<\/code> komutu, da\u011f\u0131t\u0131m s\u0131ras\u0131nda bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 otomatik olarak alg\u0131layacak ve kuracakt\u0131r.<\/p>\n<h4>Yerel Geli\u015ftirme ve Test<\/h4>\n<p>DigitalOcean Functions, fonksiyonlar\u0131n\u0131z\u0131 buluta da\u011f\u0131tmadan \u00f6nce yerel makinenizde test etmenizi sa\u011flayan bir <code>run<\/code> komutu sunar:<\/p>\n<pre><code class=\"language-bash\">doctl serverless run hello-world --param name:\"Yerel Test\"<\/code><\/pre>\n<p>Bu komut, fonksiyonunuzu yerel olarak, bulut ortam\u0131na benzer bir \u015fekilde \u00e7al\u0131\u015ft\u0131r\u0131r ve \u00e7\u0131kt\u0131lar\u0131 konsola yazd\u0131r\u0131r. Bu, hata ay\u0131klama ve geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r.<\/p>\n<h4>Di\u011fer DigitalOcean Hizmetleriyle Entegrasyon<\/h4>\n<p>DigitalOcean Functions, di\u011fer DigitalOcean \u00fcr\u00fcnleriyle sorunsuz entegrasyon i\u00e7in tasarlanm\u0131\u015ft\u0131r:<\/p>\n<p>*   <strong>Managed Databases:<\/strong> Fonksiyonlar\u0131n\u0131zdan DigitalOcean Managed PostgreSQL, MySQL veya Redis veritabanlar\u0131na ba\u011flanabilir ve veri okuma\/yazma i\u015flemleri yapabilirsiniz. Ba\u011flant\u0131 dizelerini ortam de\u011fi\u015fkenleri olarak saklamak en g\u00fcvenli yakla\u015f\u0131md\u0131r.<br \/>\n*   <strong>Spaces (Obje Depolama):<\/strong> Fonksiyonlar\u0131n\u0131z\u0131 Spaces&#8217;a dosya y\u00fcklemek, indirmek veya i\u015flemek i\u00e7in kullanabilirsiniz. \u00d6rne\u011fin, bir resim y\u00fcklendi\u011finde otomatik olarak k\u00fc\u00e7\u00fck resim olu\u015fturmak.<br \/>\n*   <strong>Droplet&#8217;ler:<\/strong> Fonksiyonlar\u0131n\u0131zdan Droplet&#8217;lerinizde \u00e7al\u0131\u015fan API&#8217;leri \u00e7a\u011f\u0131rabilir veya Droplet&#8217;lerinizdeki olaylara yan\u0131t verebilirsiniz.<\/p>\n<h4>Hata Y\u00f6netimi ve Loglama<\/h4>\n<p>Fonksiyonlar\u0131n\u0131z\u0131n d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak ve sorunlar\u0131 gidermek i\u00e7in hata y\u00f6netimi ve loglama hayati \u00f6neme sahiptir.<\/p>\n<p>*   <strong>Loglama:<\/strong> <code>console.log()<\/code>, <code>console.warn()<\/code>, <code>console.error()<\/code> gibi standart konsol \u00e7\u0131kt\u0131lar\u0131, DigitalOcean Functions loglar\u0131na y\u00f6nlendirilir. Bu loglar\u0131 <code>doctl<\/code> CLI \u00fczerinden veya DigitalOcean kontrol panelinden g\u00f6r\u00fcnt\u00fcleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">doctl serverless logs hello-world --tail<\/code><\/pre>\n<p>    <code>--tail<\/code> parametresi, yeni loglar\u0131 ger\u00e7ek zamanl\u0131 olarak takip etmenizi sa\u011flar.<br \/>\n*   <strong>Hata Y\u00f6netimi:<\/strong> Fonksiyonlar\u0131n\u0131zda olu\u015fabilecek hatalar\u0131 try-catch bloklar\u0131 ile yakalamak ve anlaml\u0131 hata mesajlar\u0131 d\u00f6nd\u00fcrmek \u00f6nemlidir. Hata durumlar\u0131nda <code>statusCode: 500<\/code> veya uygun bir HTTP hata kodu d\u00f6nd\u00fcrmek, istemcilere hatan\u0131n nedenini bildirir.<\/p>\n<h4>CI\/CD Entegrasyonu<\/h4>\n<p>DigitalOcean Functions, Git tabanl\u0131 CI\/CD i\u015f ak\u0131\u015flar\u0131na kolayca entegre edilebilir. GitHub Actions, GitLab CI\/CD veya Jenkins gibi ara\u00e7larla, kodunuz bir depoya her g\u00f6nderildi\u011finde (push) veya bir birle\u015ftirme iste\u011fi (pull request) kabul edildi\u011finde fonksiyonlar\u0131n\u0131z\u0131n otomatik olarak test edilmesini ve da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flayabilirsiniz. <code>doctl serverless deploy<\/code> komutu, bu otomasyonun anahtar\u0131d\u0131r.<\/p>\n<h3>DigitalOcean Functions Kullan\u0131m Senaryolar\u0131<\/h3>\n<p>DigitalOcean Functions&#8217;\u0131n sundu\u011fu esneklik ve \u00f6l\u00e7eklenebilirlik sayesinde bir\u00e7ok farkl\u0131 kullan\u0131m senaryosu i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr:<\/p>\n<p>*   <strong>API U\u00e7 Noktalar\u0131 ve Mikroservisler:<\/strong> H\u0131zl\u0131 ve maliyet etkin API&#8217;ler olu\u015fturmak i\u00e7in m\u00fckemmeldir. Her bir API u\u00e7 noktas\u0131, ba\u011f\u0131ms\u0131z bir fonksiyon olarak tasarlanabilir.<br \/>\n*   <strong>Webhook \u0130\u015fleme:<\/strong> \u00dc\u00e7\u00fcnc\u00fc taraf hizmetlerden (GitHub, Stripe, Slack vb.) gelen webhook&#8217;lar\u0131 dinlemek ve belirli eylemleri tetiklemek i\u00e7in kullan\u0131labilir.<br \/>\n*   <strong>Arka Plan G\u00f6revleri ve Zamanlanm\u0131\u015f \u0130\u015fler:<\/strong> Uzun s\u00fcren veya belirli aral\u0131klarla \u00e7al\u0131\u015fmas\u0131 gereken g\u00f6revleri (veri temizleme, rapor olu\u015fturma, e-posta g\u00f6nderme) cron tetikleyicileri ile otomatikle\u015ftirebilirsiniz.<br \/>\n*   <strong>Veri \u0130\u015fleme ve D\u00f6n\u00fc\u015ft\u00fcrme:<\/strong> Bir dosya DigitalOcean Spaces&#8217;a y\u00fcklendi\u011finde tetiklenen bir fonksiyon, bu dosyay\u0131 i\u015fleyebilir, d\u00f6n\u00fc\u015ft\u00fcrebilir veya ba\u015fka bir hizmete g\u00f6nderebilir.<br \/>\n*   <strong>IoT Uygulamalar\u0131:<\/strong> IoT cihazlar\u0131ndan gelen verileri i\u015flemek, analiz etmek ve depolamak i\u00e7in hafif ve h\u0131zl\u0131 yan\u0131t veren fonksiyonlar olu\u015fturulabilir.<br \/>\n*   <strong>Form \u0130\u015fleme:<\/strong> Web sitenizdeki form g\u00f6nderimlerini almak, do\u011frulamak ve veritaban\u0131na kaydetmek i\u00e7in kullan\u0131labilir.<\/p>\n<h3>En \u0130yi Uygulamalar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p>DigitalOcean Functions ile \u00e7al\u0131\u015f\u0131rken performans\u0131, g\u00fcvenli\u011fi ve maliyet etkinli\u011fini art\u0131rmak i\u00e7in baz\u0131 en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir:<\/p>\n<p>*   <strong>K\u00fc\u00e7\u00fck ve Tek Odakl\u0131 Fonksiyonlar:<\/strong> Her fonksiyonun tek bir i\u015fi yapmas\u0131na \u00f6zen g\u00f6sterin (Single Responsibility Principle). Bu, fonksiyonlar\u0131 daha kolay test edilebilir, y\u00f6netilebilir ve \u00f6l\u00e7eklenebilir hale getirir.<br \/>\n*   <strong>Durumsuz (Stateless) Tasar\u0131m:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131 her \u00e7a\u011fr\u0131da tamamen ba\u011f\u0131ms\u0131z \u00e7al\u0131\u015facak \u015fekilde tasarlay\u0131n. Bir fonksiyonun bir \u00f6nceki \u00e7a\u011fr\u0131s\u0131n\u0131n durumunu veya yerel dosya sistemini varsaymay\u0131n. Kal\u0131c\u0131 veri depolamas\u0131 i\u00e7in harici veritabanlar\u0131 veya depolama hizmetleri kullan\u0131n (\u00f6rn. DigitalOcean Managed Databases, Spaces).<br \/>\n*   <strong>Hata Y\u00f6netimi ve Yeniden Deneme Mekanizmalar\u0131:<\/strong> Beklenmedik durumlar\u0131 ele almak i\u00e7in sa\u011flam hata yakalama mekanizmalar\u0131 uygulay\u0131n. Gerekirse, ge\u00e7ici hatalar i\u00e7in yeniden deneme mant\u0131\u011f\u0131 ekleyin.<br \/>\n*   <strong>Ortam De\u011fi\u015fkenlerini Ak\u0131ll\u0131ca Kullan\u0131n:<\/strong> Hassas bilgileri (API anahtarlar\u0131, veritaban\u0131 \u015fifreleri) veya ortama \u00f6zg\u00fc yap\u0131land\u0131rmalar\u0131 ortam de\u011fi\u015fkenleri olarak saklay\u0131n, asla kodunuza hardcode etmeyin.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131klar\u0131 Y\u00f6netin:<\/strong> Yaln\u0131zca ger\u00e7ekten ihtiyac\u0131n\u0131z olan ba\u011f\u0131ml\u0131l\u0131klar\u0131 ekleyin. Gereksiz ba\u011f\u0131ml\u0131l\u0131klar da\u011f\u0131t\u0131m boyutunu art\u0131r\u0131r ve so\u011fuk ba\u015flang\u0131\u00e7 (cold start) s\u00fcrelerini uzatabilir.<br \/>\n*   <strong>Maliyet Optimizasyonu:<\/strong> Fonksiyonlar\u0131n\u0131z i\u00e7in do\u011fru bellek boyutunu se\u00e7in. Gere\u011finden fazla bellek ay\u0131rmak maliyetleri art\u0131rabilir. Fonksiyonlar\u0131n\u0131z\u0131n \u00e7al\u0131\u015fma s\u00fcrelerini optimize edin.<br \/>\n*   <strong>\u0130zleme ve Loglama:<\/strong> Fonksiyonlar\u0131n\u0131z\u0131n performans\u0131n\u0131 ve hatalar\u0131n\u0131 izlemek i\u00e7in loglar\u0131 aktif olarak kullan\u0131n. DigitalOcean kontrol panelindeki metrikleri ve loglar\u0131 d\u00fczenli olarak kontrol edin.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong> API anahtarlar\u0131n\u0131, veritaban\u0131 kimlik bilgilerini ve di\u011fer hassas verileri do\u011frudan kodunuzda saklamay\u0131n. Ortam de\u011fi\u015fkenleri veya DigitalOcean&#8217;\u0131n s\u0131r y\u00f6netimi ara\u00e7lar\u0131n\u0131 kullan\u0131n. Fonksiyonlar\u0131n\u0131za yaln\u0131zca ihtiya\u00e7 duyduklar\u0131 izinleri verin.<\/p>\n<h3>DigitalOcean Functions Fiyatland\u0131rmas\u0131<\/h3>\n<p>DigitalOcean Functions, sunucusuz mimarinin do\u011fas\u0131na uygun olarak &#8220;kulland\u0131\u011f\u0131n kadar \u00f6de&#8221; (pay-as-you-go) modeliyle fiyatland\u0131r\u0131l\u0131r. Bu, yaln\u0131zca fonksiyonlar\u0131n\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131 s\u00fcre, t\u00fcketilen bellek ve yap\u0131lan \u00e7a\u011fr\u0131 say\u0131s\u0131 i\u00e7in \u00f6deme yapt\u0131\u011f\u0131n\u0131z anlam\u0131na gelir.<\/p>\n<p>Genel olarak fiyatland\u0131rma \u015fu bile\u015fenlere dayan\u0131r:<\/p>\n<p>*   <strong>CPU S\u00fcresi (Compute Time):<\/strong> Fonksiyonunuzun \u00e7al\u0131\u015ft\u0131\u011f\u0131 toplam s\u00fcre (milisaniye cinsinden).<br \/>\n*   <strong>Bellek Kullan\u0131m\u0131 (Memory Usage):<\/strong> Fonksiyonunuza ayr\u0131lan bellek miktar\u0131 (MB cinsinden).<br \/>\n*   <strong>\u00c7a\u011fr\u0131 Say\u0131s\u0131 (Invocations):<\/strong> Fonksiyonunuzun ka\u00e7 kez \u00e7a\u011fr\u0131ld\u0131\u011f\u0131.<\/p>\n<p>DigitalOcean genellikle her ay belirli bir miktarda \u00fccretsiz kullan\u0131m katman\u0131 sunar (\u00f6rne\u011fin, belirli say\u0131da \u00fccretsiz \u00e7a\u011fr\u0131 ve belirli miktarda CPU s\u00fcresi\/bellek). Bu, k\u00fc\u00e7\u00fck projeler veya denemeler i\u00e7in olduk\u00e7a avantajl\u0131d\u0131r. B\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalar i\u00e7in ise, kullan\u0131m artt\u0131k\u00e7a maliyetler do\u011frusal olarak artar. G\u00fcncel ve detayl\u0131 fiyatland\u0131rma bilgileri i\u00e7in DigitalOcean Functions&#8217;\u0131n resmi fiyatland\u0131rma sayfas\u0131n\u0131 kontrol etmek en do\u011frusudur.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>DigitalOcean Functions, geli\u015ftiricilere sunucusuz mimarinin t\u00fcm avantajlar\u0131n\u0131 DigitalOcean&#8217;\u0131n tan\u0131d\u0131k ve kullan\u0131c\u0131 dostu ortam\u0131nda sunan g\u00fc\u00e7l\u00fc bir hizmettir. Bu rehberde, DigitalOcean Functions&#8217;\u0131n temel kavramlar\u0131ndan ba\u015flayarak, <code>doctl<\/code> CLI ile ilk fonksiyonunuzu nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131, da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ve test edece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frendik. Ayr\u0131ca, ortam de\u011fi\u015fkenleri, ba\u011f\u0131ml\u0131l\u0131k y\u00f6netimi, yerel geli\u015ftirme ve di\u011fer DigitalOcean hizmetleriyle entegrasyon gibi geli\u015fmi\u015f konulara da de\u011findik.<\/p>\n<p>Sunucusuz mimarinin getirdi\u011fi otomatik \u00f6l\u00e7eklenebilirlik, maliyet etkinli\u011fi ve h\u0131zl\u0131 geli\u015ftirme d\u00f6ng\u00fcleri, DigitalOcean Functions&#8217;\u0131 modern web uygulamalar\u0131, API&#8217;ler, arka plan g\u00f6revleri ve olay tabanl\u0131 sistemler i\u00e7in cazip bir se\u00e7enek haline getirmektedir. Art\u0131k bu sa\u011flam ba\u015flang\u0131\u00e7 bilgileriyle, kendi yarat\u0131c\u0131 projelerinizi DigitalOcean Functions \u00fczerinde hayata ge\u00e7irmeye haz\u0131rs\u0131n\u0131z. Unutmay\u0131n, pratik yapmak ve farkl\u0131 senaryolar\u0131 denemek, bu platformda ustala\u015fman\u0131n en iyi yoludur. DigitalOcean&#8217;\u0131n kapsaml\u0131 dok\u00fcmantasyonunu ve topluluk kaynaklar\u0131n\u0131 ke\u015ffetmekten \u00e7ekinmeyin!<\/p>\n<p>DigitalOcean Functions ile geli\u015ftirmeye ba\u015flarken bol \u015fans dileriz!<br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi\nGiri\u015f: Sunucusuz Mimarinin Y\u00fckseli\u015fi ve DigitalOce","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-36376","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi\" \/>\n<meta property=\"og:description\" content=\"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi Giri\u015f: Sunucusuz Mimarinin Y\u00fckseli\u015fi ve DigitalOce\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-12-14T17:40:51+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi\",\"datePublished\":\"2025-12-14T17:40:51+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\"},\"wordCount\":3523,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\",\"name\":\"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-12-14T17:40:51+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","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:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi","og_description":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi Giri\u015f: Sunucusuz Mimarinin Y\u00fckseli\u015fi ve DigitalOce","og_url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-12-14T17:40:51+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi","datePublished":"2025-12-14T17:40:51+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/"},"wordCount":3523,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/","name":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-12-14T17:40:51+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-functions-ile-sunucusuz-gelisime-adim-atmak-kapsamli-bir-baslangic-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DigitalOcean Functions ile Sunucusuz Geli\u015fime Ad\u0131m Atmak: Kapsaml\u0131 Bir Ba\u015flang\u0131\u00e7 Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36376","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=36376"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36376\/revisions"}],"predecessor-version":[{"id":36377,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/36376\/revisions\/36377"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=36376"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=36376"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=36376"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}