Prisma PostgreSQL REST API Kurulumu: Adım Adım Rehber
📌 Meta Açıklaması: TypeScript, Prisma ve PostgreSQL kullanarak REST API nasıl kurulur, Express ile hangi adımlar izlenir—hepsini öğrenin.
🎯 Bu Rehberde Ne Öğreneceksiniz?
- TypeScript tabanlı bir Express projesinin nasıl başlatılacağını.
- PostgreSQL’i Docker ile kurup Prisma ORM ile bağlantılandırmayı.
- Veri modeli tanımlayıp tabloları oluşturmayı.
- REST API rotalarını GET, POST, PUT, DELETE ile uygulamayı.
- Birim testlerden bağımsız şekilde üretime hazır bir basit API mimarisi kurmayı.
🧩 Teknik Özet
Bu rehber, TypeScript + Express + Prisma + PostgreSQL yığınıyla bir blog uygulaması için REST API oluşturmayı anlatıyor. Amaç: veritabanı sorgularını ORM (Prisma) ile kolaylaştırmak. Adımlar: proje kurulumu → Prisma + PostgreSQL yapılandırması → veri modeli tanımı → CRUD rotaları yazımı.
1️⃣ Adım — TypeScript Projenizi Hazırlayın
Yeni proje klasörü oluşturarak içine girin:
mkdir blog-api
cd blog-api
Bu komut proje klasörünü yaratır.
npm init -y ile proje tanım dosyasını oluşturun.
Geliştirme bağımlılıklarını yükleyin:
npm install typescript ts-node @types/node @types/express --save-dev
Bu komut TypeScript ve çalıştırma ortamını hazırlar.
tsconfig.json dosyasını oluşturun veya aşağıdaki gibi ayarlayın:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
Bu kod TypeScript derleyici seçeneklerini belirler.
npm install express @prisma/client komutuyla gereken kütüphaneleri yükleyin.
Bu adım Express sunucusunu ve Prisma client’ı projenize ekler.
2️⃣ Adım — PostgreSQL + Prisma Kurulumu
npm install prisma --save-dev komutuyla Prisma CLI’yı yükleyin.
Bu, Prisma komutlarını çalıştırabilmeniz için gerekir.
docker-compose.yml adında bir dosya oluşturun ve aşağıdaki içeriği ekleyin:
version: '3.8'
services:
postgres:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=rbuser
- POSTGRES_PASSWORD=R@b1suPass
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
volumes:
postgres_data:
Bu yapı, PostgreSQL veritabanını Docker ile ayağa kaldırır.
Veritabanını çalıştırmak için:
docker-compose up -d
Bu komut hizmeti arka planda aktif eder.
npx prisma init komutunu çalıştırın.
Bu komut prisma/schema.prisma dosyasını ve .env dosyasını oluşturur.
.env içinde DATABASE_URL değerini şu şekilde güncelleyin:
DATABASE_URL="postgresql://rbuser:R@b1suPass@localhost:5432/blogdb?schema=public"
Bu satır veritabanı bağlantı bilgilerini içerir.
3️⃣ Adım — Veri Modeli Tanımı ve Tabloların Oluşturulması
prisma/schema.prisma dosyasına aşağıdaki modelleri ekleyin:
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
Bu kod kullanıcı ve gönderi modellerini tanımlar.
Terminalde çalıştırın:
npx prisma migrate dev --name init
Bu komut tabloları veritabanına uygular ve Prisma Client oluşturur.
Prisma Client’ı yükleyin:
npm install @prisma/client
Bu adım veritabanı sorgularına hazır hale gelir.
4️⃣ Adım — Basit Prisma Sorgularını İnceleyin
src/index.ts dosyasını oluşturun ve aşağıdaki kodu ekleyin:
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
const newUser = await prisma.user.create({
data: {
name: "Alice",
email: "[email protected]",
posts: {
create: { title: "Hello World" }
}
},
include: { posts: true }
});
console.log("Yeni kullanıcı:", newUser);
const allUsers = await prisma.user.findMany({
include: { posts: true }
});
console.log("Tüm kullanıcılar:", allUsers);
}
main()
.catch(e => console.error(e))
.finally(async () => await prisma.$disconnect());
Bu kod kullanıcı oluşturur ve tüm kullanıcıları veritabanından çeker.
Çalıştırın:
npx ts-node src/index.ts
Bu komut script dosyasını çalıştırarak sonuçları terminalde gösterir.
5️⃣ Adım — İlk REST API Rotanızı Uygulayın
src/index.ts’yi aşağıdaki gibi güncelleyin:
import express from "express";
import { PrismaClient } from "@prisma/client";
const app = express();
const prisma = new PrismaClient();
app.use(express.json());
app.get("/users", async (req, res) => {
const users = await prisma.user.findMany();
res.json(users);
});
app.listen(3000, () =>
console.log("REST API sunucusu hazır: http://localhost:3000")
);
Bu kod bir GET /users rotası tanımlar.
Komutla başlatın:
npx ts-node src/index.ts
Sunucu başlar ve /users isteğine cevap verir.
| HTTP Metodu | Rota / Endpoint | Açıklama |
|---|---|---|
| GET | /feed | Yayınlanmış tüm gönderileri listeler. |
| GET | /post/:id | Belirtilen ID'ye sahip gönderiyi getirir. |
| POST | /user | Yeni bir kullanıcı oluşturur. |
| POST | /post | Yeni bir gönderi (taslak) oluşturur. |
| PUT | /post/publish/:id | Gönderiyi yayınlar (published = true). |
| DELETE | /post/:id | Belirtilen gönderiyi siler. |
Kod örneği (bir kısmı):
// Yeni rota örneği
app.put("/post/publish/:id", async (req, res) => {
const { id } = req.params;
const post = await prisma.post.update({
where: { id: Number(id) },
data: { published: true }
});
res.json(post);
});
Bu kod bir gönderiyi “published = true” yapar.
❓ Sıkça Sorulan Sorular (SSS)
- Neden Prisma kullanmalı?
Prisma, tür güvenliği sağlar ve SQL’i doğrudan yazmak yerine modelleme ile çalışmanıza olanak tanır.
- Docker neden önerildi?
Geliştirme ortamında PostgreSQL’i hızlı başlatıp temiz bir şekilde kaldırmak için idealdir.
- TypeScript zorunlu mu?
Hayır zorunlu değil ama REST API’lerde tip güvenliği ve kod okunabilirliği için çok yararlıdır.
- Rotalar hazır mı yoksa genişletilmeli mi?
Bu rehber temel CRUD rotalarını sağlar. İstersen kimlik doğrulama (JWT), hata yönetimi gibi ileri konular eklenebilir.
🏁 Sonuç
Bu rehberde, TypeScript + Prisma + PostgreSQL ile bir REST API kurulumunu ve nasıl kullanılacağını adım adım gördünüz. Kodlarınızı daha hızlı yazabilir, veritabanı sorgularını daha güvenli yönetebilirsiniz. 🚀 Bu teknikleri Rabisu Bulut platformunuzda hemen uygulamaya geçirebilirsiniz!