Skip to main content

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 MetoduRota / EndpointAçıklama
GET/feedYayınlanmış tüm gönderileri listeler.
GET/post/:idBelirtilen ID'ye sahip gönderiyi getirir.
POST/userYeni bir kullanıcı oluşturur.
POST/postYeni bir gönderi (taslak) oluşturur.
PUT/post/publish/:idGönderiyi yayınlar (published = true).
DELETE/post/:idBelirtilen 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)

  1. 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.

  1. Docker neden önerildi?

Geliştirme ortamında PostgreSQL’i hızlı başlatıp temiz bir şekilde kaldırmak için idealdir.

  1. 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.

  1. 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!