{"id":32246,"date":"2025-10-19T12:31:34","date_gmt":"2025-10-19T09:31:34","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/"},"modified":"2025-10-19T12:31:34","modified_gmt":"2025-10-19T09:31:34","slug":"express-api-olusturma-ve-dagitma-hng-stage-0-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/","title":{"rendered":"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi"},"content":{"rendered":"<p><body><\/p>\n<style>\n        \/* Bu stil bloklar\u0131, mobil uyumlu HTML gereksinimini kar\u015f\u0131lamak i\u00e7in eklenmi\u015ftir. *\/\n        \/* Ger\u00e7ek bir API makalesinde bu CSS do\u011frudan gerekli olmasa da, *\/\n        \/* HTML yap\u0131s\u0131n\u0131n mobil uyumlulu\u011funu g\u00f6stermek amac\u0131yla dahil edilmi\u015ftir. *\/\n        body {\n            font-family: Arial, sans-serif;\n            line-height: 1.6;\n            color: #333;\n            max-width: 900px;\n            margin: 0 auto;\n            padding: 20px;\n        }\n        h2, h3 {\n            color: #2c3e50;\n        }\n        pre {\n            background-color: #ecf0f1;\n            padding: 15px;\n            border-radius: 5px;\n            overflow-x: auto;\n        }\n        code {\n            font-family: 'Consolas', 'Monaco', monospace;\n            font-size: 0.9em;\n        }\n        table {\n            width: 100%;\n            border-collapse: collapse;\n            margin-bottom: 20px;\n        }\n        th, td {\n            border: 1px solid #ddd;\n            padding: 8px;\n            text-align: left;\n        }\n        th {\n            background-color: #f2f2f2;\n        }\n        .uzman-ipucu {\n            background-color: #e8f5e9;\n            border-left: 5px solid #4CAF50;\n            padding: 15px;\n            margin: 20px 0;\n            border-radius: 4px;\n            color: #2e7d32;\n        }<\/p>\n<p>        \/* Mobil uyumluluk i\u00e7in medya sorgusu \u00f6rne\u011fi *\/\n        @media (max-width: 768px) {\n            body {\n                padding: 10px;\n            }\n            h2 {\n                font-size: 1.8em;\n            }\n            h3 {\n                font-size: 1.3em;\n            }\n            table, thead, tbody, th, td, tr {\n                display: block;\n            }\n            thead tr {\n                position: absolute;\n                top: -9999px;\n                left: -9999px;\n            }\n            tr { border: 1px solid #ccc; }\n            td {\n                border: none;\n                border-bottom: 1px solid #eee;\n                position: relative;\n                padding-left: 50%;\n            }\n            td:before {\n                position: absolute;\n                top: 6px;\n                left: 6px;\n                width: 45%;\n                padding-right: 10px;\n                white-space: nowrap;\n                content: attr(data-label);\n                font-weight: bold;\n            }\n        }\n    <\/style>\n<p>\u0130lk Express API&#8217;nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.<\/p>\n<p>Modern yaz\u0131l\u0131m d\u00fcnyas\u0131nda API&#8217;lar, uygulamalar\u0131n birbiriyle ileti\u015fim kurmas\u0131n\u0131 sa\u011flayan temel yap\u0131 ta\u015flar\u0131d\u0131r. \u0130ster bir mobil uygulama, ister web sitesi veya ba\u015fka bir hizmet geli\u015ftiriyor olun, arka planda veri al\u0131\u015fveri\u015fi i\u00e7in bir API&#8217;ye ihtiya\u00e7 duyars\u0131n\u0131z. \u00d6zellikle bir geli\u015ftirme yolculu\u011funun ba\u015f\u0131ndaysan\u0131z, kendi API&#8217;nizi olu\u015fturmak ve onu t\u00fcm d\u00fcnyan\u0131n eri\u015fimine a\u00e7mak, heyecan verici ve bir o kadar da \u00f6\u011fretici bir deneyimdir. Ancak, \u00e7o\u011fu zaman geli\u015ftiriciler yerel makinelerinde \u00e7al\u0131\u015fan harika bir API olu\u015fturabilirler, fakat onu internete ta\u015f\u0131ma (da\u011f\u0131t\u0131m) a\u015famas\u0131nda zorlan\u0131rlar.<\/p>\n<p>Peki, bilgisayar\u0131n\u0131zda sorunsuz \u00e7al\u0131\u015fan bir API&#8217;yi bulut ortam\u0131na nas\u0131l ta\u015f\u0131yabiliriz? \u0130\u015fte HNG Stage 0 g\u00f6revinin ana odak noktas\u0131 da tam olarak bu soruyu yan\u0131tl\u0131yor. Bu rehberde, Node.js ekosisteminin pop\u00fcler web framework&#8217;\u00fc Express&#8217;i kullanarak s\u0131f\u0131rdan basit bir RESTful API olu\u015fturmay\u0131, bunu yerel olarak test etmeyi ve son olarak Render.com gibi \u00fccretsiz bir platformda nas\u0131l canl\u0131ya alaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m \u00f6\u011freneceksiniz. Dolay\u0131s\u0131yla, bu s\u00fcre\u00e7 sadece bir g\u00f6revi tamamlaman\u0131za yard\u0131mc\u0131 olmakla kalmayacak, ayn\u0131 zamanda gelecekteki projeleriniz i\u00e7in sa\u011flam bir temel olu\u015fturman\u0131za da olanak tan\u0131yacakt\u0131r. Uygulamal\u0131 yakla\u015f\u0131mlar ve anla\u015f\u0131l\u0131r kod \u00f6rnekleri sayesinde, API geli\u015ftirme ve da\u011f\u0131t\u0131m\u0131n temel prensiplerini kolayca kavrayabileceksiniz. Sonu\u00e7 olarak, bu deneyim sizi daha yetkin ve kendine g\u00fcvenen bir geli\u015ftirici yapacak \u00f6nemli bir ad\u0131md\u0131r.<\/p>\n<p>Haz\u0131r m\u0131s\u0131n\u0131z? \u00d6yleyse, kodlama maceram\u0131za ilk ad\u0131m\u0131 atal\u0131m ve kendi Express API&#8217;mizi geli\u015ftirme yolculu\u011funa \u00e7\u0131kal\u0131m!<\/p>\n<h2 id=\"api-gelistirmenin-temel-taslari\">API Geli\u015ftirmenin Temel Ta\u015flar\u0131 Nelerdir?<\/h2>\n<p>Bir API (Uygulama Programlama Aray\u00fcz\u00fc), iki veya daha fazla yaz\u0131l\u0131m bile\u015feninin birbiriyle ileti\u015fim kurmas\u0131n\u0131 sa\u011flayan bir dizi tan\u0131m ve protokol b\u00fct\u00fcn\u00fcd\u00fcr. K\u0131sacas\u0131, bir uygulaman\u0131n di\u011ferine nas\u0131l &#8220;konu\u015faca\u011f\u0131n\u0131&#8221; belirleyen bir k\u00f6pr\u00fc g\u00f6revi g\u00f6r\u00fcr. G\u00fcn\u00fcm\u00fczde en yayg\u0131n API t\u00fcrlerinden biri olan RESTful API&#8217;lar (Representational State Transfer), web hizmetlerinde verileri standart HTTP metotlar\u0131 (GET, POST, PUT, DELETE) ve JSON format\u0131 kullanarak y\u00f6netmeyi ama\u00e7lar. Bu yakla\u015f\u0131m, basitli\u011fi ve geni\u015f uyumlulu\u011fu sayesinde olduk\u00e7a pop\u00fclerdir.<\/p>\n<p>Bu ba\u011flamda, Node.js, sunucu taraf\u0131 JavaScript \u00e7al\u0131\u015ft\u0131rma ortam\u0131d\u0131r. Google Chrome&#8217;un V8 JavaScript motoru \u00fczerine kurulu olup, y\u00fcksek performansl\u0131 ve \u00f6l\u00e7eklenebilir a\u011f uygulamalar\u0131 geli\u015ftirmek i\u00e7in idealdir. Asenkron, olay tabanl\u0131 mimarisi sayesinde yo\u011fun I\/O i\u015flemleri gerektiren uygulamalarda \u00fcst\u00fcn bir performans sergiler. Node.js&#8217;in g\u00fcc\u00fcn\u00fc arkas\u0131na alan Express.js ise, Node.js i\u00e7in minimalist ve esnek bir web uygulama framework&#8217;\u00fcd\u00fcr. API&#8217;lar olu\u015fturmak, y\u00f6nlendirmeyi (routing) y\u00f6netmek, middleware kullanarak istekleri i\u015flemek ve \u00e7e\u015fitli sunucu i\u015flemleri i\u00e7in basit ve kullan\u0131\u015fl\u0131 bir yap\u0131 sunar. Bu kombinasyon, \u00f6zellikle HNG Stage 0 gibi g\u00f6revler i\u00e7in h\u0131zl\u0131ca prototip olu\u015fturman\u0131z\u0131 ve API&#8217;nizi hayata ge\u00e7irmenizi kolayla\u015ft\u0131r\u0131r. Dahas\u0131, Express&#8217;in geni\u015f topluluk deste\u011fi ve zengin ekosistemi, kar\u015f\u0131la\u015ft\u0131\u011f\u0131n\u0131z sorunlara h\u0131zl\u0131 \u00e7\u00f6z\u00fcmler bulman\u0131z\u0131 sa\u011flar.<\/p>\n<p>RESTful API&#8217;larda kullan\u0131lan temel HTTP metotlar\u0131 \u015funlard\u0131r:<\/p>\n<table border=\"1\">\n<thead>\n<tr>\n<th>Metot<\/th>\n<th>A\u00e7\u0131klama<\/th>\n<th>Kullan\u0131m Alan\u0131<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-label=\"Metot\">GET<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Sunucudan kaynak (veri) talep eder. Veri d\u00f6nd\u00fcr\u00fcr, sunucuda de\u011fi\u015fiklik yapmaz.<\/td>\n<td data-label=\"Kullan\u0131m Alan\u0131\">Bir kullan\u0131c\u0131n\u0131n bilgilerini, \u00fcr\u00fcn listesini almak.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Metot\">POST<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Sunucuya yeni bir kaynak (veri) olu\u015fturmak i\u00e7in veri g\u00f6nderir.<\/td>\n<td data-label=\"Kullan\u0131m Alan\u0131\">Yeni bir kullan\u0131c\u0131 kayd\u0131, yeni bir g\u00f6nderi olu\u015fturmak.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Metot\">PUT<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Var olan bir kayna\u011f\u0131 tamamen g\u00fcncellemek i\u00e7in kullan\u0131l\u0131r.<\/td>\n<td data-label=\"Kullan\u0131m Alan\u0131\">Bir kullan\u0131c\u0131n\u0131n t\u00fcm profil bilgilerini g\u00fcncellemek.<\/td>\n<\/tr>\n<tr>\n<td data-label=\"Metot\">DELETE<\/td>\n<td data-label=\"A\u00e7\u0131klama\">Belirli bir kayna\u011f\u0131 sunucudan siler.<\/td>\n<td data-label=\"Kullan\u0131m Alan\u0131\">Bir g\u00f6nderiyi veya kullan\u0131c\u0131 hesab\u0131n\u0131 silmek.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Bu metotlar\u0131 anlayarak, API&#8217;nizin farkl\u0131 t\u00fcrdeki isteklere nas\u0131l yan\u0131t verece\u011fini tasarlayabilirsiniz. Ayr\u0131ca, API yan\u0131tlar\u0131 genellikle JSON (JavaScript Object Notation) format\u0131nda g\u00f6nderilir. JSON, insan taraf\u0131ndan okunabilir ve makineler taraf\u0131ndan kolayca ayr\u0131\u015ft\u0131r\u0131labilir hafif bir veri de\u011fi\u015fim format\u0131d\u0131r. Bu \u00f6zellikleriyle web API&#8217;lerinde veri al\u0131\u015fveri\u015fi i\u00e7in end\u00fcstri standard\u0131 haline gelmi\u015ftir.<\/p>\n<h3 id=\"gelistirme-ortami-kurulumu\">Geli\u015ftirme Ortam\u0131n\u0131z\u0131 Nas\u0131l Haz\u0131rlars\u0131n\u0131z?<\/h3>\n<p>API geli\u015ftirme yolculu\u011fumuza ba\u015flamadan \u00f6nce, gerekli ara\u00e7lar\u0131 kurmam\u0131z gerekiyor. \u00d6ncelikle, bilgisayar\u0131n\u0131zda Node.js ve npm (Node Package Manager) kurulu olmal\u0131d\u0131r. E\u011fer kurulu de\u011filse, Node.js&#8217;in resmi web sitesinden (nodejs.org) LTS (Uzun S\u00fcreli Destek) s\u00fcr\u00fcm\u00fcn\u00fc indirip kurman\u0131z \u00f6nerilir. Kurulum tamamland\u0131ktan sonra, terminalinizde a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131rarak kurulumun do\u011frulu\u011funu kontrol edebilirsiniz:<\/p>\n<pre><code>\nnode -v\nnpm -v\n<\/pre>\n<p><\/code><\/p>\n<p>Her iki komut da s\u00fcr\u00fcm numaralar\u0131n\u0131 ba\u015far\u0131yla g\u00f6steriyorsa, haz\u0131r\u0131z demektir. Bir sonraki ad\u0131m, projemiz i\u00e7in bir dizin olu\u015fturmak ve i\u00e7ine girmektir:<\/p>\n<pre><code>\nmkdir hng-express-api\ncd hng-express-api\n<\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, projemizi ba\u015flatmak i\u00e7in <code>npm init<\/code> komutunu kullanaca\u011f\u0131z. Bu komut, projeniz hakk\u0131nda baz\u0131 sorular soracak ve bu bilgilere dayanarak bir <code>package.json<\/code> dosyas\u0131 olu\u015fturacakt\u0131r. \u00c7o\u011fu soruyu varsay\u0131lan de\u011ferlerle ge\u00e7ebilir veya kendi tercihlerinizi girebilirsiniz. \u00d6nemli olan, bu dosyan\u0131n Node.js projenizin temel yap\u0131land\u0131rma bilgilerini i\u00e7ermesidir.<\/p>\n<pre><code>\nnpm init -y\n<\/pre>\n<p><\/code><\/p>\n<p><code>-y<\/code> parametresi, t\u00fcm sorulara varsay\u0131lan cevaplar\u0131 vermenizi sa\u011flar ve s\u00fcreci h\u0131zland\u0131r\u0131r. Son olarak, Express.js framework'\u00fcn\u00fc projemize dahil etmeliyiz:<\/p>\n<pre><code>\nnpm install express\n<\/pre>\n<p><\/code><\/p>\n<p>Bu komut, Express paketini indirir ve projenizin <code>node_modules<\/code> dizinine kurar, ayr\u0131ca <code>package.json<\/code> dosyan\u0131zdaki <code>dependencies<\/code> b\u00f6l\u00fcm\u00fcne Express'i ekler. Art\u0131k temel geli\u015ftirme ortam\u0131m\u0131z haz\u0131r. Bu kurulumlar sayesinde, Express API'mizi yazmaya ba\u015flayabilir ve HNG Stage 0 g\u00f6revinin gerektirdi\u011fi endpoint'i olu\u015fturmak i\u00e7in gereken t\u00fcm bile\u015fenlere sahip olabiliriz. Bu ad\u0131mlar, herhangi bir Node.js projesinin ba\u015flang\u0131\u00e7 noktas\u0131 olup, hem basit hem de karma\u015f\u0131k uygulamalar i\u00e7in benzer bir yap\u0131land\u0131rma s\u00fcrecini takip eder.<\/p>\n<h2 id=\"ilk-express-api-mizi-yazalim\">\u0130lk Express API'mizi Ad\u0131m Ad\u0131m Nas\u0131l Olu\u015ftururuz?<\/h2>\n<p>Geli\u015ftirme ortam\u0131m\u0131z\u0131 haz\u0131rlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi ilk Express API'mizi olu\u015fturmaya ba\u015flayabiliriz. Bu b\u00f6l\u00fcmde, HNG Stage 0 g\u00f6revinin temel gereksinimlerini kar\u015f\u0131layacak bir API'yi ad\u0131m ad\u0131m nas\u0131l yazaca\u011f\u0131m\u0131z\u0131 \u00f6\u011freneceksiniz. \u00d6ncelikle basit bir Express sunucusu kuracak, ard\u0131ndan g\u00f6reve \u00f6zel bir GET endpoint'i tasarlayaca\u011f\u0131z.<\/p>\n<h3 id=\"basit-bir-sunucu-kurulumu\">Basit Bir Express Sunucusu Kurulumu<\/h3>\n<p>Proje dizinimizin k\u00f6k\u00fcnde <code>app.js<\/code> (veya <code>server.js<\/code>) ad\u0131nda yeni bir dosya olu\u015ftural\u0131m. Bu dosya, Express sunucumuzun ana giri\u015f noktas\u0131 olacakt\u0131r. \u0130\u00e7ine a\u015fa\u011f\u0131daki temel Express kodunu ekleyelim:<\/p>\n<pre><code>\nconst express = require('express'); \/\/ Express mod\u00fcl\u00fcn\u00fc i\u00e7e aktar\u0131yoruz\nconst app = express(); \/\/ Express uygulamas\u0131n\u0131 ba\u015flat\u0131yoruz\nconst port = process.env.PORT || 3000; \/\/ Ortam de\u011fi\u015fkeninden veya 3000 portunu kullan\n\n\/\/ Temel bir GET rotas\u0131 tan\u0131mlayal\u0131m\napp.get('\/', (req, res) => {\n  res.send('Merhaba D\u00fcnya! Express API\\'niz \u00e7al\u0131\u015f\u0131yor!');\n});\n\n\/\/ Sunucuyu belirtilen port \u00fczerinden dinlemeye ba\u015flayal\u0131m\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>Yukar\u0131daki kod blo\u011fu, bir Express uygulamas\u0131n\u0131n en temel halini temsil eder. \u0130lk olarak Express mod\u00fcl\u00fcn\u00fc i\u00e7e aktar\u0131r, ard\u0131ndan bir Express uygulamas\u0131 \u00f6rne\u011fi olu\u015ftururuz. <code>port<\/code> de\u011fi\u015fkenini tan\u0131mlarken <code>process.env.PORT<\/code> kullanmam\u0131z \u00e7ok \u00f6nemlidir, \u00e7\u00fcnk\u00fc da\u011f\u0131t\u0131m platformlar\u0131 (Render gibi) genellikle uygulamam\u0131z\u0131 belirli bir portta \u00e7al\u0131\u015ft\u0131rmam\u0131z\u0131 bekler ve bu portu bir ortam de\u011fi\u015fkeni olarak sa\u011flar. E\u011fer b\u00f6yle bir ortam de\u011fi\u015fkeni yoksa, varsay\u0131lan olarak 3000 numaral\u0131 portu kullan\u0131r\u0131z.<\/p>\n<p><code>app.get('\/', ...)<\/code> sat\u0131r\u0131, ana dizine (root URL) gelen GET isteklerini nas\u0131l yan\u0131tlayaca\u011f\u0131m\u0131z\u0131 belirtir. Burada basit\u00e7e \"Merhaba D\u00fcnya!\" mesaj\u0131n\u0131 geri g\u00f6nderiyoruz. Son olarak, <code>app.listen()<\/code> metodu ile sunucumuzu ba\u015flat\u0131r\u0131z ve belirtilen port \u00fczerinden gelen ba\u011flant\u0131lar\u0131 dinlemeye ba\u015flar\u0131z. Uygulamay\u0131 \u00e7al\u0131\u015ft\u0131rmak i\u00e7in terminalde <code>node app.js<\/code> komutunu kullanabilirsiniz. Ard\u0131ndan taray\u0131c\u0131n\u0131zda <code>http:\/\/localhost:3000<\/code> adresine giderek bu mesaj\u0131 g\u00f6rebilirsiniz.<\/p>\n<h3 id=\"veritabanisiz-bir-rest-api-endpointi-olusturma\">Veritaban\u0131s\u0131z Bir REST API Endpointi Olu\u015fturma (HNG Gereksinimi)<\/h3>\n<p>HNG Stage 0 g\u00f6revi, belirli sorgu parametrelerini (<code>slack_name<\/code> ve <code>track<\/code>) kabul eden ve \u00f6zel bir JSON format\u0131nda yan\u0131t veren bir GET endpoint'i olu\u015fturman\u0131z\u0131 ister. Bu endpoint, bir veritaban\u0131 gerektirmez, sadece dinamik olarak veri \u00fcretmelidir. <code>app.js<\/code> dosyam\u0131z\u0131 a\u015fa\u011f\u0131daki gibi g\u00fcncelleyelim:<\/p>\n<pre><code>\nconst express = require('express');\nconst app = express();\nconst port = process.env.PORT || 3000;\n\n\/\/ API endpoint'i i\u00e7in CORS ayarlar\u0131n\u0131 yapal\u0131m (gerekirse)\n\/\/ Bu, taray\u0131c\u0131dan gelen isteklerin farkl\u0131 kaynaklardan gelmesine izin verir.\n\/\/ app.use((req, res, next) => {\n\/\/   res.setHeader('Access-Control-Allow-Origin', '*');\n\/\/   res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE');\n\/\/   res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');\n\/\/   next();\n\/\/ });\n\napp.get('\/api', (req, res) => {\n  \/\/ Sorgu parametrelerini alal\u0131m\n  const { slack_name, track } = req.query;\n\n  \/\/ Gerekli parametrelerin gelip gelmedi\u011fini kontrol edelim\n  if (!slack_name || !track) {\n    return res.status(400).json({\n      error: 'slack_name ve track parametreleri zorunludur.'\n    });\n  }\n\n  \/\/ UTC zaman\u0131n\u0131 ve haftan\u0131n g\u00fcn\u00fcn\u00fc dinamik olarak alal\u0131m\n  const now = new Date();\n  const utc_time = now.toISOString().slice(0, -5) + 'Z'; \/\/ 'YYYY-MM-DDTHH:mm:ssZ' format\u0131\n  const daysOfWeek = [\"Pazar\", \"Pazartesi\", \"Sal\u0131\", \"\u00c7ar\u015famba\", \"Per\u015fembe\", \"Cuma\", \"Cumartesi\"];\n  const current_day = daysOfWeek[now.getUTCDay()];\n\n  \/\/ GitHub URL'leri (kendi URL'lerinizle de\u011fi\u015ftirin)\n  const github_file_url = 'https:\/\/github.com\/KullaniciAdiniz\/hng-stage-0-task\/blob\/main\/app.js'; \/\/ Kendi dosyan\u0131z\n  const github_repo_url = 'https:\/\/github.com\/KullaniciAdiniz\/hng-stage-0-task'; \/\/ Kendi deponuz\n\n  \/\/ JSON yan\u0131t\u0131n\u0131 olu\u015ftural\u0131m\n  res.status(200).json({\n    slack_name: slack_name,\n    current_day: current_day,\n    utc_time: utc_time,\n    track: track,\n    github_file_url: github_file_url,\n    github_repo_url: github_repo_url,\n    status_code: 200\n  });\n});\n\n\/\/ Sunucuyu dinlemeye ba\u015fla\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 kod blo\u011fu, <code>\/api<\/code> yoluna gelen GET isteklerini i\u015fler. <code>req.query<\/code> nesnesi arac\u0131l\u0131\u011f\u0131yla URL'deki sorgu parametrelerine (<code>?slack_name=username&track=backend<\/code> gibi) eri\u015febiliriz. E\u011fer gerekli parametreler gelmezse, 400 durum kodu ile bir hata mesaj\u0131 d\u00f6nd\u00fcr\u00fcyoruz. Aksi takdirde, anl\u0131k UTC zaman\u0131n\u0131 ve haftan\u0131n g\u00fcn\u00fcn\u00fc dinamik olarak hesapl\u0131yoruz. \u00d6zellikle <code>utc_time<\/code> format\u0131n\u0131n <code>YYYY-MM-DDTHH:mm:ssZ<\/code> olmas\u0131 gerekti\u011fine dikkat edin; <code>toISOString()<\/code> metodu bu format\u0131 \u00fcretir, ancak milisaniyeleri kald\u0131rmak i\u00e7in <code>.slice(0, -5) + 'Z'<\/code> kullan\u0131yoruz. Son olarak, t\u00fcm bu bilgileri HNG g\u00f6revinin istedi\u011fi JSON yap\u0131s\u0131nda 200 durum kodu ile geri g\u00f6nderiyoruz. Unutmay\u0131n, <code>github_file_url<\/code> ve <code>github_repo_url<\/code> de\u011ferlerini kendi GitHub deponuzun ve dosyan\u0131z\u0131n ger\u00e7ek URL'leri ile de\u011fi\u015ftirmeniz gerekmektedir.<\/p>\n<div class=\"uzman-ipucu\">\n        UTC Zaman\u0131 Hesaplamas\u0131: JavaScript'in <code>Date<\/code> objesi varsay\u0131lan olarak yerel zaman diliminizi kullan\u0131r. Ancak <code>getUTCDay()<\/code> ve <code>toISOString()<\/code> gibi metotlar UTC (Koordineli Evrensel Saat) de\u011ferlerini d\u00f6nd\u00fcr\u00fcr. HNG g\u00f6revi genellikle milisaniyelerin olmamas\u0131n\u0131 ve sonunun 'Z' ile bitmesini bekler. Bu y\u00fczden <code>.slice(0, -5) + 'Z'<\/code> yayg\u0131n bir \u00e7\u00f6z\u00fcmd\u00fcr. Ayr\u0131ca, baz\u0131 test sistemleri UTC zaman\u0131n\u0131n +\/- 2 dakika toleransla do\u011fru olmas\u0131n\u0131 isteyebilir. Bu detaya dikkat edin!\n    <\/div>\n<p>Bu ad\u0131mlarla, HNG Stage 0 g\u00f6revinin temel API gereksinimlerini kar\u015f\u0131layan bir Express API'si ba\u015far\u0131yla olu\u015fturmu\u015f olursunuz. Yerel olarak \u00e7al\u0131\u015ft\u0131r\u0131p test ettikten sonra, bir sonraki a\u015fama olan da\u011f\u0131t\u0131ma ge\u00e7meye haz\u0131r olacaks\u0131n\u0131z. Bu sayede, API'nizi sadece kendi bilgisayar\u0131n\u0131zda de\u011fil, t\u00fcm internet \u00fczerinde eri\u015filebilir hale getirebilirsiniz.<\/p>\n<h2 id=\"api-testi-ve-yerel-dogrulama\">API'nizi Yerel Olarak Nas\u0131l Test Eder ve Do\u011frulay\u0131z?<\/h2>\n<p>API'mizi kodlad\u0131ktan sonra, her \u015feyin beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in onu test etmemiz kritik bir ad\u0131md\u0131r. Yerel olarak \u00e7al\u0131\u015fan API'nizi test etmek i\u00e7in birka\u00e7 y\u00f6ntem bulunmaktad\u0131r. Bu y\u00f6ntemler sayesinde, da\u011f\u0131t\u0131m \u00f6ncesinde potansiyel hatalar\u0131 veya yanl\u0131\u015f yap\u0131land\u0131rmalar\u0131 tespit edebilirsiniz.<\/p>\n<p><strong>1. Taray\u0131c\u0131 Kullanarak Test Etme:<\/strong> En basit y\u00f6ntemlerden biri, do\u011frudan web taray\u0131c\u0131n\u0131z\u0131 kullanmakt\u0131r. API'niz bir GET iste\u011fi bekledi\u011fi i\u00e7in, URL'ye parametreleri ekleyerek test edebilirsiniz. Uygulaman\u0131z <code>http:\/\/localhost:3000<\/code> adresinde \u00e7al\u0131\u015f\u0131rken, a\u015fa\u011f\u0131daki gibi bir URL'yi taray\u0131c\u0131n\u0131za yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nhttp:\/\/localhost:3000\/api?slack_name=your_slack_name&track=backend\n<\/pre>\n<p><\/code><\/p>\n<p>Burada <code>your_slack_name<\/code> yerine kendi Slack ad\u0131n\u0131z\u0131 ve <code>backend<\/code> yerine de HNG g\u00f6revinizdeki izi (track) yazmal\u0131s\u0131n\u0131z. Taray\u0131c\u0131, URL'ye bir GET iste\u011fi g\u00f6nderecek ve API'nizin d\u00f6nd\u00fcrd\u00fc\u011f\u00fc JSON yan\u0131t\u0131n\u0131 ekranda g\u00f6sterecektir. Bu y\u00f6ntem h\u0131zl\u0131 kontroller i\u00e7in idealdir, ancak daha karma\u015f\u0131k istekler (POST, PUT, DELETE) veya \u00f6zel ba\u015fl\u0131klar (headers) i\u00e7in yeterli de\u011fildir.<\/p>\n<p><strong>2. Postman veya Insomnia Kullanarak Test Etme:<\/strong> Daha profesyonel ve kapsaml\u0131 testler i\u00e7in Postman veya Insomnia gibi API test ara\u00e7lar\u0131n\u0131 kullanman\u0131z \u015fiddetle tavsiye edilir. Bu ara\u00e7lar, sadece GET isteklerini de\u011fil, t\u00fcm HTTP metotlar\u0131n\u0131 test etmenize, istek g\u00f6vdeleri (request bodies) g\u00f6ndermenize, \u00f6zel ba\u015fl\u0131klar eklemenize ve yan\u0131tlar\u0131 daha okunabilir bir formatta g\u00f6r\u00fcnt\u00fclemenize olanak tan\u0131r.<\/p>\n<p>Bir \u00f6rnek Postman iste\u011fi \u015f\u00f6yle g\u00f6r\u00fcnecektir:<\/p>\n<ul>\n<li><strong>Metot:<\/strong> GET<\/li>\n<li><strong>URL:<\/strong> <code>http:\/\/localhost:3000\/api<\/code><\/li>\n<li><strong>Query Parametreleri:<\/strong>\n<ul>\n<li><code>slack_name<\/code>: <code>your_slack_name<\/code><\/li>\n<li><code>track<\/code>: <code>backend<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u0130ste\u011fi g\u00f6nderdikten sonra, Postman size API'nizin d\u00f6nd\u00fcrd\u00fc\u011f\u00fc JSON yan\u0131t\u0131n\u0131, durum kodunu (\u00f6rne\u011fin 200 OK) ve di\u011fer ba\u015fl\u0131k bilgilerini g\u00f6sterecektir. Bu sayede, API'nizin beklenen formatta ve do\u011fru verilerle yan\u0131t verdi\u011fini do\u011frulayabilirsiniz. Ayr\u0131ca, parametreleri eksik g\u00f6ndererek veya ge\u00e7ersiz de\u011ferler vererek API'nizin hata y\u00f6netimini (400 Bad Request gibi) de test edebilirsiniz.<\/p>\n<p><strong>HNG Stage 0 G\u00f6revi \u0130\u00e7in Do\u011frulama:<\/strong> G\u00f6revin gerektirdi\u011fi t\u00fcm alanlar\u0131n (<code>slack_name<\/code>, <code>current_day<\/code>, <code>utc_time<\/code>, <code>track<\/code>, <code>github_file_url<\/code>, <code>github_repo_url<\/code>, <code>status_code<\/code>) do\u011fru formatta ve ge\u00e7erli de\u011ferlerle d\u00f6nd\u00fcr\u00fcld\u00fc\u011f\u00fcnden emin olun. \u00d6zellikle <code>utc_time<\/code>'\u0131n milisaniyeler olmadan ve 'Z' ile bitti\u011finden, ayr\u0131ca mevcut zamana g\u00f6re +\/- 2 dakikal\u0131k tolerans i\u00e7inde oldu\u011fundan emin olmak \u00f6nemlidir. Bu detaylar, g\u00f6revin kabul edilmesi i\u00e7in hayati \u00f6neme sahiptir. Bu kapsaml\u0131 testler, uygulaman\u0131z\u0131 buluta ta\u015f\u0131madan \u00f6nce potansiyel sorunlar\u0131 gidermenize ve kusursuz bir deneyim sunman\u0131za olanak tan\u0131r.<\/p>\n<h2 id=\"api-dagitimi-rendercom-ile-buluta-tasiyalim\">API Da\u011f\u0131t\u0131m\u0131: Render.com ile API'nizi Buluta Nas\u0131l Ta\u015f\u0131rs\u0131n\u0131z?<\/h2>\n<p>API'nizi yerel olarak ba\u015far\u0131yla test etti\u011finize g\u00f6re, \u015fimdi onu t\u00fcm d\u00fcnyan\u0131n eri\u015fimine a\u00e7ma zaman\u0131 geldi! Da\u011f\u0131t\u0131m (deployment), uygulaman\u0131z\u0131 bir sunucuya y\u00fckleme ve \u00e7al\u0131\u015f\u0131r hale getirme s\u00fcrecidir. Bu rehberde, basitli\u011fi ve \u00fccretsiz katman\u0131 nedeniyle Render.com platformunu kullanaca\u011f\u0131z. Render, GitHub entegrasyonu sayesinde kodunuzu otomatik olarak \u00e7ekip da\u011f\u0131tabilen modern bir bulut platformudur.<\/p>\n<h3 id=\"render-hesabi-olusturma-ve-proje-baglama\">Render Hesab\u0131 Olu\u015fturma ve Projenizi Ba\u011flama<\/h3>\n<p>\u0130lk ad\u0131m olarak, kodunuzu bir GitHub deposuna y\u00fcklemeniz gerekmektedir. E\u011fer hen\u00fcz yapmad\u0131ysan\u0131z, projenizin k\u00f6k dizininde bir Git deposu ba\u015flat\u0131n, t\u00fcm dosyalar\u0131n\u0131z\u0131 ekleyin, commit edin ve GitHub'da yeni bir depo olu\u015fturarak oraya push edin. GitHub depo URL'si, HNG g\u00f6revinin bir par\u00e7as\u0131 oldu\u011fu i\u00e7in bu ad\u0131m hayati \u00f6neme sahiptir.<\/p>\n<p>Daha sonra, Render.com adresine gidin ve bir hesap olu\u015fturun (e\u011fer yoksa). Genellikle GitHub hesab\u0131n\u0131zla giri\u015f yapma se\u00e7ene\u011fi sunulur, bu da entegrasyonu kolayla\u015ft\u0131r\u0131r. Hesap olu\u015fturup giri\u015f yapt\u0131ktan sonra, kontrol panelinize y\u00f6nlendirileceksiniz. Burada yeni bir hizmet olu\u015fturma se\u00e7ene\u011fi aray\u0131n, genellikle \"New Web Service\" (Yeni Web Hizmeti) olarak adland\u0131r\u0131l\u0131r.<\/p>\n<p>Render, GitHub deponuzu se\u00e7menizi isteyecektir. Projenizi i\u00e7eren depoyu se\u00e7in ve \"Connect\" (Ba\u011flan) d\u00fc\u011fmesine t\u0131klay\u0131n. Render, deponuzdaki dosyalar\u0131 otomatik olarak analiz edecek ve baz\u0131 yap\u0131land\u0131rma \u00f6nerilerinde bulunacakt\u0131r. Bu noktada, Node.js projenizi tan\u0131yacak ve buna uygun bir ortam haz\u0131rlayacakt\u0131r.<\/p>\n<h3 id=\"cevre-degiskenleri-ve-build-komutlari\">\u00c7evre De\u011fi\u015fkenleri ve Build Komutlar\u0131<\/h3>\n<p>Render, deponuzu ba\u011flad\u0131ktan sonra, hizmetinizin ad\u0131, b\u00f6lgesi, ana dal\u0131 (main\/master branch), k\u00f6k dizini (root directory) gibi temel ayarlar\u0131 yap\u0131land\u0131rman\u0131z\u0131 isteyecektir. En \u00f6nemli k\u0131s\u0131mlardan biri, Build Command (Derleme Komutu) ve Start Command (Ba\u015flatma Komutu) ayarlamalar\u0131d\u0131r.<\/p>\n<ul>\n<li><strong>Build Command (Derleme Komutu):<\/strong> Node.js projeleri i\u00e7in genellikle ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemek anlam\u0131na gelir. \u00c7o\u011fu durumda, bu komut <code>npm install<\/code> olacakt\u0131r.<\/li>\n<li><strong>Start Command (Ba\u015flatma Komutu):<\/strong> Uygulaman\u0131z\u0131 ba\u015flatan komuttur. Bizim durumumuzda, bu <code>node app.js<\/code> veya <code>npm start<\/code> olabilir. E\u011fer <code>package.json<\/code> dosyan\u0131zda bir <code>start<\/code> script'i tan\u0131mlad\u0131ysan\u0131z (\u00f6rne\u011fin <code>\"start\": \"node app.js\"<\/code>), <code>npm start<\/code> kullanmak daha iyidir.<\/li>\n<\/ul>\n<p><code>package.json<\/code> dosyan\u0131z\u0131 kontrol edelim veya g\u00fcncelleyelim:<\/p>\n<pre><code>\n{\n  \"name\": \"hng-express-api\",\n  \"version\": \"1.0.0\",\n  \"description\": \"HNG Stage 0 Express API Task\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"start\": \"node app.js\", \/\/ Bu sat\u0131r\u0131 ekleyin veya kontrol edin\n    \"test\": \"echo \\\"Error: no test specified\\\" && exit 1\"\n  },\n  \"keywords\": [],\n  \"author\": \"\",\n  \"license\": \"ISC\",\n  \"dependencies\": {\n    \"express\": \"^4.19.2\"\n  }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>B\u00f6ylece, Render'a \"bu uygulamay\u0131 ba\u015flatmak i\u00e7in <code>npm start<\/code> komutunu kullan\" talimat\u0131n\u0131 vermi\u015f olursunuz. Ayr\u0131ca, <code>app.js<\/code> dosyam\u0131zdaki port ayarlamas\u0131n\u0131 hat\u0131rlay\u0131n:<\/p>\n<pre><code>\nconst port = process.env.PORT || 3000;\n<\/pre>\n<p><\/code><\/p>\n<p>Render, uygulaman\u0131z i\u00e7in dinamik olarak bir <code>PORT<\/code> ortam de\u011fi\u015fkeni sa\u011flayacakt\u0131r. Bu sayede, uygulaman\u0131z Render'\u0131n beklentilerine uygun bir portta \u00e7al\u0131\u015facakt\u0131r. Render'da \"Environment Variables\" (\u00c7evre De\u011fi\u015fkenleri) b\u00f6l\u00fcm\u00fcnde, uygulamam\u0131z i\u00e7in \u00f6zel de\u011fi\u015fkenler tan\u0131mlayabiliriz. HNG g\u00f6revinin \u00f6zel bir gizli anahtar gerektirmedi\u011fini varsayarsak, bu b\u00f6l\u00fcm\u00fc \u015fimdilik bo\u015f b\u0131rakabiliriz. Ancak ger\u00e7ek d\u00fcnya projelerinde API anahtarlar\u0131, veritaban\u0131 ba\u011flant\u0131 dizeleri gibi hassas bilgileri burada saklars\u0131n\u0131z.<\/p>\n<p>T\u00fcm bu ayarlar\u0131 yapt\u0131ktan sonra, \"Create Web Service\" (Web Hizmeti Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n. Render, deponuzu klonlayacak, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckleyecek ve uygulaman\u0131z\u0131 ba\u015flatacakt\u0131r. Bu s\u00fcre\u00e7 birka\u00e7 dakika s\u00fcrebilir. Ba\u015far\u0131l\u0131 bir da\u011f\u0131t\u0131m\u0131n ard\u0131ndan, size uygulaman\u0131z\u0131n canl\u0131 URL'sini sa\u011flayacakt\u0131r (\u00f6rne\u011fin, <code>https:\/\/your-app-name.onrender.com<\/code>). Bu URL'yi kullanarak API'nizi internet \u00fczerinden test edebilirsiniz:<\/p>\n<pre><code>\nhttps:\/\/your-app-name.onrender.com\/api?slack_name=your_slack_name&track=backend\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ad\u0131mlar, yerel makinenizden ba\u011f\u0131ms\u0131z olarak \u00e7al\u0131\u015fan, \u00f6l\u00e7eklenebilir ve eri\u015filebilir bir Express API'ye sahip olman\u0131z\u0131 sa\u011flar. Da\u011f\u0131t\u0131m, geli\u015ftirme s\u00fcrecinin \u00f6nemli bir par\u00e7as\u0131d\u0131r ve Render gibi platformlar sayesinde bu s\u00fcreci olduk\u00e7a kolayla\u015ft\u0131r\u0131r.<\/p>\n<h2 id=\"ileri-duzey-ipuclari-ve-en-iyi-uygulamalar\">\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>\u0130lk Express API'nizi ba\u015far\u0131yla olu\u015fturup da\u011f\u0131tt\u0131n\u0131z. Bu harika bir ba\u015flang\u0131\u00e7! Ancak, daha sa\u011flam, g\u00fcvenli ve bak\u0131m\u0131 kolay API'lar geli\u015ftirmek i\u00e7in baz\u0131 ileri d\u00fczey ipu\u00e7lar\u0131 ve en iyi uygulamalar\u0131 bilmek \u00f6nemlidir. Bu bilgiler, sadece HNG g\u00f6revinizi tamamlaman\u0131za yard\u0131mc\u0131 olmakla kalmayacak, ayn\u0131 zamanda gelecekteki profesyonel projelerinizde de size yol g\u00f6sterecektir.<\/p>\n<p><strong>1. Hata Y\u00f6netimi (Error Handling):<\/strong> API'lar, beklendi\u011fi gibi gitmeyen durumlarla kar\u015f\u0131la\u015fabilir (\u00f6rne\u011fin, ge\u00e7ersiz giri\u015f, sunucu hatalar\u0131). Express'te, \u00f6zel bir hata i\u015fleyici middleware (orta katman) tan\u0131mlayarak bu hatalar\u0131 merkezi bir \u015fekilde y\u00f6netebilirsiniz. Bu, istemcilere tutarl\u0131 ve a\u00e7\u0131klay\u0131c\u0131 hata mesajlar\u0131 g\u00f6ndermenizi sa\u011flar, b\u00f6ylece uygulaman\u0131z daha kullan\u0131c\u0131 dostu olur. \u00d6rne\u011fin:<\/p>\n<pre><code>\n\/\/ T\u00fcm rotalardan sonra ekleyin\napp.use((err, req, res, next) => {\n  console.error(err.stack); \/\/ Hata detaylar\u0131n\u0131 logla\n  res.status(err.statusCode || 500).json({\n    message: err.message || 'Sunucu taraf\u0131nda bir hata olu\u015ftu.',\n    status_code: err.statusCode || 500\n  });\n});\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sayede, herhangi bir rotada <code>next(new Error('Bir \u015feyler yanl\u0131\u015f gitti!'))<\/code> \u00e7a\u011f\u0131rarak hatay\u0131 bu middleware'e iletebilirsiniz.<\/p>\n<p><strong>2. \u00c7evre De\u011fi\u015fkenlerinin Y\u00f6netimi (Environment Variables):<\/strong> Hassas bilgileri (veritaban\u0131 kimlik bilgileri, API anahtarlar\u0131 vb.) do\u011frudan kodunuzda saklamak yerine, \u00e7evre de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netmek en iyi uygulamad\u0131r. <code>dotenv<\/code> gibi bir paket kullanarak yerel geli\u015ftirme ortam\u0131n\u0131zda bu de\u011fi\u015fkenleri <code>.env<\/code> dosyas\u0131nda saklayabilirsiniz. Da\u011f\u0131t\u0131m platformlar\u0131 (Render gibi) genellikle kendi panelinden bu de\u011fi\u015fkenleri tan\u0131mlaman\u0131za olanak tan\u0131r, bu da g\u00fcvenli\u011fi art\u0131r\u0131r ve kodunuzu farkl\u0131 ortamlar aras\u0131nda ta\u015f\u0131nabilir hale getirir.<\/p>\n<p><strong>3. Logging (Loglama):<\/strong> Uygulaman\u0131z\u0131n canl\u0131 ortamda nas\u0131l performans g\u00f6sterdi\u011fini izlemek ve hatalar\u0131 ay\u0131klamak i\u00e7in loglama \u00e7ok \u00f6nemlidir. Morgan gibi bir HTTP istek logger middleware'i kullanarak gelen t\u00fcm istekleri ve yan\u0131tlar\u0131 konsola veya bir dosyaya kaydedebilirsiniz. Bu, API'nizin nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 anlaman\u0131za ve sorunlar\u0131 h\u0131zl\u0131ca tespit etmenize yard\u0131mc\u0131 olur.<\/p>\n<pre><code>\nconst morgan = require('morgan');\napp.use(morgan('dev')); \/\/ Geli\u015ftirme ortam\u0131 i\u00e7in basit bir log format\u0131\n<\/pre>\n<p><\/code><\/p>\n<p><strong>4. G\u00fcvenlik (Security):<\/strong> API'nizi k\u00f6t\u00fc niyetli sald\u0131r\u0131lardan korumak hayati \u00f6nem ta\u015f\u0131r. Helmet.js gibi Express middleware'leri, HTTP ba\u015fl\u0131klar\u0131n\u0131 uygun \u015fekilde ayarlayarak bilinen web g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n \u00e7o\u011funu otomatik olarak gidermeye yard\u0131mc\u0131 olur. Ayr\u0131ca, API anahtarlar\u0131 kullanarak eri\u015fimi k\u0131s\u0131tlamak, rate limiting (istek oran\u0131n\u0131 s\u0131n\u0131rlama) ve CORS (Cross-Origin Resource Sharing) ayarlar\u0131n\u0131 do\u011fru yapmak da \u00f6nemlidir. HNG Stage 0 g\u00f6revi i\u00e7in bu kadar detayl\u0131 g\u00fcvenlik \u00f6nlemleri gerekmese de, ger\u00e7ek d\u00fcnya uygulamalar\u0131nda bunlar olmazsa olmazd\u0131r.<\/p>\n<p><strong>5. Geriye Uyumluluk ve S\u00fcr\u00fcmleme (Versioning):<\/strong> API'niz geli\u015ftik\u00e7e, yeni \u00f6zellikler ekleyebilir veya mevcut olanlar\u0131 de\u011fi\u015ftirebilirsiniz. Bu durumda, API'nizin eski s\u00fcr\u00fcmlerini kullanan mevcut istemcilerin bozulmamas\u0131n\u0131 sa\u011flamak i\u00e7in s\u00fcr\u00fcmleme (versioning) kullanmak ak\u0131ll\u0131ca bir yakla\u015f\u0131md\u0131r (\u00f6rn: <code>\/api\/v1\/users<\/code>, <code>\/api\/v2\/users<\/code>). Bu, API'nizin uzun \u00f6m\u00fcrl\u00fc ve bak\u0131m\u0131 kolay olmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu ileri d\u00fczey ipu\u00e7lar\u0131n\u0131 uygulayarak, sadece \u00e7al\u0131\u015fan de\u011fil, ayn\u0131 zamanda g\u00fcvenli, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir API'lar geli\u015ftirebilirsiniz. Unutmay\u0131n, iyi bir API sadece do\u011fru veriyi d\u00f6nd\u00fcrmekle kalmaz, ayn\u0131 zamanda bu veriyi g\u00fcvenli, tutarl\u0131 ve etkili bir \u015fekilde sunar.<\/p>\n<h2 id=\"sonuc\">Sonu\u00e7: \u0130lk API'nizi Ba\u015far\u0131yla Da\u011f\u0131tt\u0131n\u0131z!<\/h2>\n<p>Tebrikler! Bu kapsaml\u0131 rehber sayesinde, Node.js ve Express kullanarak ilk RESTful API'nizi ba\u015far\u0131yla olu\u015fturdunuz, yerel olarak test ettiniz ve Render.com platformunda buluta da\u011f\u0131tt\u0131n\u0131z. HNG Stage 0 g\u00f6revinin t\u00fcm gereksinimlerini kar\u015f\u0131lad\u0131n\u0131z ve geli\u015ftirme yolculu\u011funuzda \u00f6nemli bir kilometre ta\u015f\u0131n\u0131 a\u015ft\u0131n\u0131z. Bu deneyim, sadece bir g\u00f6revi tamamlamaktan \u00f6te, size modern web geli\u015ftirmenin temel prensiplerini, API mimarisini ve bulut da\u011f\u0131t\u0131m\u0131n\u0131n inceliklerini \u00f6\u011fretti.<\/p>\n<p>\u00d6zellikle, Express'in nas\u0131l \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131, HTTP metotlar\u0131n\u0131n \u00f6nemini, sorgu parametreleriyle nas\u0131l etkile\u015fim kuruldu\u011funu ve JSON format\u0131nda nas\u0131l yan\u0131t verildi\u011fini kavrad\u0131n\u0131z. Ayr\u0131ca, <code>package.json<\/code> dosyas\u0131n\u0131n rol\u00fc, \u00e7evre de\u011fi\u015fkenlerinin kullan\u0131m\u0131 ve da\u011f\u0131t\u0131m s\u00fcre\u00e7leri hakk\u0131nda pratik bilgiler edindiniz. Render.com gibi bir platform arac\u0131l\u0131\u011f\u0131yla uygulaman\u0131z\u0131 canl\u0131ya almak, soyut kavramlar\u0131 somut bir sonuca d\u00f6n\u00fc\u015ft\u00fcrmenin ne kadar tatmin edici oldu\u011funu g\u00f6sterdi. Bu sayede, gelecekteki projelerinizde de benzer s\u00fcre\u00e7leri daha rahat uygulayabilece\u011finizden emin olabilirsiniz.<\/p>\n<p>\u015eimdi, bu yeni edindi\u011finiz becerilerle ne yapacaks\u0131n\u0131z? Belki de API'nize bir veritaban\u0131 entegre ederek (MongoDB, PostgreSQL gibi) daha karma\u015f\u0131k veri i\u015flemlerine ge\u00e7ebilirsiniz. Belki de bir kimlik do\u011frulama mekanizmas\u0131 ekleyerek API'nizi g\u00fcvenli hale getirebilir veya daha fazla endpoint olu\u015fturarak i\u015flevselli\u011fini geni\u015fletebilirsiniz. Geli\u015ftirme d\u00fcnyas\u0131 s\u0131n\u0131rs\u0131zd\u0131r ve bu ilk ad\u0131m\u0131n\u0131z, bu d\u00fcnyan\u0131n kap\u0131lar\u0131n\u0131 aralayan anahtard\u0131r. Unutmay\u0131n, s\u00fcrekli \u00f6\u011frenme ve pratik yapma, yeteneklerinizi geli\u015ftirmenin en iyi yoludur. Dolay\u0131s\u0131yla, bu ba\u015far\u0131y\u0131 kutlay\u0131n ve bir sonraki projenize heyecanla ba\u015flay\u0131n!<\/p>\n<h3 id=\"sikca-sorulan-sorular\">S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ol>\n<li>\n            <strong>HNG Stage 0 g\u00f6revi i\u00e7in veritaban\u0131 gerekiyor mu?<\/strong><\/p>\n<p>Hay\u0131r, HNG Stage 0 g\u00f6revi genellikle veritaban\u0131 ba\u011flant\u0131s\u0131 gerektirmez. API'nizden gelen sorgu parametrelerine dayanarak dinamik olarak bir JSON yan\u0131t\u0131 olu\u015fturman\u0131z beklenir. Bu sayede, da\u011f\u0131t\u0131m s\u00fcreci daha basitle\u015ftirilir ve temel API kavramlar\u0131na odaklan\u0131l\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>UTC zaman\u0131n\u0131 nas\u0131l do\u011fru hesaplar\u0131m ve formatlar\u0131m?<\/strong><\/p>\n<p>JavaScript'te <code>new Date().toISOString()<\/code> metodunu kullanarak ge\u00e7erli UTC zaman\u0131n\u0131 ISO 8601 format\u0131nda alabilirsiniz. HNG g\u00f6revinin beklentisi genellikle milisaniyeler olmadan ve sonu 'Z' ile biten <code>YYYY-MM-DDTHH:mm:ssZ<\/code> format\u0131d\u0131r. Bunu elde etmek i\u00e7in <code>new Date().toISOString().slice(0, -5) + 'Z'<\/code> kullanabilirsiniz. Bu, son 5 karakteri (milisaniyeler ve 'Z' d\u0131\u015f\u0131ndaki bir harf) kald\u0131r\u0131p 'Z' ekler.<\/p>\n<\/li>\n<li>\n            <strong><code>package.json<\/code>'daki <code>start<\/code> script'i neden \u00f6nemli?<\/strong><\/p>\n<p><code>start<\/code> script'i, uygulaman\u0131z\u0131 da\u011f\u0131t\u0131m platformlar\u0131nda (Render, Heroku, Vercel vb.) ba\u015flatmak i\u00e7in kullan\u0131lan standart bir komuttur. \u00c7o\u011fu platform, projenizi klonlad\u0131ktan sonra <code>npm start<\/code> veya <code>yarn start<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak uygulaman\u0131z\u0131 ba\u015flatmaya \u00e7al\u0131\u015f\u0131r. Bu sayede, platforma \u00f6zel bir ba\u015flang\u0131\u00e7 komutu belirtmenize gerek kalmaz.<\/p>\n<\/li>\n<li>\n            <strong>Hangi da\u011f\u0131t\u0131m platformlar\u0131n\u0131 kullanabilirim? Render.com d\u0131\u015f\u0131nda alternatifler var m\u0131?<\/strong><\/p>\n<p>Evet, Render.com d\u0131\u015f\u0131nda bir\u00e7ok pop\u00fcler da\u011f\u0131t\u0131m platformu bulunmaktad\u0131r. En yayg\u0131n alternatiflerden baz\u0131lar\u0131 \u015funlard\u0131r: Heroku, Vercel (daha \u00e7ok frontend odakl\u0131 ama serverless fonksiyonlar i\u00e7in de kullan\u0131l\u0131r), Railway, Cyclic ve DigitalOcean App Platform. Her birinin kendine \u00f6zg\u00fc avantajlar\u0131 ve \u00fccretsiz katmanlar\u0131 olabilir. Se\u00e7iminiz, projenizin ihtiya\u00e7lar\u0131na ve ki\u015fisel tercihinize g\u00f6re de\u011fi\u015febilir.<\/p>\n<\/li>\n<li>\n            <strong>API g\u00fcvenli\u011fini nas\u0131l art\u0131rabilirim?<\/strong><\/p>\n<p>API g\u00fcvenli\u011fini art\u0131rmak i\u00e7in birka\u00e7 temel ad\u0131m vard\u0131r: Helmet.js gibi middleware'ler kullanarak HTTP ba\u015fl\u0131klar\u0131n\u0131 g\u00fc\u00e7lendirmek, rate limiting ile DDOS sald\u0131r\u0131lar\u0131n\u0131 \u00f6nlemek, API anahtarlar\u0131 veya JWT (JSON Web Tokens) ile kimlik do\u011frulama\/yetkilendirme eklemek, CORS ayarlar\u0131n\u0131 do\u011fru yap\u0131land\u0131rmak ve her zaman HTTPS kullanmak \u00f6nemlidir. Ayr\u0131ca, girdi do\u011frulama (input validation) ve hata mesajlar\u0131nda hassas bilgileri a\u00e7\u0131\u011fa \u00e7\u0131karmamak da kritik \u00f6neme sahiptir.<\/p>\n<\/li>\n<\/ol>\n<p><\/body><br \/>\n<\/html><\/p>\n","protected":false},"excerpt":{"rendered":"\u0130lk Express API&#8217;nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla&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":[1],"tags":[],"class_list":{"0":"post-32246","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>Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi<\/title>\n<meta name=\"description\" content=\"\u0130lk Express API&#039;nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.\" \/>\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\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi\" \/>\n<meta property=\"og:description\" content=\"\u0130lk Express API&#039;nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-19T09:31:34+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi\",\"datePublished\":\"2025-10-19T09:31:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\"},\"wordCount\":3930,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\",\"name\":\"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-19T09:31:34+00:00\",\"description\":\"\u0130lk Express API'nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi","description":"\u0130lk Express API'nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.","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\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi","og_description":"\u0130lk Express API'nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.","og_url":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-19T09:31:34+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi","datePublished":"2025-10-19T09:31:34+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/"},"wordCount":3930,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/","name":"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-19T09:31:34+00:00","description":"\u0130lk Express API'nizi in\u015fa edip buluta ta\u015f\u0131mak g\u00f6z korkutucu g\u00f6r\u00fcnebilir, ancak bu rehberle HNG Stage 0 g\u00f6revinizi ba\u015far\u0131yla tamamlayacaks\u0131n\u0131z. Node.js ve Express kullanarak nas\u0131l temel bir API olu\u015fturaca\u011f\u0131n\u0131z\u0131, yerel olarak test edece\u011finizi ve Render.com gibi bir platformda nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedin.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/express-api-olusturma-ve-dagitma-hng-stage-0-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Express API Olu\u015fturma ve Da\u011f\u0131tma: HNG Stage 0 Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32246","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=32246"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/32246\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=32246"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=32246"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=32246"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}