Sadece arayüz (Frontend) kodlamak yetmez. Modern uygulamalar veritabanıyla konuşan, güvenli ve hızlı çalışan API'lere ihtiyaç duyar. Express.js ile kendi REST API'mizi yazıyoruz.
Node.js, JavaScript'i tarayıcıdan çıkarıp doğrudan işletim sistemi üzerinde çalıştırmamızı sağlayan çalışma zamanı (runtime) ortamıdır. Express.js ise Node.js üzerinde web sunucuları ve API'ler oluşturmayı olağanüstü kolaylaştıran minimal bir web framework'üdür.
1. RESTful API Nedir?
REST (Representational State Transfer), sistemlerin birbiriyle internet üzerinden iletişim kurması için standartlaşmış bir mimari yapıdır. Temel HTTP metotlarını kullanır:
- GET: Veri okumak / getirmek (Örn: Kullanıcıları listele)
- POST: Yeni veri oluşturmak (Örn: Yeni üye kaydı)
- PUT / PATCH: Mevcut veriyi güncellemek (Örn: Profil resmi değiştir)
- DELETE: Veri silmek (Örn: Yorumu sil)
2. Express.js Projesini Başlatmak
Boş bir klasör oluşturup terminali açın ve projemizi ayağa kaldıralım:
# Package.json oluştur
npm init -y
# Gerekli paketleri kur
npm install express cors dotenv
# Geliştirme kolaylığı için nodemon'u kur (kod değiştikçe sunucuyu resetler)
npm install --save-dev nodemon
3. İlk Sunucumuzu Kodlayalım (server.js)
Proje dizininde server.js (veya index.js) dosyası oluşturun:
const express = require('express');
const cors = require('cors'); // Farklı domainlerden erişime izin verir
const app = express();
// Middleware'ler (Gelen istekleri işlemek için)
app.use(cors());
app.use(express.json()); // Gelen isteklerdeki JSON gövdesini (body) parse eder
// Basit bir bellek-içi (in-memory) veritabanı simülasyonu
let kullanicilar = [
{ id: 1, isim: 'Ahmet', meslek: 'Developer' },
{ id: 2, isim: 'Ayşe', meslek: 'Tasarımcı' }
];
// --- API ENDPOINT'LERI ---
// GET: Tüm kullanıcıları listele
app.get('/api/users', (req, res) => {
res.status(200).json({ success: true, data: kullanicilar });
});
// GET: Tek bir kullanıcı bul
app.get('/api/users/:id', (req, res) => {
const user = kullanicilar.find(u => u.id === parseInt(req.params.id));
if (!user) {
return res.status(404).json({ success: false, message: 'Kullanıcı bulunamadı' });
}
res.status(200).json({ success: true, data: user });
});
// POST: Yeni kullanıcı ekle
app.post('/api/users', (req, res) => {
const { isim, meslek } = req.body; // İstemciden gelen veriyi al
if (!isim || !meslek) {
return res.status(400).json({ success: false, message: 'İsim ve meslek zorunludur' });
}
const yeniKullanici = {
id: kullanicilar.length + 1,
isim: isim,
meslek: meslek
};
kullanicilar.push(yeniKullanici);
res.status(201).json({ success: true, data: yeniKullanici });
});
// DELETE: Kullanıcı sil
app.delete('/api/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const kullaniciIndex = kullanicilar.findIndex(u => u.id === userId);
if (kullaniciIndex === -1) {
return res.status(404).json({ success: false, message: 'Kullanıcı bulunamadı' });
}
kullanicilar.splice(kullaniciIndex, 1);
res.status(200).json({ success: true, message: 'Kullanıcı silindi' });
});
// Sunucuyu başlat
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Sunucu http://localhost:${PORT} adresinde çalışıyor`);
});
4. API Nasıl Test Edilir?
Yukarıdaki kodu çalıştırdıktan sonra (node server.js), bir tarayıcıda http://localhost:3000/api/users adresine giderseniz JSON formatındaki veriyi doğrudan görebilirsiniz.
Ancak POST, PUT, DELETE gibi işlemleri tarayıcıdan test etmek zordur. Bunun için geliştiriciler Postman veya Insomnia gibi API test araçlarını kullanırlar. VS Code kullanıyorsanız "Thunder Client" eklentisini de yükleyebilirsiniz.
5. Gerçek Hayatta Mimari Nasıl Olur?
Yukarıdaki örnek her şeyi tek dosyaya yazar. Profesyonel projelerde "MVC (Model-View-Controller)" veya benzeri mimariler kullanılır:
- Routes: Endpoint URL'lerini tanımlar (Örn:
routes/userRoutes.js) - Controllers: İstek geldiğinde çalışacak mantığı içerir (Yukarıdaki fonksiyonların içi)
- Models: Veritabanı (MongoDB, PostgreSQL) şemalarını tanımlar
Herkese açık API'ler geliştirirken güvenlik çok kritiktir. İstekleri sınırlamak için express-rate-limit kullanın (DDoS saldırılarını önler). HTTP başlıklarını güvenli hale getirmek için helmet paketini kullanın. Kimlik doğrulama için JWT (JSON Web Token) standarttır.
