{"id":32685,"date":"2025-10-24T20:32:28","date_gmt":"2025-10-24T17:32:28","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/"},"modified":"2025-10-24T20:32:28","modified_gmt":"2025-10-24T17:32:28","slug":"dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/","title":{"rendered":"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)"},"content":{"rendered":"<p><body><\/p>\n<p>Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir <strong>profil u\u00e7 noktas\u0131<\/strong> olan <code>GET \/me<\/code> rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API&#8217;siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.<\/p>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131lara \u00f6zelle\u015ftirilmi\u015f deneyimler sunma konusunda olduk\u00e7a iddial\u0131d\u0131r. Bir sosyal medya platformunda ana sayfan\u0131z\u0131 a\u00e7t\u0131\u011f\u0131n\u0131zda kendi g\u00f6nderilerinizi, bildirimlerinizi veya \u00f6nerilen arkada\u015flar\u0131n\u0131z\u0131 g\u00f6r\u00fcrs\u00fcn\u00fcz. Bir e-ticaret sitesinde ise ge\u00e7mi\u015f sipari\u015flerinizi, favori \u00fcr\u00fcnlerinizi veya kay\u0131tl\u0131 adreslerinizi listelersiniz. T\u00fcm bu ki\u015fiselle\u015ftirilmi\u015f verilerin arkas\u0131nda yatan temel mekanizma, genellikle kullan\u0131c\u0131n\u0131n kendi bilgilerine eri\u015febildi\u011fi bir profil u\u00e7 noktas\u0131d\u0131r. \u0130\u015fte tam da bu noktada <code>GET \/me<\/code> rotas\u0131 devreye girer. Bu dinamik profil u\u00e7 noktas\u0131, kullan\u0131c\u0131 odakl\u0131 uygulamalar i\u00e7in vazge\u00e7ilmez bir yap\u0131 ta\u015f\u0131d\u0131r.<\/p>\n<p><code>GET \/me<\/code>, kimli\u011fi do\u011frulanm\u0131\u015f bir kullan\u0131c\u0131n\u0131n, genellikle bir oturum belirteci (token) arac\u0131l\u0131\u011f\u0131yla kendi profil verilerine eri\u015fmesini sa\u011flayan standart bir RESTful API kal\u0131b\u0131d\u0131r. Bu u\u00e7 nokta, uygulaman\u0131z\u0131n bir\u00e7ok farkl\u0131 b\u00f6l\u00fcm\u00fc i\u00e7in tek bir kaynak g\u00f6revi g\u00f6r\u00fcr. \u00d6rne\u011fin, bir mobil uygulaman\u0131n ana ekran\u0131nda kullan\u0131c\u0131n\u0131n ad\u0131n\u0131, profil foto\u011fraf\u0131n\u0131 ve ki\u015fisel istatistiklerini g\u00f6stermek istedi\u011finizde, tek yapman\u0131z gereken <code>\/me<\/code> adresine bir istek g\u00f6ndermektir. Bu yakla\u015f\u0131m, istemci taraf\u0131ndaki geli\u015ftiriciler i\u00e7in i\u015fleri b\u00fcy\u00fck \u00f6l\u00e7\u00fcde basitle\u015ftirir, \u00e7\u00fcnk\u00fc her seferinde kullan\u0131c\u0131 ID&#8217;sini manuel olarak y\u00f6netmek veya belirli bir kullan\u0131c\u0131ya ait rotay\u0131 aramak zorunda kalmazlar. Bunun yerine, &#8220;\u015fu anda kimli\u011fi do\u011frulanm\u0131\u015f kullan\u0131c\u0131 benim; bana kendi bilgilerimi ver&#8221; mant\u0131\u011f\u0131yla hareket edilir. Ayr\u0131ca, bu yakla\u015f\u0131m, uygulaman\u0131n kod taban\u0131n\u0131 daha okunabilir ve s\u00fcrd\u00fcr\u00fclebilir hale getirir, \u00e7\u00fcnk\u00fc kullan\u0131c\u0131ya \u00f6zg\u00fc verilere eri\u015fim i\u00e7in tek ve merkezi bir y\u00f6ntem sa\u011flan\u0131r.<\/p>\n<p>Sadece basit profil bilgilerini almakla kalmaz, <code>\/me<\/code> u\u00e7 noktas\u0131 daha karma\u015f\u0131k senaryolar i\u00e7in de bir kap\u0131 aralar. Kullan\u0131c\u0131n\u0131n ayarlar\u0131, bildirim tercihleri, sat\u0131n alma ge\u00e7mi\u015fi, hatta sistemdeki yetkileri gibi pek \u00e7ok farkl\u0131 veri t\u00fcr\u00fc bu tek u\u00e7 nokta \u00fczerinden sunulabilir. Ancak bu, tek bir yan\u0131tta her \u015feyi geri g\u00f6ndermek gerekti\u011fi anlam\u0131na gelmez; alt kaynaklar veya belirli alanlar i\u00e7in filtreleme parametreleri kullan\u0131labilir. G\u00fcvenlik a\u00e7\u0131s\u0131ndan da bu u\u00e7 nokta kritik bir \u00f6neme sahiptir. Kullan\u0131c\u0131lar yaln\u0131zca kendi verilerine eri\u015febilir, ba\u015fka bir kullan\u0131c\u0131n\u0131n bilgilerine izinsiz eri\u015fim sa\u011flamazlar. Bu durum, do\u011fru kimlik do\u011frulama (authentication) ve yetkilendirme (authorization) mekanizmalar\u0131yla desteklenmelidir. B\u00f6ylece, kullan\u0131c\u0131lar\u0131n gizlili\u011fi ve veri b\u00fct\u00fcnl\u00fc\u011f\u00fc korunmu\u015f olur. Bu nedenle, <code>\/me<\/code> rotas\u0131n\u0131n geli\u015ftirilmesi, modern web uygulamalar\u0131n\u0131n temel bir bile\u015feni olarak kabul edilir ve kullan\u0131c\u0131 deneyiminin kalitesini do\u011frudan etkiler.<\/p>\n<p>Bu makalede, Node.js ve Express kullanarak b\u00f6ylesine dinamik ve g\u00fcvenli bir <code>\/me<\/code> u\u00e7 noktas\u0131n\u0131 nas\u0131l olu\u015fturaca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. \u00dcstelik, s\u0131k\u0131c\u0131 olmamas\u0131 i\u00e7in bu profillere rastgele ve e\u011flenceli kedi ger\u00e7eklerini de entegre edece\u011fiz! Bu sayede, hem pratik bir beceri kazanacak hem de API entegrasyonunun inceliklerini anlam\u0131\u015f olacaks\u0131n\u0131z. Ger\u00e7ek d\u00fcnya senaryolar\u0131nda kar\u015f\u0131la\u015fabilece\u011finiz zorluklar\u0131 ele alarak, sa\u011flam ve \u00f6l\u00e7eklenebilir bir API tasarlama konusunda derinlemesine bilgi edineceksiniz. K\u0131sacas\u0131, <code>GET \/me<\/code> sadece bir API rotas\u0131 de\u011fil, kullan\u0131c\u0131 odakl\u0131 web uygulamalar\u0131n\u0131n vazge\u00e7ilmez bir yap\u0131 ta\u015f\u0131d\u0131r. \u015eimdi gelin, bu heyecan verici yolculu\u011fa \u00e7\u0131kal\u0131m ve kendi dinamik profil u\u00e7 noktam\u0131z\u0131 in\u015fa edelim.<\/p>\n<h2>Node.js, Express ve API Geli\u015ftirme Temelleri: \/me Rotas\u0131n\u0131n Yap\u0131 Ta\u015flar\u0131 Nelerdir?<\/h2>\n<p>Dinamik bir <code>\/me<\/code> u\u00e7 noktas\u0131 in\u015fa etmeye ba\u015flamadan \u00f6nce, temel ara\u00e7lar\u0131m\u0131z olan Node.js ve Express&#8217;i yak\u0131ndan tan\u0131mak kritik \u00f6nem ta\u015f\u0131r. Bu b\u00f6l\u00fcmde, bu teknolojilerin ne oldu\u011funu, neden bu kadar pop\u00fcler olduklar\u0131n\u0131 ve projemizin temelini nas\u0131l ataca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde ele alaca\u011f\u0131z. Bir in\u015faat projesinin sa\u011flam bir temel gerektirdi\u011fi gibi, API geli\u015ftirmede de do\u011fru ara\u00e7lar\u0131 ve temelleri anlamak ba\u015far\u0131n\u0131n anahtar\u0131d\u0131r. Bu sayede, karma\u015f\u0131k sistemleri daha iyi anlayacak ve kendi projelerinizde uygulayabileceksiniz.<\/p>\n<p><strong>Node.js Nedir ve Neden Tercih Ediyoruz?<\/strong> Node.js, Google Chrome&#8217;un V8 JavaScript motoru \u00fczerine kurulu, sunucu taraf\u0131 JavaScript \u00e7al\u0131\u015fma zaman\u0131 ortam\u0131d\u0131r. Geli\u015ftiricilerin JavaScript&#8217;i taray\u0131c\u0131 d\u0131\u015f\u0131nda, sunucu taraf\u0131nda, komut sat\u0131r\u0131 ara\u00e7lar\u0131nda ve hatta masa\u00fcst\u00fc uygulamalar\u0131nda kullanmalar\u0131n\u0131 sa\u011flar. Node.js&#8217;in en b\u00fcy\u00fck avantajlar\u0131ndan biri, asenkron, olay tabanl\u0131 ve engellemeyen (non-blocking) G\/\u00c7 (Input\/Output) modelidir. Bu \u00f6zellikler, onu ger\u00e7ek zamanl\u0131 uygulamalar, veri ak\u0131\u015f\u0131 ve y\u00fcksek performans gerektiren API&#8217;ler i\u00e7in ideal k\u0131lar. \u00d6rne\u011fin, binlerce e\u015fzamanl\u0131 ba\u011flant\u0131y\u0131 sorunsuz bir \u015fekilde y\u00f6netebilir, bu da dinamik bir profil u\u00e7 noktas\u0131n\u0131n performans\u0131 i\u00e7in olduk\u00e7a \u00f6nemlidir. Ayr\u0131ca, JavaScript&#8217;i hem frontend hem de backend&#8217;de kullanabilmek, tam y\u0131\u011f\u0131n (full-stack) geli\u015ftiriciler i\u00e7in \u00f6\u011frenme e\u011frisini azalt\u0131r ve daha tutarl\u0131 bir geli\u015ftirme deneyimi sunar. Bu entegrasyon, projelerin daha h\u0131zl\u0131 ilerlemesini ve geli\u015ftiricilerin tek bir dil \u00fczerinde uzmanla\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Express.js&#8217;in G\u00fcc\u00fc: Node.js i\u00e7in Bir Web \u00c7er\u00e7evesi<\/strong> Express.js, Node.js i\u00e7in minimalist ve esnek bir web uygulama \u00e7er\u00e7evesidir. Node.js&#8217;in ham HTTP mod\u00fcl\u00fc \u00fczerinde \u00e7al\u0131\u015f\u0131r ve API&#8217;ler ile web uygulamalar\u0131 olu\u015fturmay\u0131 \u00e7ok daha kolay ve h\u0131zl\u0131 hale getirir. Rotalama (routing), middleware entegrasyonu, \u015fablon motoru deste\u011fi gibi temel web geli\u015ftirme g\u00f6revlerini basitle\u015ftiren g\u00fc\u00e7l\u00fc bir dizi \u00f6zellik sunar. Express sayesinde, bir URL iste\u011fini (\u00f6rne\u011fin <code>\/me<\/code>) belirli bir i\u015flevle (kullan\u0131c\u0131 bilgilerini getirme) e\u015fle\u015ftirmek \u00e7ocuk oyunca\u011f\u0131d\u0131r. Middleware katmanlar\u0131, iste\u011fin i\u015flenmeden \u00f6nce veya sonra belirli g\u00f6revlerin (kimlik do\u011frulama, loglama, hata y\u00f6netimi) y\u00fcr\u00fct\u00fclmesini sa\u011flar. Bu, mod\u00fcler ve d\u00fczenli bir kod yap\u0131s\u0131 olu\u015fturmam\u0131za olanak tan\u0131r ve uygulaman\u0131n bak\u0131m\u0131n\u0131 kolayla\u015ft\u0131r\u0131r. Express&#8217;in hafif yap\u0131s\u0131, projenizin gereksinimlerine g\u00f6re esnek bir \u015fekilde geni\u015fletilmesine de imkan tan\u0131r, bu da onu bir\u00e7ok farkl\u0131 proje t\u00fcr\u00fc i\u00e7in ideal bir se\u00e7im haline getirir.<\/p>\n<h3>Proje Kurulumu ve \u0130lk Ad\u0131mlar: Kendi Sunucumuzu Nas\u0131l Ba\u015flat\u0131r\u0131z?<\/h3>\n<p>\u015eimdi gelin, bu g\u00fc\u00e7l\u00fc ara\u00e7lar\u0131 kullanarak projemizin temelini atal\u0131m. \u0130lk olarak, Node.js ve npm&#8217;in (Node Package Manager) sisteminizde y\u00fckl\u00fc oldu\u011fundan emin olun. Daha sonra basit bir Express projesi ba\u015flatabiliriz:<\/p>\n<pre><code class=\"language-bash\">\nnpm init -y\nnpm install express axios dotenv\n    <\/pre>\n<p><\/code><\/p>\n<p><code>npm init -y<\/code> komutu, varsay\u0131lan ayarlarla bir <code>package.json<\/code> dosyas\u0131 olu\u015fturur. <code>npm install express axios dotenv<\/code> ise Express \u00e7er\u00e7evesini, harici API'lere istek atmak i\u00e7in <code>axios<\/code> k\u00fct\u00fcphanesini ve ortam de\u011fi\u015fkenlerini y\u00f6netmek i\u00e7in <code>dotenv<\/code> paketini y\u00fckler. Bu paketler, API geli\u015ftirme s\u00fcrecimizde bize b\u00fcy\u00fck kolayl\u0131klar sa\u011flayacak ve uygulaman\u0131n farkl\u0131 katmanlar\u0131n\u0131 sorunsuz bir \u015fekilde bir araya getirecektir. Art\u0131k ana uygulama dosyam\u0131z\u0131 (\u00f6rne\u011fin <code>app.js<\/code>) olu\u015fturabilir ve temel bir sunucu yap\u0131land\u0131rmas\u0131 yapabiliriz:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js\nrequire('dotenv').config(); \/\/ Ortam de\u011fi\u015fkenlerini y\u00fckle\n\nconst express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\n\/\/ JSON body'leri ayr\u0131\u015ft\u0131rmak i\u00e7in middleware\napp.use(express.json());\n\n\/\/ Basit bir test rotas\u0131\napp.get('\/', (req, res) => {\n    res.send('API \u00e7al\u0131\u015f\u0131yor!');\n});\n\n\/\/ Sunucuyu ba\u015flat\napp.listen(PORT, () => {\n    console.log(<code>Sunucu http:\/\/localhost:${PORT} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu temel kurulumla, <code>GET \/<\/code> adresine yap\u0131lan isteklerde \"API \u00e7al\u0131\u015f\u0131yor!\" mesaj\u0131n\u0131 d\u00f6nd\u00fcren bir Express sunucumuz haz\u0131r hale gelir. <code>dotenv<\/code> kullan\u0131m\u0131, API anahtarlar\u0131 veya veritaban\u0131 ba\u011flant\u0131 dizeleri gibi hassas bilgileri koddan ayr\u0131 tutmam\u0131z\u0131 sa\u011flar; bu, geli\u015ftirme ve \u00fcretim ortamlar\u0131 aras\u0131nda kolayca ge\u00e7i\u015f yapabilmek i\u00e7in vazge\u00e7ilmez bir y\u00f6ntemdir. Ayr\u0131ca, bu yakla\u015f\u0131m g\u00fcvenli\u011fi art\u0131r\u0131r, \u00e7\u00fcnk\u00fc hassas veriler do\u011frudan kodun i\u00e7inde bulunmaz. Sonu\u00e7 olarak, bu b\u00f6l\u00fcmde Node.js ve Express'in temellerini anlam\u0131\u015f ve dinamik <code>\/me<\/code> u\u00e7 noktam\u0131z\u0131 olu\u015fturmak i\u00e7in sa\u011flam bir ba\u015flang\u0131\u00e7 yapm\u0131\u015f oluyoruz. Gelecek ad\u0131mlarda, bu temeli kimlik do\u011frulama ve ger\u00e7ek veri entegrasyonuyla nas\u0131l zenginle\u015ftirece\u011fimizi g\u00f6rece\u011fiz. Bu ilk ad\u0131mlar, daha karma\u015f\u0131k API'lerin kap\u0131s\u0131n\u0131 aralamaktad\u0131r.<\/p>\n<h2>Dinamik \/me U\u00e7 Noktas\u0131n\u0131 Olu\u015fturma: Kullan\u0131c\u0131 Bilgileri ve Kedi Ger\u00e7ekleri Nas\u0131l Birle\u015fir?<\/h2>\n<p>Art\u0131k Node.js ve Express temelini att\u0131\u011f\u0131m\u0131za g\u00f6re, projemizin kalbi olan dinamik <code>\/me<\/code> u\u00e7 noktas\u0131n\u0131 in\u015fa etmeye odaklanabiliriz. Bu b\u00f6l\u00fcmde, kullan\u0131c\u0131 kimli\u011fini do\u011frulayan bir middleware olu\u015fturacak, sahte kullan\u0131c\u0131 verilerini y\u00f6netecek ve hepsinden \u00f6nemlisi, her kullan\u0131c\u0131ya \u00f6zel bir \"kedi ger\u00e7e\u011fi\" ekleyerek API'mize e\u011flenceli bir dokunu\u015f kataca\u011f\u0131z. Unutmay\u0131n, iyi bir API sadece i\u015flevsel de\u011fil, ayn\u0131 zamanda bazen de keyifli olmal\u0131d\u0131r! Bu entegrasyon, API'nizin sadece veri sunan bir ara\u00e7 olmaktan \u00f6teye ge\u00e7mesini sa\u011flayacakt\u0131r.<\/p>\n<h3>Kimlik Do\u011frulama Middleware'i Geli\u015ftirme<\/h3>\n<p><code>GET \/me<\/code> u\u00e7 noktas\u0131n\u0131n en \u00f6nemli bile\u015feni, iste\u011fi yapan kullan\u0131c\u0131n\u0131n kimli\u011fini do\u011frulamakt\u0131r. Ger\u00e7ek bir uygulamada bu, genellikle bir JWT (JSON Web Token) veya oturum tabanl\u0131 bir mekanizma ile yap\u0131l\u0131r. Basitli\u011fin ad\u0131na, bu \u00f6rnekte iste\u011fin <code>Authorization<\/code> ba\u015fl\u0131\u011f\u0131nda belirli bir \"sahte\" token olup olmad\u0131\u011f\u0131n\u0131 kontrol eden bir middleware kullanaca\u011f\u0131z. E\u011fer token varsa, kullan\u0131c\u0131 kimli\u011fi do\u011frulanm\u0131\u015f say\u0131lacak ve istek objesine (<code>req<\/code>) bir <code>userId<\/code> eklenecektir. Bu, ger\u00e7ek d\u00fcnyadaki bir kimlik do\u011frulama sisteminin basitle\u015ftirilmi\u015f bir modelidir ve prensipleri anlamak i\u00e7in yeterlidir. Bu middleware, API'mizin g\u00fcvenli\u011fini sa\u011flaman\u0131n ilk ad\u0131m\u0131d\u0131r ve yetkisiz eri\u015fimi engeller.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ middlewares\/authMiddleware.js\nconst users = [\n    { id: 'user123', username: 'alice', email: 'alice@example.com', role: 'admin' },\n    { id: 'user456', username: 'bob', email: 'bob@example.com', role: 'user' },\n];\n\nconst authMiddleware = (req, res, next) => {\n    const authHeader = req.headers.authorization;\n\n    if (!authHeader || !authHeader.startsWith('Bearer ')) {\n        return res.status(401).json({ message: 'Kimlik do\u011frulama ba\u015far\u0131s\u0131z: Token eksik veya yanl\u0131\u015f bi\u00e7imde.' });\n    }\n\n    const token = authHeader.split(' ')[1]; \/\/ 'Bearer TOKEN' k\u0131sm\u0131ndan TOKEN'\u0131 al\n\n    \/\/ Basit bir sahte token kontrol\u00fc yapal\u0131m\n    \/\/ Ger\u00e7ek uygulamada bu bir JWT do\u011frulama veya veritaban\u0131 kontrol\u00fc olacakt\u0131r\n    if (token === 'mysecrettoken123') { \/\/ \u00d6rnek olarak sabit bir token\n        \/\/ Kimlik do\u011fruland\u0131ktan sonra, kullan\u0131c\u0131n\u0131n ID'sini request objesine ekliyoruz\n        \/\/ Ger\u00e7ekte bu token'dan \u00e7\u0131kar\u0131lan ID olacakt\u0131r.\n        req.userId = 'user123'; \/\/ \u00d6rnek kullan\u0131c\u0131 ID'si\n        next(); \/\/ Bir sonraki middleware'e veya rota handler'\u0131na ge\u00e7\n    } else if (token === 'anothersecrettoken') {\n        req.userId = 'user456';\n        next();\n    } else {\n        return res.status(403).json({ message: 'Kimlik do\u011frulama ba\u015far\u0131s\u0131z: Ge\u00e7ersiz token.' });\n    }\n};\n\nmodule.exports = authMiddleware;\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>authMiddleware<\/code>, her iste\u011fin kimlik do\u011frulama ba\u015fl\u0131\u011f\u0131n\u0131 kontrol eder. E\u011fer ge\u00e7erli bir token bulursa, <code>req.userId<\/code>'yi ayarlar ve iste\u011fi bir sonraki ad\u0131ma ge\u00e7irir. Aksi takdirde, bir hata yan\u0131t\u0131 d\u00f6nd\u00fcr\u00fcr. Bu sayede, <code>\/me<\/code> u\u00e7 noktam\u0131z sadece kimli\u011fi do\u011frulanm\u0131\u015f kullan\u0131c\u0131lara hizmet verecektir. Bu basit ama etkili mekanizma, API'nizin temel g\u00fcvenlik gereksinimlerini kar\u015f\u0131lamas\u0131n\u0131 sa\u011flar ve geli\u015ftirme s\u00fcrecinde \u00f6nemli bir ad\u0131md\u0131r.<\/p>\n<h3>\/me Rotas\u0131n\u0131 Olu\u015fturma ve Kedi Ger\u00e7eklerini Entegre Etme<\/h3>\n<p>\u015eimdi <code>app.js<\/code> dosyam\u0131za geri d\u00f6nerek bu middleware'i ve <code>\/me<\/code> rotas\u0131n\u0131 tan\u0131mlayal\u0131m. Kullan\u0131c\u0131n\u0131n kendi bilgilerini d\u00f6nd\u00fcrece\u011fiz ve harici bir API olan Cat Facts API'sinden rastgele bir kedi ger\u00e7e\u011fi \u00e7ekerek yan\u0131t\u0131m\u0131za ekleyece\u011fiz. Bu, harici servislerle nas\u0131l etkile\u015fim kuraca\u011f\u0131m\u0131za dair harika bir \u00f6rnektir ve API'nize dinamizm katman\u0131n basit bir yoludur. Bu entegrasyon, API'mizin sadece statik veriler sunmakla kalmay\u0131p, d\u0131\u015f kaynaklardan da bilgi \u00e7ekebilece\u011fini g\u00f6sterir.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ app.js (devam)\nconst axios = require('axios');\nconst authMiddleware = require('.\/middlewares\/authMiddleware');\n\n\/\/ Sahte kullan\u0131c\u0131 verileri (ger\u00e7ekte bir veritaban\u0131ndan gelir)\nconst users = [\n    { id: 'user123', username: 'alice', email: 'alice@example.com', role: 'admin' },\n    { id: 'user456', username: 'bob', email: 'bob@example.com', role: 'user' },\n];\n\n\/\/ \/me rotas\u0131\napp.get('\/me', authMiddleware, async (req, res) => {\n    try {\n        const userId = req.userId; \/\/ Kimli\u011fi do\u011frulanm\u0131\u015f kullan\u0131c\u0131n\u0131n ID'si\n        const user = users.find(u => u.id === userId);\n\n        if (!user) {\n            return res.status(404).json({ message: 'Kullan\u0131c\u0131 bulunamad\u0131.' });\n        }\n\n        \/\/ Cat Facts API'sinden bir ger\u00e7ek \u00e7ek\n        const catFactResponse = await axios.get('https:\/\/catfact.ninja\/fact');\n        const catFact = catFactResponse.data.fact;\n\n        \/\/ Kullan\u0131c\u0131 verileri ve kedi ger\u00e7e\u011fini birle\u015ftirerek yan\u0131t d\u00f6nd\u00fcr\n        res.status(200).json({\n            id: user.id,\n            username: user.username,\n            email: user.email,\n            role: user.role,\n            yourCatFact: catFact \/\/ E\u011flenceli ek\n        });\n\n    } catch (error) {\n        console.error('Kedi ger\u00e7e\u011fi al\u0131n\u0131rken hata olu\u015ftu veya \/me hatas\u0131:', error.message);\n        res.status(500).json({ message: 'Profil bilgileri al\u0131n\u0131rken bir hata olu\u015ftu.', error: error.message });\n    }\n});\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu kod blo\u011fu, <code>authMiddleware<\/code>'den ge\u00e7en bir iste\u011fi ele al\u0131r. <code>req.userId<\/code> \u00fczerinden kullan\u0131c\u0131n\u0131n ID'sini al\u0131r, sahte kullan\u0131c\u0131 dizimizden ilgili kullan\u0131c\u0131y\u0131 bulur ve ard\u0131ndan <code>axios<\/code> kullanarak Cat Facts API'sinden bir kedi ger\u00e7e\u011fi \u00e7eker. T\u00fcm bu bilgileri birle\u015ftirerek istemciye JSON format\u0131nda geri d\u00f6nd\u00fcr\u00fcr. Hata y\u00f6netimi de eklenmi\u015ftir, b\u00f6ylece harici API'ye eri\u015fimde sorun ya\u015fanmas\u0131 veya kullan\u0131c\u0131n\u0131n bulunamamas\u0131 gibi durumlar d\u00fczg\u00fcn bir \u015fekilde ele al\u0131n\u0131r. Bu dinamik yap\u0131 sayesinde, her <code>\/me<\/code> iste\u011fi ki\u015fiye \u00f6zel bilgilerle birlikte taze bir kedi ger\u00e7e\u011fi sunar. Bu, sadece bir ba\u015flang\u0131\u00e7; bu yap\u0131y\u0131 daha karma\u015f\u0131k veri modelleri ve daha fazla harici entegrasyonla geni\u015fletmek tamamen sizin elinizde. Bu sayede, kullan\u0131c\u0131lar\u0131n\u0131za daha zengin ve ki\u015fiselle\u015ftirilmi\u015f bir deneyim sunabilirsiniz.<\/p>\n<div class=\"expert-tip\">\n      Uzman \u0130pucu: Harici API istekleri zaman alabilir ve her istekte tekrarlanmas\u0131 performans\u0131 d\u00fc\u015f\u00fcrebilir. E\u011fer Cat Facts gibi nispeten statik verilerle \u00e7al\u0131\u015f\u0131yorsan\u0131z, yan\u0131tlar\u0131 belirli bir s\u00fcre i\u00e7in \u00f6nbelle\u011fe almak (caching) performans\u0131n\u0131z\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bir haf\u0131za i\u00e7i \u00f6nbellek (memory cache) veya Redis gibi harici bir \u00f6nbellekleme sistemi kullanmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz. Bu, \u00f6zellikle y\u00fcksek trafikli uygulamalarda yan\u0131t s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r.\n    <\/div>\n<h2>G\u00fcvenlik, Performans ve \u00d6l\u00e7eklenebilirlik: \/me U\u00e7 Noktam\u0131z\u0131 Nas\u0131l Sa\u011flamla\u015ft\u0131r\u0131r\u0131z?<\/h2>\n<p>Bir <code>\/me<\/code> u\u00e7 noktas\u0131n\u0131n i\u015flevselli\u011fi ne kadar \u00f6nemliyse, g\u00fcvenli\u011fi, performans\u0131 ve gelecekteki \u00f6l\u00e7eklenebilirli\u011fi de o kadar \u00f6nemlidir. \u00d6zellikle kullan\u0131c\u0131ya ait hassas verilerin sunuldu\u011fu bu t\u00fcr u\u00e7 noktalar, k\u00f6t\u00fc niyetli sald\u0131r\u0131lara kar\u015f\u0131 iyi bir \u015fekilde korunmal\u0131 ve yo\u011fun y\u00fcklere dayanabilecek \u015fekilde tasarlanmal\u0131d\u0131r. Bu b\u00f6l\u00fcmde, projemizin bu kritik y\u00f6nlerini ele alaca\u011f\u0131z ve ger\u00e7ek d\u00fcnya senaryolar\u0131ndan \u00f6rneklerle g\u00fc\u00e7lendirece\u011fiz. Sa\u011flam bir API, sadece bug\u00fcn de\u011fil, yar\u0131n da sorunsuz \u00e7al\u0131\u015fmaya devam etmelidir.<\/p>\n<h3>Kimlik Do\u011frulama ve Yetkilendirme Mekanizmalar\u0131<\/h3>\n<p>Daha \u00f6nce basit bir token kontrol\u00fc kulland\u0131k; ancak ger\u00e7ek bir \u00fcretim ortam\u0131nda daha sa\u011flam y\u00f6ntemlere ihtiyac\u0131m\u0131z var. <strong>JSON Web Token (JWT)<\/strong>, API tabanl\u0131 kimlik do\u011frulama i\u00e7in end\u00fcstri standard\u0131 haline gelmi\u015ftir. Kullan\u0131c\u0131n\u0131n kimli\u011fi do\u011fruland\u0131ktan sonra sunucu taraf\u0131ndan imzalanm\u0131\u015f bir JWT olu\u015fturulur ve istemciye g\u00f6nderilir. \u0130stemci, sonraki her istekte bu token'\u0131 <code>Authorization<\/code> ba\u015fl\u0131\u011f\u0131nda sunar. Sunucu, token'\u0131n ge\u00e7erlili\u011fini ve imzas\u0131n\u0131 do\u011frulayarak iste\u011fi yapan kullan\u0131c\u0131n\u0131n kimli\u011fini g\u00fcvenli bir \u015fekilde tespit eder. Bu, sunucu taraf\u0131nda ek bir veritaban\u0131 sorgusu gerektirmedi\u011fi i\u00e7in performans avantaj\u0131 da sa\u011flar.<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ Ger\u00e7ek bir JWT kontrol\u00fc nas\u0131l g\u00f6r\u00fcnebilir (middleware i\u00e7inde)\nconst jwt = require('jsonwebtoken'); \/\/ npm install jsonwebtoken\n\nconst verifyToken = (req, res, next) => {\n    const authHeader = req.headers.authorization;\n    if (!authHeader || !authHeader.startsWith('Bearer ')) {\n        return res.status(401).json({ message: 'Eri\u015fim reddedildi: Token eksik.' });\n    }\n    const token = authHeader.split(' ')[1];\n    try {\n        const decoded = jwt.verify(token, process.env.JWT_SECRET);\n        req.userId = decoded.id; \/\/ Token'dan kullan\u0131c\u0131 ID'sini \u00e7\u0131kar\n        req.userRole = decoded.role; \/\/ Token'dan kullan\u0131c\u0131 rol\u00fcn\u00fc \u00e7\u0131kar (yetkilendirme i\u00e7in)\n        next();\n    } catch (error) {\n        return res.status(403).json({ message: 'Eri\u015fim reddedildi: Ge\u00e7ersiz token.' });\n    }\n};\nmodule.exports = verifyToken;\n    <\/pre>\n<p><\/code><\/p>\n<p><strong>Yetkilendirme (Authorization)<\/strong> ise kimli\u011fi do\u011frulanm\u0131\u015f bir kullan\u0131c\u0131n\u0131n belirli bir kayna\u011fa eri\u015fim veya belirli bir eylemi ger\u00e7ekle\u015ftirme iznine sahip olup olmad\u0131\u011f\u0131n\u0131 belirler. \u00d6rne\u011fin, bir kullan\u0131c\u0131n\u0131n sadece kendi profilini g\u00fcncellemesine izin verilirken, bir y\u00f6neticinin t\u00fcm kullan\u0131c\u0131 profillerini g\u00f6rebilmesi gibi. <code>\/me<\/code> u\u00e7 noktas\u0131nda genellikle yetkilendirmeye ihtiya\u00e7 duyulmaz \u00e7\u00fcnk\u00fc kullan\u0131c\u0131 zaten kendi bilgilerine eri\u015fiyordur. Ancak, e\u011fer <code>\/me<\/code> alt\u0131nda hassas bir alt kaynak (\u00f6rne\u011fin <code>\/me\/settings\/billing<\/code>) olsayd\u0131, o zaman kullan\u0131c\u0131n\u0131n \"\u00f6deme bilgilerini g\u00f6rme\" yetkisine sahip olup olmad\u0131\u011f\u0131n\u0131 kontrol etmemiz gerekebilirdi. Bu, uygulamam\u0131z\u0131n farkl\u0131 kullan\u0131c\u0131 rolleri aras\u0131nda eri\u015fim kontrol\u00fcn\u00fc sa\u011flamak i\u00e7in temel bir g\u00fcvenlik katman\u0131d\u0131r.<\/p>\n<h3>Performans Optimizasyonu ve \u00d6l\u00e7eklenebilirlik<\/h3>\n<p>Y\u00fcksek trafikli uygulamalarda, <code>\/me<\/code> gibi s\u0131k kullan\u0131lan bir u\u00e7 noktan\u0131n h\u0131zl\u0131 yan\u0131t vermesi kritik \u00f6neme sahiptir. Performans sorunlar\u0131 kullan\u0131c\u0131 deneyimini do\u011frudan etkiler ve uygulaman\u0131z\u0131n itibar\u0131n\u0131 zedeler. A\u015fa\u011f\u0131daki stratejilerle performans\u0131n\u0131z\u0131 art\u0131rabiliriz:<\/p>\n<ol>\n<li><strong>\u00d6nbellekleme (Caching):<\/strong> \u00d6zellikle de\u011fi\u015fmeyen veya yava\u015f de\u011fi\u015fen veriler i\u00e7in \u00f6nbellekleme kullanmak harikalar yarat\u0131r. Cat Facts API'sinden \u00e7ekti\u011fimiz kedi ger\u00e7ekleri buna iyi bir \u00f6rnektir. Her istekte yeni bir ger\u00e7e\u011fi almak yerine, belirli bir s\u00fcre i\u00e7in (\u00f6rne\u011fin 1 saat) \u00e7ekilen ger\u00e7ekleri sunucuda veya bir Redis \u00f6nbelle\u011finde tutabiliriz. B\u00f6ylece harici API'ye yap\u0131lan istek say\u0131s\u0131 azal\u0131r, yan\u0131t s\u00fcreleri k\u0131sal\u0131r.<\/li>\n<li><strong>Veritaban\u0131 Sorgu Optimizasyonu:<\/strong> Kullan\u0131c\u0131 verilerini bir veritaban\u0131ndan \u00e7ekiyorsak, sorgular\u0131n h\u0131zl\u0131 oldu\u011fundan emin olmal\u0131y\u0131z. \u0130ndeksleme, uygun sorgu planlar\u0131 ve gerekti\u011finde ORM (Object-Relational Mapping) kullan\u0131m\u0131n\u0131 dikkatlice de\u011ferlendirmek \u00f6nemlidir. B\u00fcy\u00fck veri k\u00fcmeleriyle \u00e7al\u0131\u015f\u0131rken, sorgu optimizasyonu performanstaki darbo\u011fazlar\u0131 ortadan kald\u0131rabilir.<\/li>\n<li><strong>Oran S\u0131n\u0131rlama (Rate Limiting):<\/strong> DDoS sald\u0131r\u0131lar\u0131na veya k\u00f6t\u00fc niyetli botlara kar\u015f\u0131 koruma sa\u011flamak i\u00e7in oran s\u0131n\u0131rlama kullan\u0131n. Bir kullan\u0131c\u0131n\u0131n veya IP adresinin belirli bir zaman diliminde yapabilece\u011fi istek say\u0131s\u0131n\u0131 s\u0131n\u0131rlamak, sunucunuzun a\u015f\u0131r\u0131 y\u00fcklenmesini \u00f6nler. <code>express-rate-limit<\/code> gibi middleware'ler bu konuda size yard\u0131mc\u0131 olabilir.<\/li>\n<li><strong>Asenkron \u0130\u015flemler:<\/strong> Node.js do\u011fas\u0131 gere\u011fi asenkrondur. B\u00fcy\u00fck veya uzun s\u00fcren i\u015flemleri (\u00f6rne\u011fin, resim i\u015fleme, karma\u015f\u0131k raporlama) ana i\u015f par\u00e7ac\u0131\u011f\u0131ndan ay\u0131rarak arka plan g\u00f6revleri olarak y\u00fcr\u00fctmek, API yan\u0131t s\u00fcrelerini etkilememesini sa\u011flar. Bu, RabbitMQ veya Kafka gibi mesaj kuyruklar\u0131 ile yap\u0131labilir.<\/li>\n<\/ol>\n<h3>Vaka Analizi: B\u00fcy\u00fck Bir Sosyal Uygulamada \/me Kullan\u0131m\u0131<\/h3>\n<p>Bir an i\u00e7in Instagram gibi b\u00fcy\u00fck bir sosyal medya uygulamas\u0131n\u0131 d\u00fc\u015f\u00fcn\u00fcn. Kullan\u0131c\u0131 uygulamay\u0131 a\u00e7t\u0131\u011f\u0131nda, ana sayfa g\u00f6nderileri, profil foto\u011fraf\u0131, takip\u00e7i say\u0131s\u0131, yeni bildirimler ve ki\u015fiselle\u015ftirilmi\u015f hikayeler gibi bir\u00e7ok verinin h\u0131zl\u0131ca y\u00fcklenmesi gerekir. Bu verilerin b\u00fcy\u00fck bir k\u0131sm\u0131, asl\u0131nda kullan\u0131c\u0131n\u0131n kendi profilinden t\u00fcretilir. Instagram'\u0131n <code>\/me<\/code> veya benzeri bir u\u00e7 noktas\u0131, muhtemelen a\u015fa\u011f\u0131daki gibi bilgileri bir araya getirir:<\/p>\n<ul>\n<li>Kullan\u0131c\u0131 ID'si, kullan\u0131c\u0131 ad\u0131, profil foto\u011fraf\u0131 URL'si<\/li>\n<li>Takip\u00e7i ve takip edilen say\u0131s\u0131<\/li>\n<li>Okunmam\u0131\u015f bildirim say\u0131s\u0131<\/li>\n<li>Ki\u015fiselle\u015ftirilmi\u015f i\u00e7erik ak\u0131\u015f\u0131 i\u00e7in parametreler<\/li>\n<li>Hesap ayarlar\u0131 ve gizlilik tercihleri<\/li>\n<\/ul>\n<p>B\u00f6ylesine kapsaml\u0131 bir u\u00e7 noktan\u0131n performans\u0131, bir\u00e7ok mikroservisten veri \u00e7ekmeyi gerektirebilir. \u00d6rne\u011fin, profil verileri bir servisten, bildirimler ba\u015fka bir servisten, takip\u00e7i bilgileri ise farkl\u0131 bir servisten gelebilir. Bu senaryoda, API Gateway desenleri veya GraphQL gibi teknolojiler, istemcinin tek bir istekte birden fazla kaynaktan veri almas\u0131n\u0131 sa\u011flayarak yan\u0131t s\u00fcrelerini optimize edebilir. Ayr\u0131ca, sunucu taraf\u0131nda veri birle\u015ftirme ve \u00f6nbellekleme mekanizmalar\u0131, kullan\u0131c\u0131 deneyimini p\u00fcr\u00fczs\u00fcz hale getirmek i\u00e7in vazge\u00e7ilmezdir. K\u0131sacas\u0131, <code>\/me<\/code> u\u00e7 noktas\u0131 sadece bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r; arkas\u0131nda sa\u011flam bir g\u00fcvenlik ve performans m\u00fchendisli\u011fi yatar. B\u00fcy\u00fck \u00f6l\u00e7ekli uygulamalarda, bu u\u00e7 noktan\u0131n tasar\u0131m\u0131 ve optimizasyonu, uygulaman\u0131n genel performans\u0131 ve kullan\u0131c\u0131 memnuniyeti \u00fczerinde do\u011frudan bir etkiye sahiptir.<\/p>\n<h2>Frontend Entegrasyonu ve Mobil Uyumlu Tasar\u0131m: API'miz Neden Her Yerde Eri\u015filebilir Olmal\u0131?<\/h2>\n<p>Bir backend API'si ne kadar iyi tasarlanm\u0131\u015f olursa olsun, kullan\u0131c\u0131larla bulu\u015ftu\u011fu yer frontend uygulamalar\u0131d\u0131r. Mobil cihazlardan masa\u00fcst\u00fc taray\u0131c\u0131lara kadar geni\u015f bir yelpazede sorunsuz bir deneyim sunmak, API'mizin ba\u015far\u0131s\u0131 i\u00e7in kritik \u00f6neme sahiptir. Bu b\u00f6l\u00fcmde, dinamik <code>\/me<\/code> u\u00e7 noktam\u0131z\u0131 bir frontend uygulamas\u0131yla nas\u0131l entegre edece\u011fimizi ve \u00f6zellikle mobil uyumlu bir tasar\u0131m\u0131n \u00f6nemini ele alaca\u011f\u0131z. Bir API'nin ger\u00e7ek g\u00fcc\u00fc, onun nas\u0131l t\u00fcketildi\u011fiyle ortaya \u00e7\u0131kar. Kullan\u0131c\u0131lar, kulland\u0131klar\u0131 cihaza veya platforma bak\u0131lmaks\u0131z\u0131n tutarl\u0131 ve h\u0131zl\u0131 bir deneyim beklerler.<\/p>\n<h3>Frontend Uygulamas\u0131ndan API'ye \u0130stek G\u00f6nderme<\/h3>\n<p>Modern web uygulamalar\u0131 genellikle React, Vue veya Angular gibi JavaScript \u00e7er\u00e7eveleriyle geli\u015ftirilir. Mobil uygulamalar ise React Native, Flutter veya native platform (iOS\/Android) dilleriyle olu\u015fturulur. Her iki durumda da, <code>\/me<\/code> u\u00e7 noktam\u0131za bir HTTP iste\u011fi g\u00f6ndermek i\u00e7in benzer prensipler ge\u00e7erlidir. Taray\u0131c\u0131 tabanl\u0131 uygulamalarda, Fetch API veya Axios gibi k\u00fct\u00fcphaneler yayg\u0131n olarak kullan\u0131l\u0131rken, mobil uygulamalar da genellikle kendi HTTP istemcilerini bar\u0131nd\u0131r\u0131r. Bu ara\u00e7lar, API'nizle ileti\u015fim kurmak i\u00e7in esnek ve g\u00fc\u00e7l\u00fc y\u00f6ntemler sunar.<\/p>\n<p>\u0130stemci taraf\u0131nda, kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 yap\u0131ld\u0131ktan sonra elde edilen token'\u0131n g\u00fcvenli bir \u015fekilde saklanmas\u0131 ve her <code>\/me<\/code> iste\u011fiyle birlikte sunucuya g\u00f6nderilmesi gerekir. Bu token genellikle HTTP ba\u015fl\u0131\u011f\u0131ndaki <code>Authorization: Bearer [token]<\/code> format\u0131nda g\u00f6nderilir. A\u015fa\u011f\u0131da, basit bir HTML sayfas\u0131ndan <code>\/me<\/code> u\u00e7 noktam\u0131za Fetch API ile nas\u0131l istek g\u00f6nderebilece\u011finizi g\u00f6steren bir \u00f6rnek bulunmaktad\u0131r:<\/p>\n<pre><code class=\"language-javascript\">\n\/\/ frontend.js (\u00f6rnek)\ndocument.addEventListener('DOMContentLoaded', () => {\n    const profileDataElement = document.getElementById('profile-data');\n    const token = localStorage.getItem('userToken'); \/\/ Token'\u0131 Local Storage'dan al\n\n    if (!token) {\n        profileDataElement.innerHTML = '<p>L\u00fctfen giri\u015f yap\u0131n.<\/p>';\n        return;\n    }\n\n    fetch('http:\/\/localhost:3000\/me', {\n        method: 'GET',\n        headers: {\n            'Content-Type': 'application\/json',\n            'Authorization': <code>Bearer ${token}<\/code>\n        }\n    })\n    .then(response => {\n        if (!response.ok) {\n            if (response.status === 401 || response.status === 403) {\n                throw new Error('Yetkisiz eri\u015fim veya ge\u00e7ersiz token. L\u00fctfen tekrar giri\u015f yap\u0131n.');\n            }\n            throw new Error(<code>HTTP hatas\u0131! Durum: ${response.status}<\/code>);\n        }\n        return response.json();\n    })\n    .then(data => {\n        profileDataElement.innerHTML = <code><h3>${data.username} Ho\u015f Geldin!<\/h3>\n            <p>E-posta: ${data.email}<\/p>\n            <p>Rol: ${data.role}<\/p>\n            <p><strong>Bug\u00fcn\u00fcn Kedi Ger\u00e7e\u011fi:<\/strong> <em>${data.yourCatFact}<\/em><\/p><\/code>;\n    })\n    .catch(error => {\n        console.error('Profil bilgileri al\u0131n\u0131rken hata:', error);\n        profileDataElement.innerHTML = <code><p style=\"color: red;\">Hata: ${error.message}<\/p><\/code>;\n        \/\/ Belki token'\u0131 temizleyip kullan\u0131c\u0131y\u0131 giri\u015f sayfas\u0131na y\u00f6nlendirme\n        \/\/ localStorage.removeItem('userToken');\n    });\n});\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu JavaScript kodu, sayfa y\u00fcklendi\u011finde kullan\u0131c\u0131n\u0131n token'\u0131n\u0131 al\u0131r ve <code>\/me<\/code> u\u00e7 noktas\u0131na bir GET iste\u011fi yapar. Ba\u015far\u0131l\u0131 bir yan\u0131t durumunda, profil verilerini ve kedi ger\u00e7e\u011fini HTML \u00f6\u011felerine i\u015fler. Hata durumlar\u0131nda ise kullan\u0131c\u0131ya uygun geri bildirim sa\u011flar. Bu, basit bir \u00f6rnek olsa da, API'nizin frontend taraf\u0131ndan nas\u0131l t\u00fcketildi\u011fini g\u00f6sterir ve ger\u00e7ek bir uygulamada bu mant\u0131\u011f\u0131n nas\u0131l geni\u015fletilebilece\u011fine dair bir ba\u015flang\u0131\u00e7 noktas\u0131 sunar. \u00d6zellikle hata durumlar\u0131nda kullan\u0131c\u0131ya do\u011fru mesajlar\u0131 g\u00f6stermek, kullan\u0131c\u0131 deneyiminin ayr\u0131lmaz bir par\u00e7as\u0131d\u0131r.<\/p>\n<h3>Mobil Uyumlu Tasar\u0131m ve JSON Yan\u0131t Yap\u0131s\u0131<\/h3>\n<p>G\u00fcn\u00fcm\u00fczde mobil cihazlar \u00fczerinden internet eri\u015fimi, masa\u00fcst\u00fc bilgisayarlar\u0131n\u0131 geride b\u0131rakm\u0131\u015f durumdad\u0131r. Bu nedenle, API'mizin mobil uygulamalar veya mobil web siteleri taraf\u0131ndan rahatl\u0131kla kullan\u0131labilir olmas\u0131 hayati \u00f6nem ta\u015f\u0131r. API'mizin d\u00f6nd\u00fcrd\u00fc\u011f\u00fc JSON yan\u0131t yap\u0131s\u0131, bu esnekli\u011fin temelidir. D\u00fczg\u00fcn yap\u0131land\u0131r\u0131lm\u0131\u015f, tahmin edilebilir ve gereksiz veriden ar\u0131nd\u0131r\u0131lm\u0131\u015f bir JSON yan\u0131t\u0131, mobil geli\u015ftiricilerin i\u015fini kolayla\u015ft\u0131r\u0131r. Ayr\u0131ca, API yan\u0131tlar\u0131n\u0131n boyutunu optimize etmek, mobil cihazlarda veri kullan\u0131m\u0131n\u0131 azaltarak kullan\u0131c\u0131 memnuniyetini art\u0131r\u0131r.<\/p>\n<p>Frontend taraf\u0131nda, API'den gelen verileri g\u00f6rsel olarak sunarken mobil uyumlulu\u011fu sa\u011flamak i\u00e7in <strong>duyarl\u0131 tasar\u0131m (responsive design)<\/strong> prensiplerini uygulamal\u0131y\u0131z. Bu, CSS medya sorgular\u0131 (media queries) ve esnek layout'lar (flexbox, grid) kullanarak i\u00e7eri\u011fin farkl\u0131 ekran boyutlar\u0131na ve \u00e7\u00f6z\u00fcn\u00fcrl\u00fcklerine otomatik olarak uyum sa\u011flamas\u0131 anlam\u0131na gelir. Bu yakla\u015f\u0131m, tek bir kod taban\u0131yla farkl\u0131 cihazlarda tutarl\u0131 bir g\u00f6r\u00fcn\u00fcm ve i\u015flevsellik sunar.<\/p>\n<pre><code class=\"language-css\">\n\/* style.css (Mobil uyumlu tasar\u0131m \u00f6rne\u011fi) *\/\nbody {\n    font-family: Arial, sans-serif;\n    margin: 20px;\n    background-color: #f4f4f4;\n}\n\n.profile-card {\n    background-color: #fff;\n    border-radius: 8px;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n    padding: 20px;\n    margin: 0 auto;\n    max-width: 600px; \/* Masa\u00fcst\u00fcnde max geni\u015flik *\/\n}\n\nh2, h3 {\n    color: #333;\n    text-align: center;\n}\n\np {\n    color: #555;\n    line-height: 1.6;\n}\n\n\/* K\u00fc\u00e7\u00fck ekranlar i\u00e7in medya sorgusu *\/\n@media (max-width: 768px) {\n    .profile-card {\n        margin: 10px;\n        padding: 15px;\n    }\n    h2 {\n        font-size: 1.5em;\n    }\n    h3 {\n        font-size: 1.2em;\n    }\n}\n\n\/* \u00c7ok k\u00fc\u00e7\u00fck ekranlar i\u00e7in *\/\n@media (max-width: 480px) {\n    body {\n        margin: 10px;\n    }\n    .profile-card {\n        padding: 10px;\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu CSS medya sorgular\u0131, farkl\u0131 ekran boyutlar\u0131na g\u00f6re <code>.profile-card<\/code>'\u0131n kenar bo\u015fluklar\u0131n\u0131 ve dolgular\u0131n\u0131 ayarlayarak daha iyi bir mobil deneyim sunar. Mobil geli\u015ftiriciler i\u00e7in, token saklama stratejileri de \u00f6nemlidir: web'de <code>localStorage<\/code> veya HTTP-only \u00e7erezleri kullan\u0131l\u0131rken, mobil uygulamalarda genellikle daha g\u00fcvenli anahtarl\u0131k (keychain) veya g\u00fcvenli depolama (secure storage) mekanizmalar\u0131 tercih edilir. Sonu\u00e7 olarak, g\u00fc\u00e7l\u00fc bir backend API'si olu\u015fturmak kadar, onun farkl\u0131 frontend ortamlar\u0131nda ne kadar esnek ve kullan\u0131c\u0131 dostu bir \u015fekilde t\u00fcketilebildi\u011fi de genel uygulama ba\u015far\u0131s\u0131n\u0131 do\u011frudan etkiler. Dinamik <code>\/me<\/code> u\u00e7 noktam\u0131z, bu entegrasyonun merkezinde yer alarak ki\u015fiselle\u015ftirilmi\u015f bir kullan\u0131c\u0131 deneyimi sunar ve kullan\u0131c\u0131lar\u0131n uygulaman\u0131zla nerede ve nas\u0131l etkile\u015fim kurduklar\u0131n\u0131 iyile\u015ftirir.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular: Dinamik Profil U\u00e7 Noktalar\u0131yla Gelece\u011fe Y\u00fcr\u00fcmek<\/h2>\n<p>Bu kapsaml\u0131 makale boyunca, Node.js ve Express kullanarak dinamik bir <code>GET \/me<\/code> profil u\u00e7 noktas\u0131 olu\u015fturman\u0131n inceliklerini ke\u015ffettik. Kullan\u0131c\u0131ya \u00f6zel bilgileri g\u00fcvenli, verimli ve hatta e\u011flenceli bir \u015fekilde sunman\u0131n temellerini att\u0131k. Basit bir sunucu kurulumundan ba\u015flayarak, kimlik do\u011frulama middleware'i geli\u015ftirmeye, harici bir API ile entegrasyona ve son olarak g\u00fcvenlik, performans ve frontend entegrasyonu gibi kritik konulara de\u011findik. Kedi ger\u00e7ekleri eklemesiyle, teknik bir konunun bile nas\u0131l daha ilgi \u00e7ekici hale getirilebilece\u011fini g\u00f6sterdik. Bu yolculuk, modern web uygulamas\u0131 geli\u015ftirmenin temel ta\u015flar\u0131n\u0131 derinlemesine anlamam\u0131z\u0131 sa\u011flad\u0131.<\/p>\n<p><code>\/me<\/code> u\u00e7 noktas\u0131, modern web ve mobil uygulamalar\u0131n ki\u015fiselle\u015ftirilmi\u015f deneyimler sunma yetene\u011finin merkezinde yer al\u0131r. Geli\u015ftiricilerin, oturum a\u00e7m\u0131\u015f kullan\u0131c\u0131n\u0131n kendi verilerine kolayca eri\u015fmesini sa\u011flayarak karma\u015f\u0131kl\u0131\u011f\u0131 azalt\u0131r ve uygulama geli\u015ftirmeyi h\u0131zland\u0131r\u0131r. G\u00fcvenlik protokollerinin do\u011fru uygulanmas\u0131, performans optimizasyonlar\u0131 ve mobil uyumlu tasar\u0131m yakla\u015f\u0131mlar\u0131 ise bu u\u00e7 noktan\u0131n uzun vadeli ba\u015far\u0131s\u0131n\u0131 ve kullan\u0131c\u0131 memnuniyetini garantiler. Unutmay\u0131n, bir API sadece kod sat\u0131rlar\u0131ndan ibaret de\u011fildir; ayn\u0131 zamanda kullan\u0131c\u0131lar\u0131n\u0131zla etkile\u015fim kurma bi\u00e7iminizdir ve bu etkile\u015fimin m\u00fcmk\u00fcn oldu\u011funca sorunsuz, h\u0131zl\u0131 ve g\u00fcvenli olmas\u0131 gerekir. Bu prensiplere ba\u011fl\u0131 kalmak, uygulaman\u0131z\u0131n ba\u015far\u0131s\u0131n\u0131 do\u011frudan etkiler.<\/p>\n<p>Geli\u015ftirdi\u011fimiz bu yap\u0131, sadece kedi ger\u00e7ekleriyle s\u0131n\u0131rl\u0131 kalmay\u0131p, herhangi bir harici servisten veri \u00e7ekmek, kullan\u0131c\u0131n\u0131n sipari\u015f ge\u00e7mi\u015fini, bildirimlerini veya ki\u015fiselle\u015ftirilmi\u015f \u00f6nerilerini sunmak i\u00e7in kolayca geni\u015fletilebilir. Bu yolculuk, Node.js ve Express'in esnekli\u011fini ve g\u00fcc\u00fcn\u00fc bir kez daha g\u00f6zler \u00f6n\u00fcne sermi\u015ftir. Umuyoruz ki bu makale, kendi dinamik profil u\u00e7 noktalar\u0131n\u0131z\u0131 olu\u015fturman\u0131z i\u00e7in size ilham vermi\u015f ve gerekli bilgileri sa\u011flam\u0131\u015ft\u0131r. \u015eimdi s\u0131ra sizde; kendi API'nizi in\u015fa edin ve kullan\u0131c\u0131lar\u0131n\u0131za \u00f6zel deneyimler sunmaya ba\u015flay\u0131n! Bu bilgilerle donanm\u0131\u015f olarak, web geli\u015ftirme d\u00fcnyas\u0131nda yeni ve heyecan verici projeler yaratabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt><strong>1. <code>GET \/me<\/code> rotas\u0131 neden <code>GET \/users\/{id}<\/code> rotas\u0131ndan daha iyidir?<\/strong><\/dt>\n<dd><code>GET \/me<\/code>, kimli\u011fi do\u011frulanm\u0131\u015f kullan\u0131c\u0131n\u0131n kendi bilgilerini almak i\u00e7in tasarlanm\u0131\u015ft\u0131r. Bu, istemcinin kullan\u0131c\u0131 ID'sini y\u00f6netmesine veya bilmesine gerek kalmadan do\u011frudan \"benim\" bilgilerime eri\u015fmesini sa\u011flar. G\u00fcvenlik a\u00e7\u0131s\u0131ndan, istemcinin ba\u015fkalar\u0131n\u0131n ID'lerini tahmin ederek veya manip\u00fcle ederek ba\u015fka kullan\u0131c\u0131lar\u0131n verilerine eri\u015fimini engeller. <code>GET \/users\/{id}<\/code> ise genellikle bir admin paneli gibi, yetkili bir kullan\u0131c\u0131n\u0131n belirli bir ID'ye sahip herhangi bir kullan\u0131c\u0131n\u0131n bilgilerine eri\u015fmesi i\u00e7in kullan\u0131l\u0131r ve daha geni\u015f bir yetkilendirme kontrol\u00fc gerektirir.<\/dd>\n<dt><strong>2. Kedi ger\u00e7eklerini her istekte yeniden almak performans\u0131 d\u00fc\u015f\u00fcr\u00fcr m\u00fc?<\/strong><\/dt>\n<dd>Evet, harici bir API'den her istekte veri \u00e7ekmek a\u011f gecikmesine ve ek i\u015flem y\u00fck\u00fcne neden olabilir. E\u011fer kedi ger\u00e7ekleri s\u0131k s\u0131k de\u011fi\u015fmiyorsa veya her kullan\u0131c\u0131ya benzersiz bir tane sunmak zorunlu de\u011filse, bu yan\u0131tlar\u0131 belirli bir s\u00fcre i\u00e7in \u00f6nbelle\u011fe almak (caching) performans\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bir \u00f6nbellekleme katman\u0131 (\u00f6rne\u011fin Redis veya bir haf\u0131za i\u00e7i \u00f6nbellek) kullanarak, s\u0131k yap\u0131lan isteklerde harici API'ye gitmekten ka\u00e7\u0131nabilirsiniz. Bu, \u00f6zellikle y\u00fcksek trafikli uygulamalarda sunucu y\u00fck\u00fcn\u00fc azaltman\u0131n etkili bir yoludur.<\/dd>\n<dt><strong>3. Kimlik do\u011frulama i\u00e7in hangi y\u00f6ntemleri kullanmal\u0131y\u0131m?<\/strong><\/dt>\n<dd>Bu makalede basitle\u015ftirilmi\u015f bir token kontrol\u00fc kulland\u0131k, ancak ger\u00e7ek uygulamalar i\u00e7in JSON Web Token (JWT) veya OAuth 2.0 gibi end\u00fcstri standard\u0131 kimlik do\u011frulama mekanizmalar\u0131 \u015fiddetle tavsiye edilir. JWT'ler, belirte\u00e7lerin sunucu taraf\u0131nda ek bir veritaban\u0131 sorgusu gerektirmeden do\u011frulanmas\u0131na olanak tan\u0131r ve \u00f6l\u00e7eklenebilirlik a\u00e7\u0131s\u0131ndan avantajl\u0131d\u0131r. OAuth 2.0 ise \u00fc\u00e7\u00fcnc\u00fc taraf uygulamalar\u0131n kullan\u0131c\u0131 verilerine g\u00fcvenli eri\u015fimini sa\u011flamak i\u00e7in idealdir. Hangi y\u00f6ntemi se\u00e7ece\u011finiz, uygulaman\u0131z\u0131n g\u00fcvenlik gereksinimlerine ve mimarisine ba\u011fl\u0131d\u0131r.<\/dd>\n<dt><strong>4. API g\u00fcvenli\u011fi i\u00e7in ba\u015fka hangi \u00f6nlemleri alabilirim?<\/strong><\/dt>\n<dd>Kimlik do\u011frulama ve yetkilendirmenin yan\u0131 s\u0131ra, API g\u00fcvenli\u011fi i\u00e7in al\u0131nabilecek di\u011fer \u00f6nemli \u00f6nlemler \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Giri\u015f Do\u011frulama (Input Validation):<\/strong> \u0130stemciden gelen t\u00fcm verileri do\u011frulay\u0131n ve temizleyin (sanitize) bu, enjeksiyon sald\u0131r\u0131lar\u0131n\u0131 \u00f6nler.<\/li>\n<li><strong>HTTPS Kullan\u0131m\u0131:<\/strong> T\u00fcm API ileti\u015fimi \u015fifrelenmi\u015f (HTTPS) olmal\u0131d\u0131r, veri b\u00fct\u00fcnl\u00fc\u011f\u00fc ve gizlili\u011fi i\u00e7in zorunludur.<\/li>\n<li><strong>Hata Y\u00f6netimi:<\/strong> Hata mesajlar\u0131nda hassas bilgileri (\u00f6rne\u011fin veritaban\u0131 hatalar\u0131) if\u015fa etmekten ka\u00e7\u0131n\u0131n; genel ve bilgilendirici hata mesajlar\u0131 d\u00f6nd\u00fcr\u00fcn.<\/li>\n<li><strong>Oran S\u0131n\u0131rlama (Rate Limiting):<\/strong> DDoS sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flar ve k\u00f6t\u00fc niyetli istekleri engeller.<\/li>\n<li><strong>CORS Politikalar\u0131:<\/strong> API'nize yaln\u0131zca izin verilen alan adlar\u0131ndan eri\u015fim sa\u011flay\u0131n, bu taray\u0131c\u0131 tabanl\u0131 sald\u0131r\u0131lar\u0131 \u00f6nler.<\/li>\n<li><strong>G\u00fcvenlik Ba\u015fl\u0131klar\u0131:<\/strong> Uygulaman\u0131z\u0131 \u00e7e\u015fitli web g\u00fcvenlik a\u00e7\u0131klar\u0131ndan korumak i\u00e7in uygun HTTP g\u00fcvenlik ba\u015fl\u0131klar\u0131n\u0131 (\u00f6rne\u011fin Helmet.js ile) kullan\u0131n.<\/li>\n<\/ul>\n<\/dd>\n<dt><strong>5. Bu yap\u0131y\u0131 veritaban\u0131yla nas\u0131l entegre edebilirim?<\/strong><\/dt>\n<dd>Bu makaledeki sahte <code>users<\/code> dizisi yerine, bir veritaban\u0131 (MongoDB, PostgreSQL, MySQL vb.) kullanman\u0131z gerekir. Node.js i\u00e7in pop\u00fcler ORM\/ODM k\u00fct\u00fcphaneleri (\u00f6rne\u011fin Sequelize for SQL, Mongoose for MongoDB) veritaban\u0131 i\u015flemleri i\u00e7in bir soyutlama katman\u0131 sa\u011flar. <code>authMiddleware<\/code> i\u00e7inde token'dan al\u0131nan <code>userId<\/code>'yi kullanarak, veritaban\u0131ndan ilgili kullan\u0131c\u0131n\u0131n profilini \u00e7ekebilir ve yan\u0131t olarak d\u00f6nd\u00fcrebilirsiniz. Veritaban\u0131 entegrasyonu, uygulaman\u0131z\u0131n ger\u00e7ek d\u00fcnya verilerini kal\u0131c\u0131 olarak saklamas\u0131na ve y\u00f6netmesine olanak tan\u0131r, bu da onu dinamik ve kal\u0131c\u0131 bir uygulama haline getirir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir&hellip;","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":[136],"tags":[],"class_list":{"0":"post-32685","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-node-js","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>Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)<\/title>\n<meta name=\"description\" content=\"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir profil u\u00e7 noktas\u0131 olan GET \/me rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API&#039;siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.\" \/>\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\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)\" \/>\n<meta property=\"og:description\" content=\"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir profil u\u00e7 noktas\u0131 olan GET \/me rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API&#039;siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-24T17:32: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=\"28 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)\",\"datePublished\":\"2025-10-24T17:32:28+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\"},\"wordCount\":4773,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Node.js\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\",\"name\":\"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-24T17:32:28+00:00\",\"description\":\"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir profil u\u00e7 noktas\u0131 olan GET \/me rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API'siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)\"}]},{\"@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":"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)","description":"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir profil u\u00e7 noktas\u0131 olan GET \/me rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API'siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.","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\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/","og_locale":"tr_TR","og_type":"article","og_title":"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)","og_description":"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir profil u\u00e7 noktas\u0131 olan GET \/me rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API'siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.","og_url":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-24T17:32:28+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"28 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)","datePublished":"2025-10-24T17:32:28+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/"},"wordCount":4773,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Node.js"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/","url":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/","name":"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-24T17:32:28+00:00","description":"Web uygulamalar\u0131nda kullan\u0131c\u0131ya \u00f6zel i\u00e7erik sunmak, ba\u015far\u0131l\u0131 bir deneyimin temelidir. Peki, bu ki\u015fiselle\u015ftirilmi\u015f verileri g\u00fcvenli ve etkili bir \u015fekilde nas\u0131l sunabiliriz? Node.js ve Express kullanarak dinamik bir profil u\u00e7 noktas\u0131 olan GET \/me rotas\u0131n\u0131 olu\u015fturmay\u0131 ve bu s\u00fcreci, kedi ger\u00e7ekleri API'siyle entegre ederek hem \u00f6\u011fretici hem de e\u011flenceli hale getirmeyi ke\u015ffedin. Bu makale, s\u0131f\u0131rdan ba\u015flayarak kapsaml\u0131 bir \u00e7\u00f6z\u00fcm sunacak.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/dinamik-bir-profil-uc-noktasi-olusturma-get-me-node-js-express-kedi-gercekleri\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Dinamik Bir Profil U\u00e7 Noktas\u0131 Olu\u015fturma \u2014 GET \/me (Node.js\/Express + Kedi Ger\u00e7ekleri)"}]},{"@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\/32685","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=32685"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32685\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32685"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32685"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32685"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}