Ceci est une ancienne révision du document !
API REST avec Fastify + Prisma
Partie 1
Objectif :
- Installer le projet
- Configurer Fastify
- Configurer Prisma
- Créer un modèle
- Exposer des routes CRUD simples
1. Prérequis
- Node.js >= 18
- PostgreSQL installé
2. Initialisation du projet
mkdir fastify-prisma-api cd fastify-prisma-api npm init -y
Installation dépendances :
npm install fastify @prisma/client npm install -D prisma typescript ts-node-dev @types/node
Initialiser Prisma :
npx prisma init
3. Configuration TypeScript
Créer `tsconfig.json` :
{
"compilerOptions": {
"target": "ES2020",
"module": "CommonJS",
"rootDir": "./src",
"outDir": "./dist",
"strict": true,
"esModuleInterop": true
}
}
Ajouter dans `package.json` :
"scripts": {
"dev": "ts-node-dev --respawn src/server.ts"
}
4. Configuration Prisma
Fichier `.env` :
DATABASE_URL="postgresql://user:password@localhost:5432/fastifydb"
Modifier `prisma/schema.prisma` :
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
createdAt DateTime @default(now())
}
Créer la base :
npx prisma migrate dev --name init
5. Structure simple du projet
src/ ├── server.ts └── prisma.ts
6. Prisma Client
`src/prisma.ts`
import { PrismaClient } from "@prisma/client"
export const prisma = new PrismaClient()
7. Serveur + Routes simples
`src/server.ts`
import Fastify from "fastify"
import { prisma } from "./prisma"
const app = Fastify({ logger: true })
app.get("/posts", async () => {
return prisma.post.findMany()
})
app.post("/posts", async (request, reply) => {
const { title, content } = request.body as any
const post = await prisma.post.create({
data: { title, content }
})
reply.code(201)
return post
})
app.listen({ port: 3000 }, () => {
console.log("Server running on http://localhost:3000")
})