Prisma ve PostgreSQL ile REST API Geliştirme Rehberi
Prisma ve PostgreSQL ile REST API Geliştirme
Bu rehberde ne öğreneceksiniz?
Bu rehberde Prisma ORM kullanarak PostgreSQL veritabanına bağlı bir REST API geliştireceksiniz.
TypeScript, Docker ve Express ile modern bir API mimarisi kuracaksınız.
CRUD işlemlerini uçtan uca uygulayarak gerçek bir blog API’si oluşturacaksınız.
🧠 Teknik Özet
Konu: Prisma + PostgreSQL ile REST API geliştirme
Amaç: SQL yazmadan güvenli ve tip destekli veri erişimi sağlamak
Yöntem: Docker ile PostgreSQL, Prisma ORM, Express ve TypeScript
Ön Gereksinimler
- Node.js 14 veya üzeri
- Docker yüklü bir geliştirme ortamı
- TypeScript ve REST API mantığına temel aşinalık
1️⃣ TypeScript Projesini Oluşturma
Önce boş bir proje dizini oluşturun:
mkdir my-blog
cd my-blog
npm init -y
- Bu komut, temel bir package.json dosyası oluşturur.
TypeScript araçlarını kurun:
npm install typescript ts-node @types/node --save-dev
- Bu paketler TypeScript derleme ve çalıştırma işlemlerini sağlar.
TypeScript yapılandırmasını ekleyin:
nano tsconfig.json
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
- Bu ayarlar katı tip denetimi ve modern JavaScript desteği sağlar.
2️⃣ Docker ile PostgreSQL ve Prisma Kurulumu
- Prisma CLI’yi projeye ekleyin:
npm install prisma --save-dev
- Bu araç şema ve migration yönetimini sağlar.
PostgreSQL için Docker yapılandırması oluşturun:
nano docker-compose.yml
version: '3.8'
services:
postgres:
image: postgres:10.3
restart: always
environment:
- POSTGRES_USER=rabisu
- POSTGRES_PASSWORD=guclu_sifre
ports:
- "5432:5432"
volumes:
- postgres:/var/lib/postgresql/data
volumes:
postgres:
- Bu yapılandırma PostgreSQL’i izole bir ortamda çalıştırır.
Veritabanını başlatın:
docker-compose up -d
- Bu komut PostgreSQL konteynerini arka planda çalıştırır.
Prisma’yı başlatın:
npx prisma init
- Bu komut schema.prisma ve .env dosyalarını oluşturur.
.env dosyasını düzenleyin:
DATABASE_URL="postgresql://rabisu:guclu_sifre@localhost:5432/my-blog?schema=public"
- Bu değişken Prisma’nın veritabanına bağlanmasını sağlar.
3️⃣ Veri Modelini Tanımlama ve Migration
- Prisma şemasını açın:
nano prisma/schema.prisma
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 modeller kullanıcı ve yazı ilişkisini tanımlar.
Veritabanı tablolarını oluşturun:
npx prisma migrate dev --name init
- Bu komut migration dosyası üretir ve tabloyu oluşturur.
4️⃣ Prisma Client ile Veri İşlemleri
- Prisma Client’ı kurun:
npm install @prisma/client
- Bu paket tip güvenli sorgular sağlar.
Kaynak dizini oluşturun:
mkdir src
nano src/index.ts
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const user = await prisma.user.create({
data: {
email: '[email protected]',
name: 'Ali'
}
})
console.log(user)
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect())
- Bu örnek veritabanına kullanıcı ekler.
5️⃣ Express ile REST API Kurulumu
- Express’i yükleyin:
npm install express
npm install @types/express --save-dev
- Bu paketler HTTP API geliştirmeyi sağlar.
Sunucu kodunu yazın:
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('API http://localhost:3000 adresinde çalışıyor')
})
- Bu kod /users endpoint’i üzerinden kullanıcıları listeler.
6️⃣ CRUD API Rotaları
- Yayınlanmış yazıları getir
app.get('/feed', async (req, res) => {
const posts = await prisma.post.findMany({
where: { published: true },
include: { author: true }
})
res.json(posts)
})
Kullanıcı oluştur
app.post('/user', async (req, res) => {
const user = await prisma.user.create({
data: req.body
})
res.json(user)
})
Yazı yayınla
app.put('/post/publish/:id', async (req, res) => {
const post = await prisma.post.update({
where: { id: Number(req.params.id) },
data: { published: true }
})
res.json(post)
})
Yazı sil
app.delete('/post/:id', async (req, res) => {
const post = await prisma.post.delete({
where: { id: Number(req.params.id) }
})
res.json(post)
})
- Bu uç noktalar tam bir CRUD API sağlar.
❓ Sıkça Sorulan Sorular (SSS)
1. Prisma neden tercih edilir? SQL yazmadan tip güvenli sorgular üretir.
2. Docker zorunlu mu? Hayır, ama ortam tutarlılığı sağlar.
3. Bu API production için uygun mu? Evet, doğru yapılandırma ile ölçeklenebilir.
4. Prisma performanslı mı? Evet, query engine oldukça optimize çalışır.
Sonuç
Bu rehberde Prisma ve PostgreSQL ile modern bir REST API geliştirdiniz. TypeScript sayesinde hataları erkenden yakaladınız. Bu mimari, gerçek projelerde güvenle kullanılabilir.
Bu yapıyı Rabisu Bulut altyapısında dakikalar içinde çalıştırabilirsiniz. 🚀