Ana içeriğe geç

Prisma ve Oak ile RESTful API Nasıl Oluşturulur

Prisma, Deno'da çalışmak için en çok talep edilen modüllerden biri olmuştur. Prisma'nın geliştirici deneyimi oldukça üst düzeydir ve pek çok kalıcı veri depolama teknolojisiyle uyumlu çalışır, bu nedenle talep de anlaşılır.

Prisma'yı Deno ile nasıl kullanacağınızı göstermek için buradayız.

Bu Kılavuzda, Oak ve Prisma kullanarak Deno'da basit bir RESTful API kuracağız.

Hadi başlayalım.

Kaynağı görüntüle veya video kılavuzuna göz atın.

Uygulamayı Kurma

rest-api-with-prisma-oak klasörünü oluşturalım ve oraya geçelim:

mkdir rest-api-with-prisma-oak
cd rest-api-with-prisma-oak

Sonra, Deno ile prisma init komutunu çalıştıralım:

deno run --allow-read --allow-env --allow-write npm:prisma@latest init

Bu, prisma/schema.prisma dosyasını oluşturacaktır. Bunu aşağıdaki gibi güncelleyelim:

generator client {
provider = "prisma-client-js"
previewFeatures = ["deno"]
output = "../generated/client"
}

datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}

model Dinosaur {
id Int @id @default(autoincrement())
name String @unique
description String
}
not

Prisma ayrıca bir .env dosyası ile bir DATABASE_URL ortam değişkeni oluşturur. DATABASE_URL'yi bir PostgreSQL bağlantı dizesine atayalım. Bu örnekte, ücretsiz bir Supabase PostgreSQL veritabanı kullanacağız.

Sonrasında, veritabanı şemasını oluşturalım:

deno run -A npm:prisma@latest db push

Bunun tamamlanmasının ardından, Prisma Client'ı oluşturmalıyız:

deno run -A --unstable npm:prisma@latest generate --no-engine

Prisma Veri Platformunda Accelerate Kurulumu

Prisma Veri Platformu ile başlamanız için:

  1. Ücretsiz Prisma Veri Platformu hesabına kaydolun.
  2. Bir proje oluşturun.
  3. Oluşturduğunuz projeye gidin.
  4. Veritabanınızın bağlantı dizesini vererek Accelerate'i etkinleştirin.
  5. Accelerate bağlantı dizesini oluşturun ve panonuza kopyalayın.

DATABASE_URL'deki bağlantı dizesini, prisma:// ile başlayan Accelerate bağlantı dizesiyle değiştirin.

Sonrasında, veritabanını beslemek için bir tohum betiği oluşturalım.

Veritabanınızı Besleyin

./prisma/seed.ts oluşturun:

touch prisma/seed.ts

Ve ./prisma/seed.ts dosyasında:

import { Prisma, PrismaClient } from "../generated/client/deno/edge.ts";

const prisma = new PrismaClient({
datasourceUrl: envVars.DATABASE_URL,
});

const dinosaurData: Prisma.DinosaurCreateInput[] = [
{
name: "Aardonyx",
description: "Sauropodların evrimindeki erken bir aşama.",
},
{
name: "Abelisaurus",
description: "Abel'in kertenkele kafatasından yeniden inşa edildi.",
},
{
name: "Acanthopholis",
description: "Hayır, bu bir Yunan şehri değil.",
},
];

/**
* Veritabanını besle.
*/

for (const u of dinosaurData) {
const dinosaur = await prisma.dinosaur.create({
data: u,
});
console.log(`ID'si: ${dinosaur.id} olan bir dinozor oluşturuldu`);
}
console.log(`Besleme tamamlandı.`);

await prisma.$disconnect();

Artık seed.ts dosyasını şu komutla çalıştırabiliriz:

deno run -A --env prisma/seed.ts

[!TIP]

--env bayrağı, Deno'ya .env dosyasından ortam değişkenlerini yüklemesini söylemek için kullanılır.

Bunu yaptıktan sonra, aşağıdaki komutu çalıştırarak Prisma Studio'da verilerinizi görebilmelisiniz:

deno run -A npm:prisma studio

Aşağıdaki ekran görüntüsü benzeyen bir şey görmelisiniz:

Yeni dinozorlar Prisma panosunda


API Rotalarınızı Oluşturun

API rotalarını oluşturmak için oak kullanacağız. Şimdilik onları basit tutalım.

main.ts dosyasını oluşturalım:

touch main.ts

Sonra, main.ts dosyanızda:

import { PrismaClient } from "./generated/client/deno/edge.ts";
import { Application, Router } from "https://deno.land/x/oak@v11.1.0/mod.ts";

/**
* Başlat.
*/

const prisma = new PrismaClient({
datasources: {
db: {
url: envVars.DATABASE_URL,
},
},
});
const app = new Application();
const router = new Router();

/**
* Rotaları ayarlayın.
*/

router
.get("/", (context) => {
context.response.body = "Dinozor API'sine hoş geldiniz!";
})
.get("/dinosaur", async (context) => {
// Tüm dinozorları al.
const dinosaurs = await prisma.dinosaur.findMany();
context.response.body = dinosaurs;
})
.get("/dinosaur/:id", async (context) => {
// ID'ye göre bir dinozoru al.
const { id } = context.params;
const dinosaur = await prisma.dinosaur.findUnique({
where: {
id: Number(id),
},
});
context.response.body = dinosaur;
})
.post("/dinosaur", async (context) => {
// Yeni bir dinozor oluştur.
const { name, description } = await context.request.body("json").value;
const result = await prisma.dinosaur.create({
data: {
name,
description,
},
});
context.response.body = result;
})
.delete("/dinosaur/:id", async (context) => {
// ID'ye göre bir dinozoru sil.
const { id } = context.params;
const dinosaur = await prisma.dinosaur.delete({
where: {
id: Number(id),
},
});
context.response.body = dinosaur;
});

/**
* Middleware'i ayarlayın.
*/

app.use(router.routes());
app.use(router.allowedMethods());

/**
* Sunucuyu başlat.
*/

await app.listen({ port: 8000 });

Artık bunu çalıştırabiliriz:

deno run -A --env main.ts

localhost:8000/dinosaurs adresini ziyaret edelim:

REST API'den tüm dinozorların listesi

Ardından, yeni bir kullanıcı oluşturmak için şu curl komutunu kullanalım:

curl -X POST http://localhost:8000/dinosaur -H "Content-Type: application/json" -d '{"name": "Deno", "description":"Dünyada yürüyen en hızlı, en güvenli, en kolay kullanılan dinozor."}'

Artık Prisma Studio'da yeni bir satır görmelisiniz:

Prisma'da yeni dinozor Deno

Harika!

Sırada Ne Var?

Deno ve Prisma ile bir sonraki uygulamanızı geliştirmek, veri modelleme, tür güvenliği ve sağlam IDE desteği ile sezgisel bir geliştirici deneyimi sundukları için daha verimli ve eğlenceli olacaktır.

bilgi

Prisma'yı Deno Deploy ile bağlamaya ilginiz varsa, bu harika kılavuza göz atın.