{"id":39463,"date":"2026-02-22T01:00:39","date_gmt":"2026-02-21T22:00:39","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/"},"modified":"2026-02-22T01:00:39","modified_gmt":"2026-02-21T22:00:39","slug":"sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/","title":{"rendered":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?"},"content":{"rendered":"<h2>Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?<\/h2>\n<p>Dijital d\u00fcnyada g\u00f6rsellerin \u00f6nemi her ge\u00e7en g\u00fcn artarken, bu g\u00f6rselleri etkili bir \u015fekilde i\u015fleyebilen, \u00f6l\u00e7eklenebilir ve g\u00fcvenilir sistemlere olan ihtiya\u00e7 da ka\u00e7\u0131n\u0131lmaz hale geliyor. Bu makalede, modern web uygulamalar\u0131n\u0131n ve mobil servislerin temel bir ihtiyac\u0131 olan g\u00f6r\u00fcnt\u00fc i\u015fleme yeteneklerini sunan, durumsuz (stateless) bir API&#8217;nin nas\u0131l in\u015fa edildi\u011fini ve temel \u00e7al\u0131\u015fma prensiplerini detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Gelin, bu mimarinin neden tercih edildi\u011fini ve sundu\u011fu avantajlar\u0131 ke\u015ffedelim.<\/p>\n<h3>Neden Durumsuz (Stateless) Bir API?<\/h3>\n<p>G\u00f6r\u00fcnt\u00fc i\u015fleme gibi yo\u011fun kaynak gerektiren g\u00f6revler i\u00e7in bir API tasarlarken, sistemin \u00f6l\u00e7eklenebilirli\u011fi ve esnekli\u011fi kritik \u00f6neme sahiptir. Durumsuz mimari, bu gereksinimleri kar\u015f\u0131laman\u0131n en etkili yollar\u0131ndan biridir.<\/p>\n<h4>Durumlu ve Durumsuz API Farklar\u0131<\/h4>\n<p>Durumlu (stateful) bir API, her kullan\u0131c\u0131 veya oturum i\u00e7in sunucu taraf\u0131nda belirli bir durumu (\u00f6rne\u011fin, oturum bilgileri, ge\u00e7ici dosyalar) korur. Bu, sunucular\u0131n belirli bir kullan\u0131c\u0131ya \u00f6zel verileri hat\u0131rlamas\u0131n\u0131 sa\u011flar. Ancak bu yakla\u015f\u0131m, sunucular\u0131n ar\u0131zalanmas\u0131 veya \u00f6l\u00e7eklendirme gerekti\u011finde sorunlara yol a\u00e7abilir, \u00e7\u00fcnk\u00fc durumun ba\u015fka bir sunucuya aktar\u0131lmas\u0131 veya senkronize edilmesi gerekir.<\/p>\n<p>Durumsuz (stateless) bir API ise, her iste\u011fi ba\u011f\u0131ms\u0131z bir i\u015flem olarak ele al\u0131r. Sunucu, \u00f6nceki istekler veya di\u011fer kullan\u0131c\u0131lar hakk\u0131nda herhangi bir bilgi saklamaz. Her istek, i\u015flenmesi i\u00e7in gerekli t\u00fcm bilgileri (g\u00f6r\u00fcnt\u00fc verisi, i\u015fleme parametreleri vb.) i\u00e7erir. Bu, sunucular\u0131n birbirinin yerine ge\u00e7ebilir olmas\u0131n\u0131 sa\u011flar ve mimariyi \u00e7ok daha esnek hale getirir.<\/p>\n<h4>\u00d6l\u00e7eklenebilirlik ve Esneklik Avantajlar\u0131<\/h4>\n<p>Durumsuz bir API&#8217;nin en b\u00fcy\u00fck avantajlar\u0131ndan biri \u00fcst\u00fcn \u00f6l\u00e7eklenebilirli\u011fidir. Her istek ba\u011f\u0131ms\u0131z oldu\u011fu i\u00e7in, gelen y\u00fck\u00fc kar\u015f\u0131lamak \u00fczere kolayca yeni sunucu \u00f6rnekleri eklenebilir veya mevcutlar kald\u0131r\u0131labilir. Y\u00fck dengeleyiciler, istekleri mevcut herhangi bir sunucuya y\u00f6nlendirebilir ve sunucunun \u00f6nceki isteklerle ilgili bir haf\u0131zaya sahip olmas\u0131 gerekmez. Bu, \u00f6zellikle ani trafik art\u0131\u015flar\u0131nda veya s\u00fcrekli de\u011fi\u015fen i\u015f y\u00fcklerinde hayati \u00f6nem ta\u015f\u0131r. Ayr\u0131ca, bir sunucu ar\u0131zaland\u0131\u011f\u0131nda, di\u011fer sunucular i\u015fi kesintisiz bir \u015fekilde devralabilir, bu da sistemin dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h4>Kaynak Y\u00f6netimi ve Verimlilik<\/h4>\n<p>Durumsuz mimari, sunucu kaynaklar\u0131n\u0131n daha verimli kullan\u0131lmas\u0131na olanak tan\u0131r. Sunucular\u0131n her oturum i\u00e7in bellek veya CPU kaynaklar\u0131n\u0131 ay\u0131rmas\u0131na gerek kalmaz. Her istek tamamland\u0131\u011f\u0131nda, kullan\u0131lan kaynaklar hemen serbest b\u0131rak\u0131l\u0131r ve bir sonraki iste\u011fe haz\u0131r hale gelir. Bu, \u00f6zellikle bulut tabanl\u0131 ortamlarda maliyet optimizasyonu a\u00e7\u0131s\u0131ndan \u00f6nemlidir, \u00e7\u00fcnk\u00fc yaln\u0131zca ger\u00e7ekten kullan\u0131lan kaynaklar i\u00e7in \u00f6deme yap\u0131l\u0131r.<\/p>\n<h3>Mimari Tasar\u0131m\u0131n Temelleri<\/h3>\n<p>Durumsuz bir g\u00f6r\u00fcnt\u00fc i\u015fleme API&#8217;si tasarlarken, veri ak\u0131\u015f\u0131n\u0131 ve i\u015fleme mant\u0131\u011f\u0131n\u0131 dikkatlice planlamak gerekir. Temel ama\u00e7, her iste\u011fin kendi kendine yeterli olmas\u0131n\u0131 sa\u011flamakt\u0131r.<\/p>\n<h4>Geleneksel Yakla\u015f\u0131mlar\u0131n S\u0131n\u0131rlamalar\u0131<\/h4>\n<p>Geleneksel olarak, g\u00f6r\u00fcnt\u00fc i\u015fleme API&#8217;leri genellikle dosyalar\u0131 sunucuya kaydeder, i\u015fler ve ard\u0131ndan sonucu geri d\u00f6nd\u00fcr\u00fcrd\u00fc. Bu, sunucuda ge\u00e7ici depolama alan\u0131 gerektirir ve \u00f6zellikle y\u00fcksek hacimli isteklerde disk G\/\u00c7 (I\/O) performans\u0131n\u0131 olumsuz etkileyebilir. Ayr\u0131ca, sunucu taraf\u0131nda dosya sistemi y\u00f6netimi ve temizli\u011fi gibi ek karma\u015f\u0131kl\u0131klar getirir. Durumsuz bir yakla\u015f\u0131m bu t\u00fcr ba\u011f\u0131ml\u0131l\u0131klar\u0131 ortadan kald\u0131r\u0131r.<\/p>\n<h4>\u0130stek-Yan\u0131t D\u00f6ng\u00fcs\u00fc<\/h4>\n<p>Durumsuz bir g\u00f6r\u00fcnt\u00fc i\u015fleme API&#8217;sinde temel istek-yan\u0131t d\u00f6ng\u00fcs\u00fc \u015fu \u015fekildedir:<\/p>\n<p>1.  <strong>\u0130stemci \u0130ste\u011fi:<\/strong> \u0130stemci (web uygulamas\u0131, mobil uygulama vb.), i\u015flenecek g\u00f6r\u00fcnt\u00fcy\u00fc (genellikle bir dosya olarak veya bir URL&#8217;den) ve i\u015fleme parametrelerini (\u00f6rne\u011fin, boyutland\u0131rma oranlar\u0131, filtreler) API&#8217;ye g\u00f6nderir. Bu genellikle HTTP POST iste\u011fiyle ve <code>multipart\/form-data<\/code> veya JSON payload i\u00e7inde Base64 kodlu g\u00f6r\u00fcnt\u00fc ile yap\u0131l\u0131r.<br \/>\n2.  <strong>API \u0130\u015fleme:<\/strong> API sunucusu iste\u011fi al\u0131r. G\u00f6r\u00fcnt\u00fcy\u00fc do\u011frudan bellekten okur, belirtilen parametrelere g\u00f6re i\u015fler. Bu a\u015famada g\u00f6r\u00fcnt\u00fc hi\u00e7bir zaman sunucunun kal\u0131c\u0131 depolama birimine yaz\u0131lmaz.<br \/>\n3.  <strong>Yan\u0131t G\u00f6nderme:<\/strong> \u0130\u015flenmi\u015f g\u00f6r\u00fcnt\u00fc, genellikle do\u011frudan ikili veri (\u00f6rne\u011fin, <code>image\/jpeg<\/code> veya <code>image\/png<\/code> content-type ile) veya Base64 kodlu bir string olarak istemciye geri g\u00f6nderilir.<\/p>\n<h4>Veri Ak\u0131\u015f\u0131 ve Ge\u00e7ici Depolama<\/h4>\n<p>Bu mimaride, g\u00f6r\u00fcnt\u00fc verileri genellikle bellek i\u00e7i tamponlar (in-memory buffers) arac\u0131l\u0131\u011f\u0131yla ak\u0131t\u0131l\u0131r. \u0130stemciden gelen g\u00f6r\u00fcnt\u00fc verisi do\u011frudan i\u015fleme k\u00fct\u00fcphanesine beslenir ve i\u015flenmi\u015f \u00e7\u0131kt\u0131 da do\u011frudan yan\u0131t ak\u0131\u015f\u0131na y\u00f6nlendirilir. E\u011fer \u00e7ok b\u00fcy\u00fck dosyalarla \u00e7al\u0131\u015f\u0131l\u0131yorsa ve bellek k\u0131s\u0131tlamalar\u0131 varsa, bulut tabanl\u0131 ge\u00e7ici depolama (\u00f6rne\u011fin, AWS S3 veya Azure Blob Storage) k\u0131sa s\u00fcreli\u011fine kullan\u0131labilir. Ancak bu durumda bile, API&#8217;nin kendisi herhangi bir durumu korumaz; depolama servisi sadece bir ara katman g\u00f6revi g\u00f6r\u00fcr.<\/p>\n<h3>Kullan\u0131lan Teknolojiler ve Ara\u00e7lar<\/h3>\n<p>Bu t\u00fcr bir API&#8217;yi in\u015fa etmek i\u00e7in do\u011fru teknoloji y\u0131\u011f\u0131n\u0131n\u0131 se\u00e7mek, geli\u015ftirme s\u00fcrecini ve nihai \u00fcr\u00fcn\u00fcn performans\u0131n\u0131 b\u00fcy\u00fck \u00f6l\u00e7\u00fcde etkiler.<\/p>\n<h4>Programlama Dili ve Web \u00c7er\u00e7evesi<\/h4>\n<p>G\u00f6r\u00fcnt\u00fc i\u015fleme ve API geli\u015ftirme i\u00e7in Python, zengin k\u00fct\u00fcphane ekosistemi ve geli\u015ftirme kolayl\u0131\u011f\u0131 nedeniyle pop\u00fcler bir se\u00e7imdir.<\/p>\n<p>*   <strong>Python:<\/strong> Veri i\u015fleme, makine \u00f6\u011frenimi ve web geli\u015ftirme i\u00e7in g\u00fc\u00e7l\u00fc bir dil.<br \/>\n*   <strong>FastAPI:<\/strong> Modern, h\u0131zl\u0131 (Starlette \u00fczerine kurulu), y\u00fcksek performansl\u0131 bir Python web \u00e7er\u00e7evesidir. Otomatik interaktif API dok\u00fcmantasyonu (Swagger UI\/ReDoc) ve tip ipu\u00e7lar\u0131 sayesinde geli\u015ftirme s\u00fcrecini h\u0131zland\u0131r\u0131r. Asenkron i\u015flemleri do\u011fal olarak desteklemesi, I\/O yo\u011fun g\u00f6revler (g\u00f6r\u00fcnt\u00fc i\u015fleme gibi) i\u00e7in idealdir.<\/p>\n<p>Alternatif olarak, Node.js (Express ile) veya Go (Gin\/Echo ile) gibi diller de tercih edilebilir, ancak Python&#8217;\u0131n g\u00f6r\u00fcnt\u00fc i\u015fleme k\u00fct\u00fcphaneleri daha olgun ve yayg\u0131n olabilir.<\/p>\n<h4>G\u00f6r\u00fcnt\u00fc \u0130\u015fleme K\u00fct\u00fcphaneleri<\/h4>\n<p>G\u00f6r\u00fcnt\u00fc i\u015fleme operasyonlar\u0131n\u0131n kalbi bu k\u00fct\u00fcphanelerde atar:<\/p>\n<p>*   <strong>Pillow (PIL Fork):<\/strong> Python i\u00e7in de facto g\u00f6r\u00fcnt\u00fc i\u015fleme k\u00fct\u00fcphanesidir. Yeniden boyutland\u0131rma, k\u0131rpma, d\u00f6nd\u00fcrme, filtre uygulama ve farkl\u0131 formatlar aras\u0131nda d\u00f6n\u00fc\u015ft\u00fcrme gibi temel i\u015flemler i\u00e7in m\u00fckemmeldir.<br \/>\n*   <strong>OpenCV (Open Source Computer Vision Library):<\/strong> Daha geli\u015fmi\u015f bilgisayar g\u00f6r\u00fc\u015f\u00fc g\u00f6revleri (nesne tan\u0131ma, y\u00fcz alg\u0131lama vb.) i\u00e7in kullan\u0131l\u0131r. Python ba\u011flamalar\u0131 sayesinde Pillow ile entegre edilebilir.<br \/>\n*   <strong>ImageMagick (Wrapper ile):<\/strong> Komut sat\u0131r\u0131 arac\u0131 olmas\u0131na ra\u011fmen, Python&#8217;da <code>Wand<\/code> gibi k\u00fct\u00fcphaneler arac\u0131l\u0131\u011f\u0131yla kullan\u0131labilir. \u00c7ok \u00e7e\u015fitli format deste\u011fi ve geli\u015fmi\u015f \u00f6zellikler sunar.<\/p>\n<h4>Bulut Hizmetleri (Opsiyonel)<\/h4>\n<p>API&#8217;nin kendisi durumsuz olsa da, baz\u0131 yard\u0131mc\u0131 bulut hizmetleri genel mimariye de\u011fer katabilir:<\/p>\n<p>*   <strong>AWS S3 \/ Azure Blob Storage:<\/strong> E\u011fer istemci g\u00f6r\u00fcnt\u00fcy\u00fc do\u011frudan API&#8217;ye y\u00fcklemek yerine bir URL sa\u011fl\u0131yorsa, API bu URL&#8217;den g\u00f6r\u00fcnt\u00fcy\u00fc ge\u00e7ici olarak indirip i\u015fleyebilir. Ya da \u00e7ok b\u00fcy\u00fck dosyalar i\u00e7in, istemci \u00f6nce g\u00f6r\u00fcnt\u00fcy\u00fc S3&#8217;e y\u00fckleyip API&#8217;ye S3 URL&#8217;ini g\u00f6nderebilir. API i\u015fleme sonras\u0131 g\u00f6r\u00fcnt\u00fcy\u00fc tekrar S3&#8217;e kaydedip istemciye yeni S3 URL&#8217;ini d\u00f6nd\u00fcrebilir. Ancak bu, API&#8217;nin kendisinin durumsuzlu\u011funu bozmaz, sadece bir depolama katman\u0131 ekler.<br \/>\n*   <strong>AWS Lambda \/ Azure Functions \/ Google Cloud Functions:<\/strong> Durumsuz API&#8217;ler, sunucusuz fonksiyonlar i\u00e7in do\u011fal bir uyum i\u00e7indedir. Her API iste\u011fi, bir Lambda fonksiyonunu tetikleyebilir ve bu fonksiyon, iste\u011fi i\u015fleyip yan\u0131t\u0131 d\u00f6nd\u00fcrebilir. Bu, altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131r\u0131r ve yaln\u0131zca kullan\u0131lan s\u00fcre i\u00e7in \u00f6deme yap\u0131lmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Konteynerle\u015ftirme (Docker)<\/h4>\n<p>Uygulaman\u0131n ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n (Python s\u00fcr\u00fcm\u00fc, k\u00fct\u00fcphaneler vb.) tutarl\u0131 bir ortamda \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in Docker kullanmak hayati \u00f6neme sahiptir. Docker konteynerleri, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda ta\u015f\u0131nabilirli\u011fi garanti eder.<\/p>\n<h3>API U\u00e7 Noktalar\u0131n\u0131n Tasar\u0131m\u0131 ve Uygulamas\u0131<\/h3>\n<p>API u\u00e7 noktalar\u0131, istemcilerin g\u00f6r\u00fcnt\u00fc i\u015fleme yeteneklerine eri\u015fti\u011fi kap\u0131lard\u0131r. Bu u\u00e7 noktalar\u0131n iyi tasarlanm\u0131\u015f olmas\u0131, API&#8217;nin kullan\u0131m kolayl\u0131\u011f\u0131n\u0131 ve anla\u015f\u0131l\u0131rl\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h4>\u00d6rnek API U\u00e7 Noktalar\u0131<\/h4>\n<p>Bir g\u00f6r\u00fcnt\u00fc i\u015fleme API&#8217;sinde tipik olarak bulunabilecek u\u00e7 noktalar \u015funlard\u0131r:<\/p>\n<p>*   <strong><code>\/resize<\/code>:<\/strong> G\u00f6r\u00fcnt\u00fcy\u00fc belirli bir geni\u015flik ve\/veya y\u00fcksekli\u011fe yeniden boyutland\u0131r\u0131r.<br \/>\n*   <strong><code>\/grayscale<\/code>:<\/strong> G\u00f6r\u00fcnt\u00fcy\u00fc gri tonlamal\u0131 yapar.<br \/>\n*   <strong><code>\/watermark<\/code>:<\/strong> G\u00f6r\u00fcnt\u00fcye bir filigran ekler.<br \/>\n*   <strong><code>\/crop<\/code>:<\/strong> G\u00f6r\u00fcnt\u00fcn\u00fcn belirli bir b\u00f6lgesini k\u0131rpar.<br \/>\n*   <strong><code>\/rotate<\/code>:<\/strong> G\u00f6r\u00fcnt\u00fcy\u00fc belirli bir a\u00e7\u0131yla d\u00f6nd\u00fcr\u00fcr.<br \/>\n*   <strong><code>\/convert<\/code>:<\/strong> G\u00f6r\u00fcnt\u00fcy\u00fc bir formattan di\u011ferine d\u00f6n\u00fc\u015ft\u00fcr\u00fcr (\u00f6rn. PNG&#8217;den JPEG&#8217;e).<\/p>\n<h4>\u0130stek ve Yan\u0131t Yap\u0131s\u0131<\/h4>\n<p>*   <strong>\u0130stek (Request):<\/strong><br \/>\n    *   <strong>Dosya Y\u00fckleme:<\/strong> <code>multipart\/form-data<\/code> ile do\u011frudan g\u00f6r\u00fcnt\u00fc dosyas\u0131 y\u00fckleme.<br \/>\n    *   <strong>URL ile:<\/strong> JSON payload i\u00e7inde g\u00f6r\u00fcnt\u00fcn\u00fcn URL&#8217;ini g\u00f6nderme. API bu URL&#8217;den g\u00f6r\u00fcnt\u00fcy\u00fc indirir.<br \/>\n    *   <strong>Base64 ile:<\/strong> JSON payload i\u00e7inde Base64 kodlu g\u00f6r\u00fcnt\u00fc string&#8217;ini g\u00f6nderme.<br \/>\n    *   <strong>Parametreler:<\/strong> JSON payload veya sorgu parametreleri (query parameters) ile i\u015fleme se\u00e7enekleri (\u00f6rn. <code>width=200<\/code>, <code>format=jpeg<\/code>).<br \/>\n*   <strong>Yan\u0131t (Response):<\/strong><br \/>\n    *   <strong>\u0130kili Veri:<\/strong> \u0130\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc do\u011frudan ikili formatta d\u00f6nd\u00fcrme (<code>Content-Type: image\/jpeg<\/code>). Bu en yayg\u0131n ve verimli y\u00f6ntemdir.<br \/>\n    *   <strong>Base64 String:<\/strong> \u0130\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc Base64 kodlu bir string olarak JSON i\u00e7inde d\u00f6nd\u00fcrme. Daha az verimli olsa da baz\u0131 durumlarda tercih edilebilir.<br \/>\n    *   <strong>URL:<\/strong> \u0130\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc bir bulut depolama servisine kaydedip, o g\u00f6r\u00fcnt\u00fcn\u00fcn URL&#8217;ini d\u00f6nd\u00fcrme.<\/p>\n<h4>Hata Y\u00f6netimi ve G\u00fcvenlik<\/h4>\n<p>*   <strong>Hata Y\u00f6netimi:<\/strong> API, ge\u00e7ersiz istekler (eksik parametreler, desteklenmeyen dosya formatlar\u0131), i\u015fleme hatalar\u0131 veya sunucu hatalar\u0131 i\u00e7in anlaml\u0131 HTTP durum kodlar\u0131 (400 Bad Request, 404 Not Found, 500 Internal Server Error) ve a\u00e7\u0131klay\u0131c\u0131 hata mesajlar\u0131 d\u00f6nd\u00fcrmelidir.<br \/>\n*   <strong>G\u00fcvenlik:<\/strong><br \/>\n    *   <strong>API Anahtarlar\u0131\/JWT:<\/strong> API&#8217;ye eri\u015fimi k\u0131s\u0131tlamak i\u00e7in API anahtarlar\u0131 veya JWT (JSON Web Tokens) kullan\u0131labilir.<br \/>\n    *   <strong>Giri\u015f Do\u011frulama:<\/strong> Y\u00fcklenen dosya t\u00fcr\u00fcn\u00fc ve boyutunu do\u011frulamak, potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 (\u00f6rn. k\u00f6t\u00fc ama\u00e7l\u0131 dosyalar) \u00f6nler.<br \/>\n    *   <strong>Rate Limiting:<\/strong> A\u015f\u0131r\u0131 kullan\u0131m\u0131 \u00f6nlemek ve DDoS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flamak i\u00e7in istek s\u0131n\u0131rlamas\u0131 uygulanabilir.<\/p>\n<h4>Kod \u00d6rne\u011fi: Basit Bir Yeniden Boyutland\u0131rma U\u00e7 Noktas\u0131<\/h4>\n<p>FastAPI ve Pillow kullanarak basit bir yeniden boyutland\u0131rma u\u00e7 noktas\u0131 \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-python\">from fastapi import FastAPI, UploadFile, File, HTTPException\nfrom fastapi.responses import StreamingResponse\nfrom PIL import Image\nimport io\n\napp = FastAPI()\n\n@app.post(\"\/resize_image\/\")\nasync def resize_image(file: UploadFile = File(...), width: int = None, height: int = None):\n    if not file.content_type.startswith(\"image\/\"):\n        raise HTTPException(status_code=400, detail=\"Sadece resim dosyalar\u0131 kabul edilir.\")\n\n    if not width and not height:\n        raise HTTPException(status_code=400, detail=\"Geni\u015flik veya y\u00fckseklik belirtilmelidir.\")\n\n    try:\n        # G\u00f6r\u00fcnt\u00fcy\u00fc belle\u011fe oku\n        contents = await file.read()\n        image = Image.open(io.BytesIO(contents))\n\n        # Yeni boyutlar\u0131 hesapla\n        original_width, original_height = image.size\n        if width and not height:\n            height = int(original_height * (width \/ original_width))\n        elif height and not width:\n            width = int(original_width * (height \/ original_height))\n        elif width and height:\n            pass # Hem geni\u015flik hem y\u00fckseklik belirtilmi\u015fse do\u011frudan kullan\n\n        # G\u00f6r\u00fcnt\u00fcy\u00fc yeniden boyutland\u0131r\n        resized_image = image.resize((width, height))\n\n        # \u0130\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc belle\u011fe yaz\n        output_buffer = io.BytesIO()\n        resized_image.save(output_buffer, format=image.format)\n        output_buffer.seek(0)\n\n        return StreamingResponse(output_buffer, media_type=file.content_type)\n\n    except Exception as e:\n        raise HTTPException(status_code=500, detail=f\"G\u00f6r\u00fcnt\u00fc i\u015fleme hatas\u0131: {e}\")<\/pre>\n<p><\/code><br \/>\nBu \u00f6rnekte, istemci bir g\u00f6r\u00fcnt\u00fc dosyas\u0131 ve istenen <code>width<\/code> veya <code>height<\/code> parametrelerini g\u00f6nderir. API, g\u00f6r\u00fcnt\u00fcy\u00fc bellekte i\u015fler ve do\u011frudan i\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc HTTP yan\u0131t\u0131 olarak geri d\u00f6nd\u00fcr\u00fcr.<\/p>\n<h3>\u00d6l\u00e7eklenebilirlik ve Performans Optimizasyonu<\/h3>\n<p>Durumsuz bir API'nin temel avantaj\u0131 olan \u00f6l\u00e7eklenebilirlik, do\u011fru stratejilerle daha da peki\u015ftirilebilir.<\/p>\n<h4>Sunucusuz Fonksiyonlar (Lambda\/Cloud Functions)<\/h4>\n<p>Daha \u00f6nce de belirtildi\u011fi gibi, durumsuz API'ler sunucusuz mimarilerle m\u00fckemmel uyum sa\u011flar. AWS Lambda, Azure Functions veya Google Cloud Functions gibi servisler, API'yi da\u011f\u0131tmak i\u00e7in ideal platformlard\u0131r. Her istek, bir fonksiyonun bir \u00f6rne\u011fini tetikler, i\u015flem tamamland\u0131\u011f\u0131nda \u00f6rnek sonland\u0131r\u0131l\u0131r. Bu, otomatik \u00f6l\u00e7eklendirme, s\u0131f\u0131r sunucu y\u00f6netimi ve yaln\u0131zca kullan\u0131lan kaynaklar i\u00e7in \u00f6deme yapma gibi avantajlar sunar.<\/p>\n<h4>CDN Kullan\u0131m\u0131<\/h4>\n<p>E\u011fer i\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcler s\u0131k\u00e7a talep ediliyorsa, bir \u0130\u00e7erik Da\u011f\u0131t\u0131m A\u011f\u0131 (CDN - Content Delivery Network) kullanmak performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. \u0130\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcler bir CDN \u00f6nbelle\u011finde depolanabilir, b\u00f6ylece ayn\u0131 g\u00f6r\u00fcnt\u00fcye yap\u0131lan sonraki istekler do\u011frudan CDN'den servis edilir ve API sunucusuna ula\u015fmaz. Bu, API \u00fczerindeki y\u00fck\u00fc azalt\u0131r ve yan\u0131t s\u00fcrelerini k\u0131salt\u0131r.<\/p>\n<h4>Asenkron \u0130\u015fleme (Gerekiyorsa)<\/h4>\n<p>\u00c7o\u011fu g\u00f6r\u00fcnt\u00fc i\u015fleme i\u015flemi senkronize olarak (yani istek an\u0131nda) tamamlanabilir. Ancak \u00e7ok b\u00fcy\u00fck g\u00f6r\u00fcnt\u00fcler veya karma\u015f\u0131k, uzun s\u00fcreli i\u015flemler (\u00f6rn. toplu i\u015fleme) i\u00e7in asenkron bir yakla\u015f\u0131m d\u00fc\u015f\u00fcn\u00fclebilir. Bu durumda, API iste\u011fi al\u0131r, i\u015flemi bir mesaj kuyru\u011funa (\u00f6rn. RabbitMQ, Kafka) g\u00f6nderir ve istemciye bir i\u015flem kimli\u011fi d\u00f6nd\u00fcr\u00fcr. Ayr\u0131 bir i\u015f\u00e7i servisi (worker service) kuyruktaki g\u00f6revleri al\u0131r, i\u015fler ve sonu\u00e7 haz\u0131r oldu\u011funda istemciyi bilgilendirir (\u00f6rn. webhook veya polling ile). Bu, API'nin yan\u0131t s\u00fcresini d\u00fc\u015f\u00fck tutar.<\/p>\n<h4>Kaynak Y\u00f6netimi<\/h4>\n<p>API'nin \u00e7al\u0131\u015ft\u0131\u011f\u0131 ortamda (sanal makine, konteyner veya sunucusuz fonksiyon) do\u011fru CPU ve RAM kaynaklar\u0131n\u0131 tahsis etmek performans\u0131 do\u011frudan etkiler. G\u00f6r\u00fcnt\u00fc i\u015fleme, \u00f6zellikle b\u00fcy\u00fck boyutlu g\u00f6r\u00fcnt\u00fclerle \u00e7al\u0131\u015f\u0131rken bellek ve CPU yo\u011fun bir i\u015flemdir. Yeterli kaynak sa\u011flanmazsa, i\u015flemler yava\u015flayabilir veya bellek yetersizli\u011fi hatalar\u0131 olu\u015fabilir.<\/p>\n<h3>Da\u011f\u0131t\u0131m ve \u0130zleme<\/h3>\n<p>API'nin geli\u015ftirilmesi kadar, onu \u00fcretim ortam\u0131na da\u011f\u0131tmak ve performans\u0131n\u0131 izlemek de \u00f6nemlidir.<\/p>\n<h4>Konteyner Da\u011f\u0131t\u0131m\u0131 (Kubernetes\/ECS)<\/h4>\n<p>Docker konteynerleri, API'yi Kubernetes, AWS ECS (Elastic Container Service) veya Azure Kubernetes Service (AKS) gibi konteyner orkestrasyon platformlar\u0131na da\u011f\u0131tmak i\u00e7in idealdir. Bu platformlar, konteynerlerin otomatik olarak \u00f6l\u00e7eklenmesini, kendini iyile\u015ftirmesini ve da\u011f\u0131t\u0131m\u0131n\u0131 y\u00f6netir.<\/p>\n<h4>Loglama ve Metrikler<\/h4>\n<p>API'nin sa\u011fl\u0131\u011f\u0131n\u0131 ve performans\u0131n\u0131 anlamak i\u00e7in kapsaml\u0131 loglama ve metrik toplama kritik \u00f6neme sahiptir.<\/p>\n<p>*   <strong>Loglama:<\/strong> \u0130stek detaylar\u0131, hata mesajlar\u0131, i\u015fleme s\u00fcreleri gibi bilgiler merkezi bir loglama sistemine (\u00f6rn. ELK Stack, Grafana Loki) g\u00f6nderilmelidir.<br \/>\n*   <strong>Metrikler:<\/strong> \u0130stek say\u0131s\u0131, hata oranlar\u0131, yan\u0131t s\u00fcreleri, CPU\/bellek kullan\u0131m\u0131 gibi metrikler Prometheus, Datadog veya AWS CloudWatch gibi ara\u00e7larla izlenmelidir. Bu metrikler, performans darbo\u011fazlar\u0131n\u0131 tespit etmeye ve proaktif \u00f6nlemler almaya yard\u0131mc\u0131 olur.<\/p>\n<h4>CI\/CD Entegrasyonu<\/h4>\n<p>S\u00fcrekli Entegrasyon ve S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD) i\u015flem hatlar\u0131, kod de\u011fi\u015fikliklerinin otomatik olarak test edilmesini ve \u00fcretim ortam\u0131na g\u00fcvenli bir \u015fekilde da\u011f\u0131t\u0131lmas\u0131n\u0131 sa\u011flar. Her kod de\u011fi\u015fikli\u011finde otomatik testler \u00e7al\u0131\u015f\u0131r, Docker imaj\u0131 olu\u015fturulur ve ba\u015far\u0131l\u0131 olursa yeni versiyon otomatik olarak da\u011f\u0131t\u0131l\u0131r. Bu, geli\u015ftirme h\u0131z\u0131n\u0131 art\u0131r\u0131r ve insan hatas\u0131n\u0131 azalt\u0131r.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Durumsuz bir g\u00f6r\u00fcnt\u00fc i\u015fleme API'si olu\u015fturmak, modern ve \u00f6l\u00e7eklenebilir uygulamalar i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcmd\u00fcr. Bellek i\u00e7i i\u015fleme, bulut tabanl\u0131 servislerle entegrasyon ve konteynerle\u015ftirme gibi yakla\u015f\u0131mlar sayesinde, bu API'ler y\u00fcksek performans ve esneklik sunar. Python ve FastAPI gibi ara\u00e7lar, bu t\u00fcr bir sistemin h\u0131zl\u0131 ve verimli bir \u015fekilde geli\u015ftirilmesine olanak tan\u0131rken, sunucusuz mimariler ve CDN kullan\u0131m\u0131 gibi optimizasyonlar, maliyetleri d\u00fc\u015f\u00fcr\u00fcrken performans\u0131 art\u0131r\u0131r. G\u00f6r\u00fcnt\u00fc i\u015fleme ihtiya\u00e7lar\u0131n\u0131z i\u00e7in durumsuz bir API, gelece\u011fe y\u00f6nelik, sa\u011flam bir temel sunar.<\/p>\n<h3>SSS (S\u0131k Sorulan Sorular)<\/h3>\n<h4>Neden Python tercih edildi, ba\u015fka diller kullan\u0131labilir mi?<\/h4>\n<p>Python, zengin g\u00f6r\u00fcnt\u00fc i\u015fleme k\u00fct\u00fcphaneleri (Pillow, OpenCV) ve h\u0131zl\u0131 web \u00e7er\u00e7eveleri (FastAPI) sayesinde pop\u00fcler bir se\u00e7imdir. Ancak Node.js (Sharp.js ile), Go (bildirimli k\u00fct\u00fcphanelerle) veya Rust (Image k\u00fct\u00fcphanesi ile) gibi diller de performans veya belirli ekosistem tercihleri nedeniyle kullan\u0131labilir.<\/p>\n<h4>Bu API b\u00fcy\u00fck boyutlu g\u00f6r\u00fcnt\u00fc dosyalar\u0131n\u0131 nas\u0131l i\u015fler?<\/h4>\n<p>API, g\u00f6r\u00fcnt\u00fcleri do\u011frudan bellekten okuyup i\u015fleyerek disk G\/\u00c7'sini minimuma indirir. \u00c7ok b\u00fcy\u00fck dosyalar i\u00e7in, e\u011fer bellek k\u0131s\u0131tlamas\u0131 ya\u015fan\u0131rsa, bulut depolama servisleri (S3 gibi) ge\u00e7ici bir ara katman olarak kullan\u0131labilir. Ancak API'nin kendisi hala durumu korumaz, sadece bir URL \u00fczerinden dosya indirip i\u015fler.<\/p>\n<h4>G\u00f6r\u00fcnt\u00fc i\u015fleme API'sinin g\u00fcvenli\u011fi nas\u0131l sa\u011flan\u0131r?<\/h4>\n<p>API anahtarlar\u0131 veya JWT ile kimlik do\u011frulama, istek s\u0131n\u0131rlamas\u0131 (rate limiting), dosya t\u00fcr\u00fc ve boyutu do\u011frulama, ve HTTPS kullan\u0131m\u0131 gibi \u00f6nlemlerle g\u00fcvenlik sa\u011flan\u0131r. Ayr\u0131ca, kullan\u0131lan k\u00fct\u00fcphanelerin g\u00fcncel tutulmas\u0131 ve bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n yamalanmas\u0131 \u00f6nemlidir.<\/p>\n<h4>Bu API'nin maliyeti nedir?<\/h4>\n<p>Maliyet, kullan\u0131lan bulut sa\u011flay\u0131c\u0131s\u0131na (AWS, Azure, GCP), i\u015fleme hacmine, sunucu\/fonksiyon \u00f6rneklerinin say\u0131s\u0131na ve depolama ihtiya\u00e7lar\u0131na g\u00f6re de\u011fi\u015fir. Sunucusuz fonksiyonlar (Lambda gibi) genellikle sadece kullan\u0131lan s\u00fcre ve kaynak i\u00e7in \u00f6deme yap\u0131ld\u0131\u011f\u0131 i\u00e7in maliyet etkin olabilir. CDN kullan\u0131m\u0131 ve verimli kod da maliyetleri d\u00fc\u015f\u00fcrmeye yard\u0131mc\u0131 olur.<\/p>\n<h4>\u0130\u015flenen g\u00f6r\u00fcnt\u00fcler nerede depolan\u0131yor?<\/h4>\n<p>Durumsuz bir API'de i\u015flenen g\u00f6r\u00fcnt\u00fcler kal\u0131c\u0131 olarak API sunucusunda depolanmaz. Genellikle do\u011frudan istemciye geri d\u00f6nd\u00fcr\u00fcl\u00fcr. E\u011fer kal\u0131c\u0131 depolama gerekiyorsa, istemci veya API, i\u015flenmi\u015f g\u00f6r\u00fcnt\u00fcy\u00fc ayr\u0131 bir bulut depolama servisine (\u00f6rn. AWS S3) kaydedebilir ve istemciye bu depolama konumunun URL'ini d\u00f6nd\u00fcrebilir.<\/p>\n","protected":false},"excerpt":{"rendered":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?\nDijital d\u00fcnyada g\u00f6rsellerin \u00f6nemi her ge\u00e7en g\u00fcn artarken, bu g\u00f6rselleri&#8230;","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":[1],"tags":[],"class_list":{"0":"post-39463","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#039;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor? - 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\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#039;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?\" \/>\n<meta property=\"og:description\" content=\"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#039;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor? Dijital d\u00fcnyada g\u00f6rsellerin \u00f6nemi her ge\u00e7en g\u00fcn artarken, bu g\u00f6rselleri...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-21T22:00:39+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=\"16 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?\",\"datePublished\":\"2026-02-21T22:00:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\"},\"wordCount\":2955,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\",\"name\":\"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API'si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-21T22:00:39+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?\"}]},{\"@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":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API'si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor? - 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\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/","og_locale":"tr_TR","og_type":"article","og_title":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API'si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?","og_description":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API'si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor? Dijital d\u00fcnyada g\u00f6rsellerin \u00f6nemi her ge\u00e7en g\u00fcn artarken, bu g\u00f6rselleri...","og_url":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-21T22:00:39+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"16 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?","datePublished":"2026-02-21T22:00:39+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/"},"wordCount":2955,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/","url":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/","name":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API'si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor? - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-21T22:00:39+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/sunucusuz-goruntu-isleme-apisi-olusturdum-iste-nasil-calisiyor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Sunucusuz G\u00f6r\u00fcnt\u00fc \u0130\u015fleme API&#8217;si Olu\u015fturdum: \u0130\u015fte Nas\u0131l \u00c7al\u0131\u015f\u0131yor?"}]},{"@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\/39463","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=39463"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/39463\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=39463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=39463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=39463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}