
Said Enes Subaşı
6 Temmuz 2025
REST API nedir?
REST API’ler istemcilerin sunucularla veri alışverişi yaparken HTTP kullanabilmesine olanak sağlayan ve çok sık kullanılan bir yaklaşımdır. Node.js JavaScript kodunu web tarayıcınızın dışında çalıştırmanıza olanak sağlayarak sunucu taraflı JavaScript geliştirmeyi mümkün kılar.
1.Ortamın Ayarlanması
Öncelikle Node.js in bilgisayarda kurulu olduğuna emin olunmalıdır. Eğer yoksa https://nodejs.org adresinden istenilen LTS sürümü indirilip kurulabilir. Bu işlem tamamlandıysa projenin kurulacağı bir klasör oluşturulmalı ve terminalden içine girilmelidir.
mkdir node-rest-api
cd node-rest-api
2.Projenin Başlatılması ve gereken paketlerin kurulması
Projenin başlatılması için şu komut girilmelidir.
npm init -yBu komut package.json dosyasını oluşturur. Ardından Express kütüphanesi kurulmalıdır.
npm install expressGeliştirme ortamı için veriler değiştirildikçe sisteme otomatik olarak gelmesini sağlamak için nodemon eklentisi de kurulabilir.
npm install --save-dev nodemon3.Ana dosyanın oluşturulması
touch index.jsİlk oluşan dosya içeriği genelde şu şekildedir:
const express = require('express');
const app = express();
const PORT = 3000;
app.use(express.json());
app.get('/', (req, res) => {
res.send('REST API Çalışıyor!');
});
app.listen(PORT, () => {
console.log(`Sunucu http://localhost:${PORT} adresinde çalışıyor`);
});
4.REST API metotları
Örnek bir index.js dosyasının oluşturulduğunu düşünelim. Bu index.js Node.js ile yazılan sunucu uygulamasının başlangıç noktasıdır ve oluşturulduktan sonra;
- express'in import edilmesi
- app.listen(..) yapılarak sunucunun çalıştırılması
- api yollarının tanımlanması
- middlewares eklenmesi
İlk aşamalarda burada gerçekleşir.
Api metotlarına gelinecek olursa ilk index.js oluşturulduktan sonra;
const express = require('express');
const app = express();
const PORT = 3000;
app.use(express.json());
let users = [
{ id: 1, name: 'Ali' },
{ id: 2, name: 'Ayşe' }
];GET ile tüm verileri listeleme
app.get('/users', (req, res) => { res.json(users); });Postman kullanılarak test edilebilir.
GET http://localhost:3000/usersGET ile tek kullanıcıyı getirme
app.get('/users/:id', (req, res) => { const user = users.find(u => u.id == req.params.id); user ? res.json(user) : res.status(404).send('Kullanıcı bulunamadı'); });Örnek olarak;
GET http://localhost:3000/users/2POST ile yeni kullanıcı ekleme
app.post('/users', (req, res) => { const { name } = req.body; const newUser = { id: users.length + 1, name }; users.push(newUser); res.status(201).json(newUser); });Örnek olarak;
POST http://localhost:3000/users Body (JSON): { "name": "Mehmet" }PUT ile kullanıcı bilgisi güncelleme
app.put('/users/:id', (req, res) => { const user = users.find(u => u.id == req.params.id); if (user) { user.name = req.body.name; res.json(user); } else { res.status(404).send("Kullanıcı bulunamadı."); } });Örnek olarak;
PUT http://localhost:3000/users/1 Body: { "name": "Yeni Ali" }PATCH ile sadece belirli alanları güncelleme
app.patch('/users/:id', (req, res) => { const user = users.find(u => u.id == req.params.id); if (user) { if (req.body.name) user.name = req.body.name; res.json(user); } else { res.status(404).send("Kullanıcı bulunamadı."); } });Örnek olarak;
PATCH http://localhost:3000/users/2 Body: { "name": "Ayşe Yılmaz" }DELETE ile kullanıcıyı silme
app.delete('/users/:id', (req, res) => { const userIndex = users.findIndex(u => u.id == req.params.id); if (userIndex !== -1) { users.splice(userIndex, 1); res.send("Kullanıcı silindi."); } else { res.status(404).send("Kullanıcı bulunamadı."); } });Örnek olarak;
DELETE http://localhost:3000/users/2
işlemleri bahsedildiği gibi gerçekleştirilebilir.
Proje nasıl daha modüler hale getirilir?
Projenin devamında oluşturulacak projenin genel yapısı şu şekilde incelenebilir.
/project-root
│
├── index.js
├── routes/
│ └── userRoutes.js
├── controllers/
│ └── userController.js
├── models/
│ └── userModel.js
├── db/
│ └── connection.js
├── middlewares/
│ └── authMiddleware.js
├── utils/
│ └── helpers.js
controllers/userController.jsÖnemli fonksiyonlar burada tanımlanır.
const getAllUsers = (req, res) => { res.json([{ id: 1, name: 'Ali' }]); }; const createUser = (req, res) => { const user = req.body; res.status(201).json(user); }; module.exports = { getAllUsers, createUser };routes/userRoutes.jsApi adresleri ve endpointler burada tanımlandıktan sonra tekrardan index.js içerisine gönderilebilir.
const express = require('express'); const router = express.Router(); const userController = require('../controllers/userController'); router.get('/', userController.getAllUsers); router.post('/', userController.createUser); module.exports = router;models/userModel.jsVeritabanı modeli burada tanımlanır.
const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ name: String, email: String }); module.exports = mongoose.model('User', userSchema);db/connection.jsVeritabanına bağlanma işlemleri burada ele alınır.
const mongoose = require('mongoose'); mongoose.connect(process.env.MONGO_URI) .then(() => console.log('Veritabanına bağlandı')) .catch(err => console.error(err));middlewares/authMiddleware.jsGiriş kontrolü, yetkilendirme gibi ara katman işlemleri burada gerçekleştirilir.
const auth = (req, res, next) => { const token = req.headers.authorization; if (token === 'secrettoken') { next(); // devam et } else { res.status(401).send('Yetkisiz'); } }; module.exports = auth;utils/helpers.jsKüçük yardımcı fonksiyonlar burada tanımlanır.
function capitalize(text) { return text.charAt(0).toUpperCase() + text.slice(1); } module.exports = { capitalize };
Bu rehberde temellerden başlanılarak gerçek bir proje mimarisine kadar olan yapı gösterilmiştir. Sadece çalışan bir API değil aynı anda sürdürülebilir,test edilebilir ve genişletilebilir bir sistem kurmaya bu blog yazısı incelenerek başlanılabilir.
