{"id":41758,"date":"2026-05-13T21:04:28","date_gmt":"2026-05-13T18:04:28","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/"},"modified":"2026-05-13T21:04:28","modified_gmt":"2026-05-13T18:04:28","slug":"yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/","title":{"rendered":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim"},"content":{"rendered":"<h2>Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim<\/h2>\n<p>Yapay zeka modelleriyle olan etkile\u015fimlerimiz, g\u00fcnl\u00fck hayat\u0131m\u0131z\u0131n giderek daha ayr\u0131lmaz bir par\u00e7as\u0131 haline geliyor. Sanal asistanlardan m\u00fc\u015fteri hizmetleri botlar\u0131na, karma\u015f\u0131k veri analiz ara\u00e7lar\u0131ndan yarat\u0131c\u0131 i\u00e7erik \u00fcretim sistemlerine kadar, AI sohbetleri her yerde kar\u015f\u0131m\u0131za \u00e7\u0131k\u0131yor. Ancak bu etkile\u015fimlerin b\u00fcy\u00fck bir k\u0131sm\u0131, anl\u0131k ve ge\u00e7ici kal\u0131yor; de\u011ferli bilgiler, kullan\u0131c\u0131 deneyimleri ve model performans\u0131na dair kritik veriler genellikle kaybolup gidiyor. \u0130\u015fte tam da bu noktada, yapay zeka sohbetlerini kapsaml\u0131 bir \u015fekilde kaydetmek ve analiz etmek i\u00e7in bir aray\u0131\u015fa girdim. Bu makalede, bu ihtiyac\u0131 kar\u015f\u0131lamak \u00fczere bir MCP (Minecraft Proxy) sunucusu kurma deneyimimi, kar\u015f\u0131la\u015ft\u0131\u011f\u0131m zorluklar\u0131 ve bu s\u00fcre\u00e7ten edindi\u011fim paha bi\u00e7ilmez dersleri sizinle payla\u015faca\u011f\u0131m. Bu proje, hem teknik becerilerimi geli\u015ftirmemi sa\u011flad\u0131 hem de yapay zeka etkile\u015fimlerinin derinliklerine inmem i\u00e7in yeni kap\u0131lar a\u00e7t\u0131.<\/p>\n<h2>Neden Yapay Zeka Sohbetlerini Kaydetmeliyiz? Problemin Tan\u0131m\u0131<\/h2>\n<p>G\u00fcn\u00fcm\u00fczde yapay zeka (AI) sistemleriyle kurdu\u011fumuz ileti\u015fim, bir\u00e7ok alanda devrim niteli\u011finde de\u011fi\u015fimlere yol a\u00e7\u0131yor. M\u00fc\u015fteri destek botlar\u0131ndan ki\u015fisel asistanlara, e\u011fitim platformlar\u0131ndan sa\u011fl\u0131k dan\u0131\u015fmanl\u0131\u011f\u0131na kadar geni\u015f bir yelpazede AI ile etkile\u015fim halindeyiz. Ancak bu etkile\u015fimlerin b\u00fcy\u00fck bir \u00e7o\u011funlu\u011fu, t\u0131pk\u0131 bir r\u00fcya gibi, uyand\u0131\u011f\u0131m\u0131zda hat\u0131rlayamad\u0131\u011f\u0131m\u0131z veya detaylar\u0131n\u0131 ka\u00e7\u0131rd\u0131\u011f\u0131m\u0131z anl\u0131k deneyimler olarak kal\u0131yor. Bu durum, hem kullan\u0131c\u0131lar hem de AI geli\u015ftiricileri i\u00e7in \u00f6nemli bir veri kayb\u0131 ve \u00f6\u011frenme f\u0131rsat\u0131 eksikli\u011fi anlam\u0131na geliyor. Yapay zeka modellerinin &#8220;haf\u0131zas\u0131zl\u0131\u011f\u0131&#8221; olarak adland\u0131rabilece\u011fimiz bu durum, her yeni etkile\u015fimin s\u0131f\u0131rdan ba\u015flamas\u0131na neden oluyor ve modelin ge\u00e7mi\u015f deneyimlerinden \u00f6\u011frenmesini zorla\u015ft\u0131r\u0131yor. Kullan\u0131c\u0131lar, daha \u00f6nce verdikleri bilgileri tekrar etmek zorunda kalabilirken, geli\u015ftiriciler de modelin hangi sorulara nas\u0131l yan\u0131t verdi\u011fini, hangi noktalarda ba\u015far\u0131s\u0131z oldu\u011funu veya hangi konular\u0131n daha fazla ilgi \u00e7ekti\u011fini anlamakta g\u00fc\u00e7l\u00fck \u00e7ekiyorlar.<\/p>\n<p>Bu problem, \u00f6zellikle AI modelinin performans\u0131n\u0131 art\u0131rmak, kullan\u0131c\u0131 deneyimini optimize etmek ve olas\u0131 hatalar\u0131 tespit etmek isteyen geli\u015ftiriciler i\u00e7in hayati \u00f6nem ta\u015f\u0131yor. \u00d6rne\u011fin, bir e-ticaret botu d\u00fc\u015f\u00fcn\u00fcn. M\u00fc\u015fteriler, \u00fcr\u00fcnler hakk\u0131nda sorular soruyor, sipari\u015flerini takip ediyor veya iade s\u00fcre\u00e7leri hakk\u0131nda bilgi al\u0131yor. Bu sohbetler kaydedilmedi\u011finde, botun en s\u0131k hangi sorulara yanl\u0131\u015f yan\u0131t verdi\u011fi, hangi \u00fcr\u00fcn kategorilerinde bilgi eksikli\u011fi oldu\u011fu veya kullan\u0131c\u0131lar\u0131n genel olarak botla etkile\u015fiminden memnun olup olmad\u0131\u011f\u0131 gibi kritik veriler g\u00f6zden ka\u00e7\u0131r\u0131labiliyor. Bu durum, modelin s\u00fcrekli iyile\u015ftirilmesini engelleyerek hem maliyetleri art\u0131r\u0131yor hem de potansiyel m\u00fc\u015fteri kayb\u0131na yol a\u00e7abiliyor. \u0130\u015fte bu bo\u015flu\u011fu doldurmak ve kapsaml\u0131 bir etkile\u015fim g\u00fcnl\u00fc\u011f\u00fc olu\u015fturarak yapay zeka sistemlerinden maksimum fayday\u0131 sa\u011flamak amac\u0131yla, bir proxy (vekil sunucu) tabanl\u0131 loglama sistemine y\u00f6neldim. Bu sistem, AI ile kullan\u0131c\u0131 aras\u0131ndaki t\u00fcm ileti\u015fimi yakalayarak, gelecekteki analizler ve model geli\u015ftirmeleri i\u00e7in de\u011ferli bir veri hazinesi olu\u015fturmay\u0131 hedefliyor. Bu sayede, sadece anl\u0131k etkile\u015fimleri de\u011fil, zaman i\u00e7indeki e\u011filimleri, kullan\u0131c\u0131 davran\u0131\u015f kal\u0131plar\u0131n\u0131 ve modelin geli\u015fimini de izleyebilme imkan\u0131na sahip oluyoruz.<\/p>\n<h2>MCP Sunucusu Nedir ve Neden Bu Ama\u00e7la Kullan\u0131l\u0131r?<\/h2>\n<p>MCP, genellikle Minecraft Proxy&#8217;nin k\u0131saltmas\u0131 olarak bilinse de, bu projede &#8220;Middleman Communication Proxy&#8221; (Arac\u0131 \u0130leti\u015fim Vekil Sunucusu) olarak kendi tan\u0131m\u0131m\u0131 olu\u015fturdum. Temelde bir proxy sunucusu, bir istemci ile hedef sunucu aras\u0131na oturan ve t\u00fcm a\u011f trafi\u011fini kendi \u00fczerinden ge\u00e7iren bir arac\u0131 g\u00f6revi g\u00f6r\u00fcr. Bu mimari, genellikle a\u011f g\u00fcvenli\u011fi, performans iyile\u015ftirme veya trafik izleme gibi ama\u00e7lar i\u00e7in kullan\u0131l\u0131r. Benim senaryomda ise, yapay zeka sohbetlerini kaydetmek amac\u0131yla bu temel proxy mant\u0131\u011f\u0131n\u0131 adaptasyon ge\u00e7irdim. Bir proxy&#8217;nin temel avantaj\u0131, istemci ve hedef sunucu aras\u0131nda ger\u00e7ekle\u015fen ileti\u015fime m\u00fcdahale etme, bu ileti\u015fimi loglama (g\u00fcnl\u00fc\u011fe kaydetme), de\u011fi\u015ftirme veya y\u00f6nlendirme yetene\u011fidir. AI sohbetleri ba\u011flam\u0131nda bu, kullan\u0131c\u0131dan AI modeline giden her iste\u011fi (prompt) ve AI modelinden kullan\u0131c\u0131ya d\u00f6nen her yan\u0131t\u0131 (response) yakalamak ve kal\u0131c\u0131 olarak depolamak anlam\u0131na gelir.<\/p>\n<p>Peki, neden do\u011frudan AI API&#8217;lar\u0131ndan loglama yapmak yerine bir proxy sunucusu kullanmay\u0131 tercih ettim? Birincisi, esneklik. Farkl\u0131 yapay zeka servisleri (\u00f6rne\u011fin, OpenAI, Google Gemini, kendi geli\u015ftirdi\u011fimiz modeller) farkl\u0131 API aray\u00fczlerine sahip olabilir. Bir proxy, t\u00fcm bu farkl\u0131 servisleri tek bir merkezden y\u00f6netmemizi ve standart bir formatta loglamam\u0131z\u0131 sa\u011flar. Bu, gelecekte farkl\u0131 AI modellerini entegre etmek istedi\u011fimizde b\u00fcy\u00fck bir kolayl\u0131k sunar. \u0130kincisi, veri i\u015fleme ve zenginle\u015ftirme yetene\u011fi. Proxy \u00fczerinden ge\u00e7en veriyi kaydetmeden \u00f6nce \u00fczerinde \u00e7e\u015fitli i\u015flemler yapabiliriz. \u00d6rne\u011fin, hassas ki\u015fisel bilgileri maskeleyebilir, belirli anahtar kelimeleri etiketleyebilir veya sohbetin ba\u011flam\u0131n\u0131 zenginle\u015ftirecek ek meta veriler ekleyebiliriz. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, merkezi kontrol ve g\u00f6zlemlenebilirlik. T\u00fcm AI etkile\u015fimleri tek bir noktadan ge\u00e7ti\u011fi i\u00e7in, performans izleme, hata tespiti ve g\u00fcvenlik denetimleri \u00e7ok daha kolay hale gelir. Bu sayede, AI sistemimizin genel sa\u011fl\u0131\u011f\u0131n\u0131 ve davran\u0131\u015f\u0131n\u0131 tek bir g\u00f6sterge panosundan izleyebiliriz.<\/p>\n<p>Elbette, API entegrasyonlar\u0131 veya do\u011frudan veritaban\u0131 loglama gibi alternatif yakla\u015f\u0131mlar da mevcuttur. Ancak bu y\u00f6ntemler genellikle daha az esneklik sunar ve her AI servisi i\u00e7in ayr\u0131 ayr\u0131 entegrasyon ve loglama mant\u0131\u011f\u0131 geli\u015ftirme gereksinimi do\u011furur. Bir proxy, bu karma\u015f\u0131kl\u0131\u011f\u0131 soyutlayarak, AI sohbet loglama altyap\u0131s\u0131n\u0131 daha mod\u00fcler ve \u00f6l\u00e7eklenebilir hale getirir. Bu y\u00fczden, projem i\u00e7in bir &#8220;Middleman Communication Proxy&#8221; yakla\u015f\u0131m\u0131n\u0131 benimsemek, hem mevcut ihtiya\u00e7lar\u0131m\u0131 kar\u015f\u0131lad\u0131 hem de gelecekteki geni\u015fletmeler i\u00e7in sa\u011flam bir temel olu\u015fturdu. Bu yakla\u015f\u0131m, sadece veriyi kaydetmekle kalm\u0131yor, ayn\u0131 zamanda veriye anlam katma ve \u00fczerinde kontrol sahibi olma imkan\u0131 da sunuyor.<\/p>\n<h3>Temel Mimari: MCP Sunucusu Nas\u0131l \u00c7al\u0131\u015f\u0131r?<\/h3>\n<p>MCP sunucusu, temel olarak kullan\u0131c\u0131 ile yapay zeka modeli aras\u0131ndaki t\u00fcm ileti\u015fimi ele ge\u00e7iren ve i\u015fleyen bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. Bu mimariyi anlamak i\u00e7in basit bir ak\u0131\u015f \u015femas\u0131 d\u00fc\u015f\u00fcnebiliriz:<\/p>\n<p>1.  <strong>Kullan\u0131c\u0131 \u0130ste\u011fi:<\/strong> Kullan\u0131c\u0131, AI sohbet aray\u00fcz\u00fc (bir web uygulamas\u0131, mobil uygulama veya ba\u015fka bir aray\u00fcz) arac\u0131l\u0131\u011f\u0131yla yapay zeka modeline bir mesaj (prompt) g\u00f6nderir.<br \/>\n2.  <strong>Proxy&#8217;ye Y\u00f6nlendirme:<\/strong> Normalde bu istek do\u011frudan AI modeline giderken, bizim senaryomuzda ilk olarak MCP sunucumuza y\u00f6nlendirilir.<br \/>\n3.  <strong>\u0130stek Yakalama ve Kaydetme:<\/strong> MCP sunucusu, gelen bu iste\u011fi yakalar. Bu a\u015famada, iste\u011fin i\u00e7eri\u011fi (kullan\u0131c\u0131 mesaj\u0131), kullan\u0131c\u0131 kimli\u011fi, zaman damgas\u0131 ve di\u011fer ilgili meta veriler bir veritaban\u0131na kaydedilir.<br \/>\n4.  <strong>AI Modeline \u0130letme:<\/strong> \u0130stek kaydedildikten sonra, MCP sunucusu bu iste\u011fi as\u0131l hedef olan yapay zeka modeline (\u00f6rne\u011fin, OpenAI API&#8217;sine) iletir.<br \/>\n5.  <strong>AI Yan\u0131t\u0131 Alma:<\/strong> Yapay zeka modeli, iste\u011fi i\u015fler ve bir yan\u0131t (response) olu\u015fturur. Bu yan\u0131t, tekrar MCP sunucusuna d\u00f6ner.<br \/>\n6.  <strong>Yan\u0131t Yakalama ve Kaydetme:<\/strong> MCP sunucusu, AI modelinden gelen yan\u0131t\u0131 yakalar. Bu yan\u0131t\u0131n i\u00e7eri\u011fi, ilgili kullan\u0131c\u0131 iste\u011fiyle e\u015fle\u015ftirilerek yine veritaban\u0131na kaydedilir. Bu kay\u0131t, AI&#8217;\u0131n verdi\u011fi mesaj\u0131, yan\u0131t s\u00fcresini ve di\u011fer \u00f6nemli bilgileri i\u00e7erebilir.<br \/>\n7.  <strong>Kullan\u0131c\u0131ya \u0130letme:<\/strong> Son olarak, MCP sunucusu, AI&#8217;dan ald\u0131\u011f\u0131 yan\u0131t\u0131 orijinal kullan\u0131c\u0131ya geri iletir. Kullan\u0131c\u0131, AI ile do\u011frudan etkile\u015fim kuruyormu\u015f gibi g\u00f6r\u00fcn\u00fcr, ancak t\u00fcm ileti\u015fim bir proxy \u00fczerinden ge\u00e7mi\u015ftir.<\/p>\n<p>Bu ak\u0131\u015f, t\u00fcm sohbet verilerinin merkezi bir noktada toplanmas\u0131n\u0131 sa\u011flar. Veri yakalama noktalar\u0131, hem kullan\u0131c\u0131dan AI&#8217;a giden istekler hem de AI&#8217;dan kullan\u0131c\u0131ya d\u00f6nen yan\u0131tlar olmak \u00fczere iki ana noktad\u0131r. Kaydedilen veri t\u00fcrleri genellikle \u015funlar\u0131 i\u00e7erir:<\/p>\n<p>*   <strong>Zaman Damgas\u0131:<\/strong> Her mesaj\u0131n g\u00f6nderildi\u011fi ve al\u0131nd\u0131\u011f\u0131 kesin an.<br \/>\n*   <strong>Kullan\u0131c\u0131 Kimli\u011fi (User ID):<\/strong> Sohbeti ba\u015flatan kullan\u0131c\u0131n\u0131n benzersiz kimli\u011fi.<br \/>\n*   <strong>Kullan\u0131c\u0131 Mesaj\u0131 (User Message):<\/strong> Kullan\u0131c\u0131n\u0131n AI&#8217;a g\u00f6nderdi\u011fi metin.<br \/>\n*   <strong>AI Yan\u0131t\u0131 (AI Response):<\/strong> Yapay zeka modelinin kullan\u0131c\u0131ya verdi\u011fi metin.<br \/>\n*   <strong>Sohbet Oturumu Kimli\u011fi (Session ID):<\/strong> Ayn\u0131 sohbetin par\u00e7as\u0131 olan mesajlar\u0131 gruplamak i\u00e7in.<br \/>\n*   <strong>Token Say\u0131s\u0131:<\/strong> E\u011fer kullan\u0131l\u0131yorsa, istek ve yan\u0131tta kullan\u0131lan token (jeton) say\u0131s\u0131, maliyet analizi i\u00e7in \u00f6nemli olabilir.<br \/>\n*   <strong>Model Bilgisi:<\/strong> Hangi AI modelinin kullan\u0131ld\u0131\u011f\u0131 (\u00f6rne\u011fin, GPT-4, Llama 2).<\/p>\n<p>Bu sistemi kurmak i\u00e7in genellikle Python, Node.js veya Go gibi bir backend (arka u\u00e7) dili kullan\u0131l\u0131r. Bu diller, HTTP isteklerini i\u015flemek ve veritaban\u0131yla etkile\u015fim kurmak i\u00e7in g\u00fc\u00e7l\u00fc k\u00fct\u00fcphanelere sahiptir. Veritaban\u0131 olarak ise, esneklik ve \u00f6l\u00e7eklenebilirlik sunan PostgreSQL gibi ili\u015fkisel bir veritaban\u0131 veya y\u00fcksek performansl\u0131 veri depolama i\u00e7in Redis gibi bir NoSQL veritaban\u0131 tercih edilebilir. Bu temel mimari, yapay zeka sohbetlerinden elde edilen verinin yap\u0131land\u0131r\u0131lm\u0131\u015f ve analiz edilebilir bir formatta saklanmas\u0131n\u0131 garanti eder.<\/p>\n<h2>Ad\u0131m Ad\u0131m Kurulum: Kendi AI Sohbet Kay\u0131t Sunucunuzu Olu\u015fturmak<\/h2>\n<p>Kendi AI sohbet kay\u0131t sunucunuzu olu\u015fturmak, d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcn\u00fczden daha kolay olabilir, ancak do\u011fru ara\u00e7lar\u0131 ve ad\u0131mlar\u0131 takip etmek \u00f6nemlidir. Bu b\u00f6l\u00fcmde, bu s\u00fcreci ad\u0131m ad\u0131m inceleyecek ve size kendi sisteminizi kurman\u0131z i\u00e7in bir yol haritas\u0131 sunaca\u011f\u0131m.<\/p>\n<h3>Gerekli Bile\u015fenler ve Ortam Haz\u0131rl\u0131\u011f\u0131<\/h3>\n<p>\u00d6ncelikle, projemiz i\u00e7in gerekli olan temel bile\u015fenleri ve geli\u015ftirme ortam\u0131n\u0131 haz\u0131rlamam\u0131z gerekiyor:<\/p>\n<p>1.  <strong>Bulut Sunucusu:<\/strong> Proxy sunucumuzu bar\u0131nd\u0131rmak i\u00e7in bir bulut sunucusuna ihtiyac\u0131m\u0131z var. AWS EC2, DigitalOcean Droplet, Google Cloud Compute Engine veya Azure Virtual Machines gibi servisler bu i\u015f i\u00e7in idealdir. Ben, maliyet etkinli\u011fi ve kullan\u0131m kolayl\u0131\u011f\u0131 nedeniyle DigitalOcean Droplet&#8217;i tercih ettim. Sunucu olarak Ubuntu 22.04 LTS tabanl\u0131 bir i\u015fletim sistemi se\u00e7mek, kurulum ve y\u00f6netim a\u00e7\u0131s\u0131ndan olduk\u00e7a yayg\u0131n ve desteklidir.<br \/>\n2.  <strong>Gerekli Yaz\u0131l\u0131mlar:<\/strong><br \/>\n    *   <strong>Python 3.x:<\/strong> Proxy sunucumuzun mant\u0131\u011f\u0131n\u0131 yazmak i\u00e7in Python&#8217;\u0131 kullanaca\u011f\u0131z. \u00c7o\u011fu Linux da\u011f\u0131t\u0131m\u0131nda Python 3 \u00f6n y\u00fckl\u00fc gelir, ancak g\u00fcncel s\u00fcr\u00fcm\u00fcn\u00fc (3.9 veya \u00fczeri) kullanman\u0131z \u00f6nerilir.<br \/>\n    *   <strong>pip:<\/strong> Python paket y\u00f6neticisi. Python ile birlikte kurulur.<br \/>\n    *   <strong>Sanal Ortam (Virtual Environment):<\/strong> Proje ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in Python&#8217;\u0131n sanal ortam \u00f6zelli\u011fini kullanmak en iyi uygulamad\u0131r. Bu, projenizin di\u011fer Python projeleriyle \u00e7ak\u0131\u015fmas\u0131n\u0131 engeller.<br \/>\n    *   <strong>Git:<\/strong> Kodunuzu versiyonlamak ve sunucuya da\u011f\u0131tmak i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n3.  <strong>Veritaban\u0131 Se\u00e7imi ve Kurulumu:<\/strong> Toplad\u0131\u011f\u0131m\u0131z sohbet verilerini kal\u0131c\u0131 olarak depolamak i\u00e7in bir veritaban\u0131na ihtiyac\u0131m\u0131z var.<br \/>\n    *   <strong>PostgreSQL:<\/strong> G\u00fcvenilirli\u011fi, esnekli\u011fi ve g\u00fc\u00e7l\u00fc sorgulama yetenekleri nedeniyle pop\u00fcler bir se\u00e7imdir.<br \/>\n        *   Kurulum i\u00e7in sunucunuzda a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz:<\/p>\n<div class=\"code-container\">\n<pre><code>\n                sudo apt update\n                sudo apt install postgresql postgresql-contrib\n                sudo systemctl start postgresql\n                sudo systemctl enable postgresql\n                sudo -u postgres psql -c \"CREATE USER myuser WITH PASSWORD 'mypassword';\"\n                sudo -u postgres psql -c \"CREATE DATABASE aichat_logs OWNER myuser;\"\n              <\/pre>\n<p><\/code>\n            <\/div>\n<p>        *   <code>myuser<\/code> ve <code>mypassword<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi g\u00fcvenli bilgilerinizle de\u011fi\u015ftirmeyi unutmay\u0131n.<br \/>\n    *   <strong>Veritaban\u0131 \u015eemas\u0131:<\/strong> Basit bir tablo yap\u0131s\u0131 tasarlamam\u0131z gerekecek. \u00d6rnek bir <code>conversations<\/code> tablosu \u015f\u00f6yle olabilir:<\/p>\n<div class=\"code-container\">\n<pre><code>\n            CREATE TABLE conversations (\n                id SERIAL PRIMARY KEY,\n                session_id VARCHAR(255) NOT NULL,\n                user_id VARCHAR(255) NOT NULL,\n                timestamp TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,\n                direction VARCHAR(10) NOT NULL, -- 'in' (request) or 'out' (response)\n                message_content TEXT NOT NULL,\n                ai_model VARCHAR(100),\n                response_time_ms INTEGER,\n                token_count INTEGER,\n                metadata JSONB -- Ek veriler i\u00e7in\n            );\n          <\/pre>\n<p><\/code>\n        <\/div>\n<p>        Bu \u015fema, her mesaj\u0131 (hem kullan\u0131c\u0131dan hem AI'dan) ayr\u0131 bir kay\u0131t olarak tutar ve <code>session_id<\/code> ile ili\u015fkilendirir. <code>direction<\/code> alan\u0131 mesaj\u0131n y\u00f6n\u00fcn\u00fc belirtir.<\/p>\n<h3>Proxy Sunucusunun Geli\u015ftirilmesi<\/h3>\n<p>Proxy sunucumuzun kalbi, gelen HTTP isteklerini yakalayan, i\u015fleyen ve hedef AI servisine ileten bir web uygulamas\u0131d\u0131r. Python tabanl\u0131 Flask veya FastAPI gibi mikro web framework'ler bu i\u015f i\u00e7in olduk\u00e7a uygundur. Ben, basitli\u011fi ve h\u0131zl\u0131 geli\u015ftirme imkan\u0131 nedeniyle Flask'\u0131 tercih ettim.<\/p>\n<p>1.  <strong>Proje Yap\u0131s\u0131:<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>\n        ai_proxy_logger\/\n        \u251c\u2500\u2500 app.py\n        \u251c\u2500\u2500 requirements.txt\n        \u2514\u2500\u2500 config.py (iste\u011fe ba\u011fl\u0131)\n      <\/pre>\n<p><\/code>\n    <\/div>\n<p>2.  <strong><code>requirements.txt<\/code> i\u00e7eri\u011fi:<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code>\n        Flask\n        requests\n        psycopg2-binary # PostgreSQL ba\u011flant\u0131s\u0131 i\u00e7in\n      <\/pre>\n<p><\/code>\n    <\/div>\n<p>    Bu ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemek i\u00e7in: <code>pip install -r requirements.txt<\/code><br \/>\n3.  <strong><code>app.py<\/code> i\u00e7eri\u011fi (Basit bir Flask proxy \u00f6rne\u011fi):<\/strong><\/p>\n<div class=\"code-container\">\n<pre><code><br \/>\n        from flask import Flask, request, jsonify<br \/>\n        import requests<br \/>\n        import datetime<br \/>\n        import psycopg2<br \/>\n        import os # Ortam de\u011fi\u015fkenleri i\u00e7in<\/p>\n<p>        app = Flask(__name__)<\/p>\n<p>        # Ortam de\u011fi\u015fkenlerinden AI servis URL'i ve DB ba\u011flant\u0131 bilgileri al\u0131n\u0131r<br \/>\n        AI_SERVICE_URL = os.getenv('AI_SERVICE_URL', \"http:\/\/localhost:5001\/ai-api\")<br \/>\n        DB_HOST = os.getenv('DB_HOST', 'localhost')<br \/>\n        DB_NAME = os.getenv('DB_NAME', 'aichat_logs')<br \/>\n        DB_USER = os.getenv('DB_USER', 'myuser')<br \/>\n        DB_PASSWORD = os.getenv('DB_PASSWORD', 'mypassword')<\/p>\n<p>        def get_db_connection():<br \/>\n            conn = psycopg2.connect(host=DB_HOST, database=DB_NAME, user=DB_USER, password=DB_PASSWORD)<br \/>\n            return conn<\/p>\n<p>        @app.route('\/chat', methods=['POST'])<br \/>\n        def chat_proxy():<br \/>\n            start_time = datetime.datetime.now()<br \/>\n            user_message = request.json.get('message')<br \/>\n            user_id = request.json.get('user_id', 'anonymous')<br \/>\n            session_id = request.json.get('session_id', 'default_session')<br \/>\n            ai_model = request.json.get('ai_model', 'unknown')<\/p>\n<p>            # Kullan\u0131c\u0131 mesaj\u0131n\u0131 kaydet<br \/>\n            try:<br \/>\n                conn = get_db_connection()<br \/>\n                cur = conn.cursor()<br \/>\n                cur.execute(<br \/>\n                    \"INSERT INTO conversations (session_id, user_id, direction, message_content, ai_model) VALUES (%s, %s, %s, %s, %s);\",<br \/>\n                    (session_id, user_id, 'in', user_message, ai_model)<br \/>\n                )<br \/>\n                conn.commit()<br \/>\n                cur.close()<br \/>\n                conn.close()<br \/>\n            except Exception as e:<br \/>\n                print(f\"Kullan\u0131c\u0131 mesaj\u0131 DB'ye kaydedilirken hata olu\u015ftu: {e}\")<\/p>\n<p>            ai_message = \"\u00dczg\u00fcn\u00fcm, \u015fu an hizmet veremiyorum.\" # Varsay\u0131lan hata mesaj\u0131<\/p>\n<p>            # AI servisine iste\u011fi ilet<br \/>\n            try:<br \/>\n                ai_response_obj = requests.post(AI_SERVICE_URL, json={'message': user_message, 'user_id': user_id, 'session_id': session_id})<br \/>\n                ai_response_obj.raise_for_status() # HTTP hata kodu durumunda istisna f\u0131rlat<br \/>\n                ai_data = ai_response_obj.json()<br \/>\n                ai_message = ai_data.get('response', 'Yan\u0131t al\u0131namad\u0131.')<br \/>\n            except requests.exceptions.RequestException as e:<br \/>\n                print(f\"AI servisine ba\u011flan\u0131rken hata olu\u015ftu: {e}\")<br \/>\n            except Exception as e:<br \/>\n                print(f\"AI yan\u0131t\u0131n\u0131 i\u015flerken hata olu\u015ftu: {e}\")<\/p>\n<p>            end_time = datetime.datetime.now()<br \/>\n            response_time_ms = int((end_time - start_time).total_seconds() * 1000)<\/p>\n<p>            # AI yan\u0131t\u0131n\u0131 kaydet<br \/>\n            try:<br \/>\n                conn = get_db_connection()<br \/>\n                cur = conn.cursor()<br \/>\n                cur.execute(<br \/>\n                    \"INSERT INTO conversations (session_id, user_id, direction, message_content, ai_model, response_time_ms) VALUES (%s, %s, %s, %s, %s, %s);\",<br \/>\n                    (session_id, user_id, '<\/p>\n","protected":false},"excerpt":{"rendered":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim Yapay zeka modelleriyle olan etkile\u015fimlerimiz, g\u00fcnl\u00fck hayat\u0131m\u0131z\u0131n giderek daha ayr\u0131lmaz bir par\u00e7as\u0131 haline geliyor.","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-41758","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>Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim - 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\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim\" \/>\n<meta property=\"og:description\" content=\"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim Yapay zeka modelleriyle olan etkile\u015fimlerimiz, g\u00fcnl\u00fck hayat\u0131m\u0131z\u0131n giderek daha ayr\u0131lmaz bir par\u00e7as\u0131 haline geliyor.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-13T18:04:28+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=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim\",\"datePublished\":\"2026-05-13T18:04:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\"},\"wordCount\":2408,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\",\"name\":\"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-05-13T18:04:28+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim\"}]},{\"@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":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim - 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\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/","og_locale":"tr_TR","og_type":"article","og_title":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim","og_description":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim Yapay zeka modelleriyle olan etkile\u015fimlerimiz, g\u00fcnl\u00fck hayat\u0131m\u0131z\u0131n giderek daha ayr\u0131lmaz bir par\u00e7as\u0131 haline geliyor.","og_url":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-05-13T18:04:28+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim","datePublished":"2026-05-13T18:04:28+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/"},"wordCount":2408,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/","url":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/","name":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-05-13T18:04:28+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/yapay-zeka-sohbetlerini-kaydetmek-icin-bir-mcp-sunucusu-kurdum-iste-ogrendiklerim\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Yapay Zeka Sohbetlerini Kaydetmek \u0130\u00e7in Bir MCP Sunucusu Kurdum: \u0130\u015fte \u00d6\u011frendiklerim"}]},{"@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\/41758","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=41758"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41758\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41758"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41758"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41758"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}