{"id":22829,"date":"2025-02-13T08:43:08","date_gmt":"2025-02-13T05:43:08","guid":{"rendered":"https:\/\/www.cenuta.com\/blog\/?p=22829"},"modified":"2025-02-13T08:43:09","modified_gmt":"2025-02-13T05:43:09","slug":"node-js-ile-api-gelistirme-baslangic-rehberi","status":"publish","type":"post","link":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/","title":{"rendered":"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi"},"content":{"rendered":"\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_71 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0130\u00e7indekiler<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a20a768c9b98\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a20a768c9b98\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Nodejs_Nedir\" title=\"Node.js Nedir?\">Node.js Nedir?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Nodejs_API_Gelistirme_Icin_Gerekli_Araclar\" title=\"Node.js API Geli\u015ftirme \u0130\u00e7in Gerekli Ara\u00e7lar\">Node.js API Geli\u015ftirme \u0130\u00e7in Gerekli Ara\u00e7lar<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Adim_1_Nodejs_Projesi_Olusturma\" title=\"Ad\u0131m 1: Node.js Projesi Olu\u015fturma\">Ad\u0131m 1: Node.js Projesi Olu\u015fturma<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Adim_2_Expressjs_Kurulumu\" title=\"Ad\u0131m 2: Express.js Kurulumu\">Ad\u0131m 2: Express.js Kurulumu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Adim_3_Ilk_API_Endpointini_Olusturma\" title=\"Ad\u0131m 3: \u0130lk API Endpoint&#8217;ini Olu\u015fturma\">Ad\u0131m 3: \u0130lk API Endpoint&#8217;ini Olu\u015fturma<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Adim_4_API_Icin_CRUD_Islemleri_Gelistirme\" title=\"Ad\u0131m 4: API \u0130\u00e7in CRUD \u0130\u015flemleri Geli\u015ftirme\">Ad\u0131m 4: API \u0130\u00e7in CRUD \u0130\u015flemleri Geli\u015ftirme<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#GET_%E2%80%93_Kullanicilari_Listeleme\" title=\"GET &#8211; Kullan\u0131c\u0131lar\u0131 Listeleme\">GET &#8211; Kullan\u0131c\u0131lar\u0131 Listeleme<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#POST_%E2%80%93_Yeni_Kullanici_Ekleme\" title=\"POST &#8211; Yeni Kullan\u0131c\u0131 Ekleme\">POST &#8211; Yeni Kullan\u0131c\u0131 Ekleme<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#PUT_%E2%80%93_Kullanici_Guncelleme\" title=\"PUT &#8211; Kullan\u0131c\u0131 G\u00fcncelleme\">PUT &#8211; Kullan\u0131c\u0131 G\u00fcncelleme<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#DELETE_%E2%80%93_Kullanici_Silme\" title=\"DELETE &#8211; Kullan\u0131c\u0131 Silme\">DELETE &#8211; Kullan\u0131c\u0131 Silme<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Adim_5_APIyi_Gelistirme_ve_Guclendirme\" title=\"Ad\u0131m 5: API\u2019yi Geli\u015ftirme ve G\u00fc\u00e7lendirme\">Ad\u0131m 5: API\u2019yi Geli\u015ftirme ve G\u00fc\u00e7lendirme<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#1_CORS_Destegi_Ekleyin\" title=\"1. CORS Deste\u011fi Ekleyin\">1. CORS Deste\u011fi Ekleyin<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#2_Hata_Yonetimi_Ekleyin\" title=\"2. Hata Y\u00f6netimi Ekleyin\">2. Hata Y\u00f6netimi Ekleyin<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#3_JWT_ile_Kimlik_Dogrulama_Ekleyin\" title=\"3. JWT ile Kimlik Do\u011frulama Ekleyin\">3. JWT ile Kimlik Do\u011frulama Ekleyin<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#Sonuc\" title=\"Sonu\u00e7\">Sonu\u00e7<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Nodejs_Nedir\"><\/span><strong>Node.js Nedir?<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Node.js, <strong>JavaScript tabanl\u0131, a\u00e7\u0131k kaynakl\u0131 ve asenkron olay g\u00fcd\u00fcml\u00fc bir \u00e7al\u0131\u015fma ortam\u0131d\u0131r.<\/strong> Genellikle <strong>web sunucular\u0131 ve API geli\u015ftirme<\/strong> s\u00fcre\u00e7lerinde kullan\u0131l\u0131r. Node.js, <strong>Chrome\u2019un V8 motorunu kullanarak JavaScript kodlar\u0131n\u0131 sunucu taraf\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131r.<\/strong><\/p>\n\n\n\n<p>Node.js\u2019in \u00f6ne \u00e7\u0131kan \u00f6zellikleri \u015funlard\u0131r:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Asenkron ve olay g\u00fcd\u00fcml\u00fc \u00e7al\u0131\u015fma<\/strong><\/li>\n\n\n\n<li><strong>H\u0131zl\u0131 ve \u00f6l\u00e7eklenebilir olmas\u0131<\/strong><\/li>\n\n\n\n<li><strong>Tek dil (JavaScript) ile hem istemci hem de sunucu geli\u015ftirme imkan\u0131<\/strong><\/li>\n\n\n\n<li><strong>Zengin paket ekosistemi (NPM)<\/strong><\/li>\n<\/ul>\n\n\n\n<p>Bu rehberde <strong>Node.js kullanarak s\u0131f\u0131rdan bir RESTful API geli\u015ftirmeyi<\/strong> \u00f6\u011frenece\u011fiz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Nodejs_API_Gelistirme_Icin_Gerekli_Araclar\"><\/span><strong>Node.js API Geli\u015ftirme \u0130\u00e7in Gerekli Ara\u00e7lar<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>API geli\u015ftirmeye ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki ara\u00e7lara ihtiyac\u0131m\u0131z var:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Node.js<\/strong> (\u0130ndirmek i\u00e7in: <a href=\"https:\/\/nodejs.org\/\">https:\/\/nodejs.org<\/a>)<\/li>\n\n\n\n<li><strong>Express.js<\/strong> (H\u0131zl\u0131 API geli\u015ftirme i\u00e7in Node.js framework\u2019\u00fc)<\/li>\n\n\n\n<li><strong>Postman veya cURL<\/strong> (API testleri i\u00e7in)<\/li>\n\n\n\n<li><strong>MongoDB veya PostgreSQL<\/strong> (Opsiyonel \u2013 Veritaban\u0131 ba\u011flant\u0131s\u0131 i\u00e7in)<\/li>\n<\/ul>\n\n\n\n<p>E\u011fer Node.js sisteminizde kurulu de\u011filse, <strong>Node.js\u2019in resmi sitesinden<\/strong> uygun s\u00fcr\u00fcm\u00fc indirip kurabilirsiniz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adim_1_Nodejs_Projesi_Olusturma\"><\/span><strong>Ad\u0131m 1: Node.js Projesi Olu\u015fturma<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u0130lk olarak yeni bir proje klas\u00f6r\u00fc olu\u015fturun ve i\u00e7ine girin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir node-api &amp;&amp; cd node-api\n<\/code><\/pre>\n\n\n\n<p>Daha sonra <strong>npm ile bir proje ba\u015flat\u0131n:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm init -y\n<\/code><\/pre>\n\n\n\n<p>Bu komut, projeniz i\u00e7in <strong>package.json<\/strong> dosyas\u0131n\u0131 olu\u015fturur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adim_2_Expressjs_Kurulumu\"><\/span><strong>Ad\u0131m 2: Express.js Kurulumu<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Express.js, Node.js \u00fczerinde API geli\u015ftirmeyi <strong>kolayla\u015ft\u0131ran minimal bir framework\u2019t\u00fcr.<\/strong> Projeye eklemek i\u00e7in \u015fu komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install express\n<\/code><\/pre>\n\n\n\n<p>Kurulum tamamland\u0131ktan sonra, temel bir Express sunucusu olu\u015ftural\u0131m.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adim_3_Ilk_API_Endpointini_Olusturma\"><\/span><strong>Ad\u0131m 3: \u0130lk API Endpoint&#8217;ini Olu\u015fturma<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p><strong>server.js<\/strong> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine \u015fu kodlar\u0131 ekleyin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const express = require('express');\nconst app = express();\nconst PORT = 3000;\n\n\/\/ JSON verilerini kullanabilmek i\u00e7in middleware\napp.use(express.json());\n\n\/\/ Basit bir GET endpoint'i\napp.get('\/', (req, res) =&gt; {\n    res.send('Node.js API\u2019ye ho\u015f geldiniz!');\n});\n\n\/\/ Sunucuyu ba\u015flat\napp.listen(PORT, () =&gt; {\n    console.log(`Sunucu ${PORT} portunda \u00e7al\u0131\u015f\u0131yor...`);\n});\n<\/code><\/pre>\n\n\n\n<p>Ard\u0131ndan sunucuyu \u00e7al\u0131\u015ft\u0131rmak i\u00e7in terminalde \u015fu komutu kullan\u0131n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>node server.js\n<\/code><\/pre>\n\n\n\n<p>Taray\u0131c\u0131n\u0131zda <strong><a href=\"http:\/\/localhost:3000\/\">http:\/\/localhost:3000\/<\/a><\/strong> adresine giderseniz <strong>&#8220;Node.js API\u2019ye ho\u015f geldiniz!&#8221;<\/strong> mesaj\u0131n\u0131 g\u00f6receksiniz. \ud83c\udf89<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adim_4_API_Icin_CRUD_Islemleri_Gelistirme\"><\/span><strong>Ad\u0131m 4: API \u0130\u00e7in CRUD \u0130\u015flemleri Geli\u015ftirme<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u015eimdi basit bir <strong>kullan\u0131c\u0131 y\u00f6netim API\u2019si<\/strong> olu\u015fturaca\u011f\u0131z. A\u015fa\u011f\u0131daki i\u015flemleri yapaca\u011f\u0131z:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GET<\/strong> \u2192 T\u00fcm kullan\u0131c\u0131lar\u0131 getir<\/li>\n\n\n\n<li><strong>POST<\/strong> \u2192 Yeni kullan\u0131c\u0131 ekle<\/li>\n\n\n\n<li><strong>PUT<\/strong> \u2192 Kullan\u0131c\u0131 g\u00fcncelle<\/li>\n\n\n\n<li><strong>DELETE<\/strong> \u2192 Kullan\u0131c\u0131 sil<\/li>\n<\/ul>\n\n\n\n<p>\u00d6ncelikle, ge\u00e7ici olarak kullan\u0131c\u0131lar\u0131 saklamak i\u00e7in bir dizi olu\u015ftural\u0131m:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>let users = &#091;\n    { id: 1, name: \"Ali\" },\n    { id: 2, name: \"Ay\u015fe\" }\n];\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"GET_%E2%80%93_Kullanicilari_Listeleme\"><\/span><strong>GET &#8211; Kullan\u0131c\u0131lar\u0131 Listeleme<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>app.get('\/users', (req, res) =&gt; {\n    res.json(users);\n});\n<\/code><\/pre>\n\n\n\n<p>Bu endpoint taray\u0131c\u0131da <strong><a href=\"http:\/\/localhost:3000\/users\">http:\/\/localhost:3000\/users<\/a><\/strong> adresine gidildi\u011finde <strong>t\u00fcm kullan\u0131c\u0131lar\u0131 JSON format\u0131nda<\/strong> d\u00f6nd\u00fcrecektir.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"POST_%E2%80%93_Yeni_Kullanici_Ekleme\"><\/span><strong>POST &#8211; Yeni Kullan\u0131c\u0131 Ekleme<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>app.post('\/users', (req, res) =&gt; {\n    const newUser = {\n        id: users.length + 1,\n        name: req.body.name\n    };\n    users.push(newUser);\n    res.status(201).json(newUser);\n});\n<\/code><\/pre>\n\n\n\n<p>Bu API&#8217;yi test etmek i\u00e7in Postman veya cURL ile \u015fu iste\u011fi yapabilirsiniz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST http:\/\/localhost:3000\/users -H \"Content-Type: application\/json\" -d '{\"name\": \"Mehmet\"}'\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"PUT_%E2%80%93_Kullanici_Guncelleme\"><\/span><strong>PUT &#8211; Kullan\u0131c\u0131 G\u00fcncelleme<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>app.put('\/users\/:id', (req, res) =&gt; {\n    const user = users.find(u =&gt; u.id === parseInt(req.params.id));\n    if (!user) return res.status(404).send(\"Kullan\u0131c\u0131 bulunamad\u0131.\");\n    \n    user.name = req.body.name;\n    res.json(user);\n});\n<\/code><\/pre>\n\n\n\n<p>Bu endpoint, belirli bir kullan\u0131c\u0131n\u0131n ismini g\u00fcncelleyerek <strong>JSON format\u0131nda d\u00f6nd\u00fcrecektir.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"DELETE_%E2%80%93_Kullanici_Silme\"><\/span><strong>DELETE &#8211; Kullan\u0131c\u0131 Silme<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>app.delete('\/users\/:id', (req, res) =&gt; {\n    users = users.filter(u =&gt; u.id !== parseInt(req.params.id));\n    res.send(\"Kullan\u0131c\u0131 silindi.\");\n});\n<\/code><\/pre>\n\n\n\n<p>Bu API \u00e7a\u011fr\u0131ld\u0131\u011f\u0131nda ilgili kullan\u0131c\u0131 listeden kald\u0131r\u0131l\u0131r.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Adim_5_APIyi_Gelistirme_ve_Guclendirme\"><\/span><strong>Ad\u0131m 5: API\u2019yi Geli\u015ftirme ve G\u00fc\u00e7lendirme<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>\u015eimdi API\u2019mizi daha profesyonel hale getirmek i\u00e7in \u015fu ad\u0131mlar\u0131 uygulayabiliriz:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"1_CORS_Destegi_Ekleyin\"><\/span><strong>1. CORS Deste\u011fi Ekleyin<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>E\u011fer API\u2019niz ba\u015fka bir web sitesi taraf\u0131ndan kullan\u0131lacaksa <strong>CORS (Cross-Origin Resource Sharing)<\/strong> ayarlar\u0131n\u0131 yapmal\u0131s\u0131n\u0131z. Bunu yapmak i\u00e7in <code>cors<\/code> mod\u00fcl\u00fcn\u00fc y\u00fckleyin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install cors\n<\/code><\/pre>\n\n\n\n<p>Daha sonra a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const cors = require('cors');\napp.use(cors());\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"2_Hata_Yonetimi_Ekleyin\"><\/span><strong>2. Hata Y\u00f6netimi Ekleyin<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Hatalar\u0131 daha iyi y\u00f6netmek i\u00e7in <strong>try-catch<\/strong> bloklar\u0131 ekleyebilirsiniz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>app.get('\/users\/:id', (req, res) =&gt; {\n    try {\n        const user = users.find(u =&gt; u.id === parseInt(req.params.id));\n        if (!user) throw new Error(\"Kullan\u0131c\u0131 bulunamad\u0131.\");\n        res.json(user);\n    } catch (error) {\n        res.status(404).json({ message: error.message });\n    }\n});\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"3_JWT_ile_Kimlik_Dogrulama_Ekleyin\"><\/span><strong>3. JWT ile Kimlik Do\u011frulama Ekleyin<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h3>\n\n\n\n<p>Kullan\u0131c\u0131 giri\u015fini g\u00fcvenli hale getirmek i\u00e7in <strong>JSON Web Token (JWT)<\/strong> kullanabilirsiniz:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install jsonwebtoken\n<\/code><\/pre>\n\n\n\n<p>Bu mod\u00fclle g\u00fcvenli oturum y\u00f6netimi sa\u011flayabilirsiniz.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Sonuc\"><\/span><strong>Sonu\u00e7<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p>Bu rehberde <strong>Node.js ve Express.js kullanarak temel bir API geli\u015ftirme s\u00fcrecini<\/strong> \u00f6\u011frendik. \u0130\u015fte yapt\u0131klar\u0131m\u0131z\u0131n \u00f6zeti:<\/p>\n\n\n\n<p>\u2705 Express.js ile bir <strong>RESTful API kurduk.<\/strong><br>\u2705 <strong>GET, POST, PUT, DELETE<\/strong> istekleriyle CRUD i\u015flemlerini ger\u00e7ekle\u015ftirdik.<br>\u2705 <strong>CORS ve hata y\u00f6netimi<\/strong> ekledik.<br>\u2705 <strong>Kimlik do\u011frulama (JWT) gibi eklemelerle<\/strong> API\u2019yi daha g\u00fcvenli hale getirdik.<\/p>\n\n\n\n<p>Bu API\u2019yi MongoDB veya PostgreSQL gibi bir veritaban\u0131na ba\u011flayarak daha geli\u015fmi\u015f hale getirebilirsiniz.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js Nedir? Node.js, JavaScript tabanl\u0131, a\u00e7\u0131k kaynakl\u0131 ve asenkron olay<a href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/\">&#8230;<\/a><\/p>\n","protected":false},"author":4,"featured_media":22826,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[691,88],"class_list":["post-22829","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ipuclari","tag-node-js","tag-yazilim"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v18.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi - Cenuta Blog\" \/>\n<meta property=\"og:description\" content=\"Node.js Nedir? Node.js, JavaScript tabanl\u0131, a\u00e7\u0131k kaynakl\u0131 ve asenkron olay...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Cenuta Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cenutacom\" \/>\n<meta property=\"article:published_time\" content=\"2025-02-13T05:43:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-02-13T05:43:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1250\" \/>\n\t<meta property=\"og:image:height\" content=\"750\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@cenutacom\" \/>\n<meta name=\"twitter:site\" content=\"@cenutacom\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u00d6mer Y\u00fcksel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/#organization\",\"name\":\"Cenuta Telekom\u00fcnikasyon Anonim \u015eirketi\",\"url\":\"https:\/\/www.cenuta.com\/blog\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/cenutacom\",\"https:\/\/www.instagram.com\/cenutacom\/\",\"https:\/\/www.linkedin.com\/company\/cenuta\",\"https:\/\/www.youtube.com\/cenuta\",\"https:\/\/twitter.com\/cenutacom\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/#logo\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2020\/08\/logo_siyah.png\",\"contentUrl\":\"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2020\/08\/logo_siyah.png\",\"width\":805,\"height\":200,\"caption\":\"Cenuta Telekom\u00fcnikasyon Anonim \u015eirketi\"},\"image\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/#website\",\"url\":\"https:\/\/www.cenuta.com\/blog\/\",\"name\":\"Cenuta Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.cenuta.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#primaryimage\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg\",\"contentUrl\":\"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg\",\"width\":1250,\"height\":750},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#webpage\",\"url\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/\",\"name\":\"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi - Cenuta Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#primaryimage\"},\"datePublished\":\"2025-02-13T05:43:08+00:00\",\"dateModified\":\"2025-02-13T05:43:09+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.cenuta.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi\"}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#webpage\"},\"author\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/#\/schema\/person\/c3f8b14a9a6acaea989a4fe54816fcb4\"},\"headline\":\"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi\",\"datePublished\":\"2025-02-13T05:43:08+00:00\",\"dateModified\":\"2025-02-13T05:43:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#webpage\"},\"wordCount\":670,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg\",\"keywords\":[\"Node.Js\",\"Yaz\u0131l\u0131m\"],\"articleSection\":[\"\u0130pu\u00e7lar\u0131\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#respond\"]}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/#\/schema\/person\/c3f8b14a9a6acaea989a4fe54816fcb4\",\"name\":\"\u00d6mer Y\u00fcksel\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/www.cenuta.com\/blog\/#personlogo\",\"inLanguage\":\"tr\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/bf728f844bc7928492269e4485efa490?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/bf728f844bc7928492269e4485efa490?s=96&d=mm&r=g\",\"caption\":\"\u00d6mer Y\u00fcksel\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"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:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi - Cenuta Blog","og_description":"Node.js Nedir? Node.js, JavaScript tabanl\u0131, a\u00e7\u0131k kaynakl\u0131 ve asenkron olay...","og_url":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/","og_site_name":"Cenuta Blog","article_publisher":"https:\/\/www.facebook.com\/cenutacom","article_published_time":"2025-02-13T05:43:08+00:00","article_modified_time":"2025-02-13T05:43:09+00:00","og_image":[{"width":1250,"height":750,"url":"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_creator":"@cenutacom","twitter_site":"@cenutacom","twitter_misc":{"Yazan:":"\u00d6mer Y\u00fcksel","Tahmini okuma s\u00fcresi":"5 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Organization","@id":"https:\/\/www.cenuta.com\/blog\/#organization","name":"Cenuta Telekom\u00fcnikasyon Anonim \u015eirketi","url":"https:\/\/www.cenuta.com\/blog\/","sameAs":["https:\/\/www.facebook.com\/cenutacom","https:\/\/www.instagram.com\/cenutacom\/","https:\/\/www.linkedin.com\/company\/cenuta","https:\/\/www.youtube.com\/cenuta","https:\/\/twitter.com\/cenutacom"],"logo":{"@type":"ImageObject","@id":"https:\/\/www.cenuta.com\/blog\/#logo","inLanguage":"tr","url":"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2020\/08\/logo_siyah.png","contentUrl":"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2020\/08\/logo_siyah.png","width":805,"height":200,"caption":"Cenuta Telekom\u00fcnikasyon Anonim \u015eirketi"},"image":{"@id":"https:\/\/www.cenuta.com\/blog\/#logo"}},{"@type":"WebSite","@id":"https:\/\/www.cenuta.com\/blog\/#website","url":"https:\/\/www.cenuta.com\/blog\/","name":"Cenuta Blog","description":"","publisher":{"@id":"https:\/\/www.cenuta.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.cenuta.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":"ImageObject","@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#primaryimage","inLanguage":"tr","url":"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg","contentUrl":"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg","width":1250,"height":750},{"@type":"WebPage","@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#webpage","url":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/","name":"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi - Cenuta Blog","isPartOf":{"@id":"https:\/\/www.cenuta.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#primaryimage"},"datePublished":"2025-02-13T05:43:08+00:00","dateModified":"2025-02-13T05:43:09+00:00","breadcrumb":{"@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.cenuta.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi"}]},{"@type":"Article","@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#article","isPartOf":{"@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#webpage"},"author":{"@id":"https:\/\/www.cenuta.com\/blog\/#\/schema\/person\/c3f8b14a9a6acaea989a4fe54816fcb4"},"headline":"Node.js ile API Geli\u015ftirme: Ba\u015flang\u0131\u00e7 Rehberi","datePublished":"2025-02-13T05:43:08+00:00","dateModified":"2025-02-13T05:43:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#webpage"},"wordCount":670,"commentCount":0,"publisher":{"@id":"https:\/\/www.cenuta.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.cenuta.com\/blog\/wp-content\/uploads\/2025\/02\/node.js-api-gelistirme.jpg","keywords":["Node.Js","Yaz\u0131l\u0131m"],"articleSection":["\u0130pu\u00e7lar\u0131"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.cenuta.com\/blog\/node-js-ile-api-gelistirme-baslangic-rehberi\/#respond"]}]},{"@type":"Person","@id":"https:\/\/www.cenuta.com\/blog\/#\/schema\/person\/c3f8b14a9a6acaea989a4fe54816fcb4","name":"\u00d6mer Y\u00fcksel","image":{"@type":"ImageObject","@id":"https:\/\/www.cenuta.com\/blog\/#personlogo","inLanguage":"tr","url":"https:\/\/secure.gravatar.com\/avatar\/bf728f844bc7928492269e4485efa490?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bf728f844bc7928492269e4485efa490?s=96&d=mm&r=g","caption":"\u00d6mer Y\u00fcksel"}}]}},"_links":{"self":[{"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/posts\/22829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/comments?post=22829"}],"version-history":[{"count":1,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/posts\/22829\/revisions"}],"predecessor-version":[{"id":22830,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/posts\/22829\/revisions\/22830"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/media\/22826"}],"wp:attachment":[{"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/media?parent=22829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/categories?post=22829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.cenuta.com\/blog\/wp-json\/wp\/v2\/tags?post=22829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}