L’auteur a choisi le Diversity in Tech Fund pour recevoir un don dans le cadre du programme Write for DOnations.
Prisma est une boîte à outils de base de données open source. Il se compose de trois outils principaux :
Ces outils sont conçus pour optimiser la productivité d’un développeur d’applications dans les flux de travail de ses bases de données. L’un des principaux avantages de Prisma réside dans le niveau d’abstraction qu’il offre : Au lieu de trouver des requêtes SQL complexes ou des migrations de schéma, en utilisant Prisma, les développeurs d’applications peuvent travailler avec leur base de données en réfléchissant de manière plus intuitive sur leurs données.
Dans ce tutoriel, vous allez créer une API REST pour une petite application de blogs dans TypeScript à l’aide de Prisma et d’une base de données PostgreSQL. Vous allez configurer votre base de données PostgreSQL localement avec Docker et implémenter des itinéraires API REST en utilisant Express. À la fin du tutoriel, vous disposerez d’un serveur web qui fonctionne localement sur votre machine, capable de répondre aux diverses demandes HTTP et de lire et écrire des données dans la base de données.
Ce tutoriel suppose que :
Il vous sera utile d’avoir des connaissances de base sur les API TypeScript et REST, mais pas nécessaire pour suivre ce tutoriel.
Au cours de cette étape, vous allez configurer un projet TypeScript simple en utilisant npm
. Ce projet constituera la base de l’API REST que vous allez développer tout au long de ce tutoriel.
Tout d’abord, créez un nouveau répertoire pour votre projet :
- mkdir my-blog
Ensuite, naviguez dans le répertoire et initialisez un projet npm
vide. Notez que l’option -y
signifie ici signifie que vous ignorez les invites interactives de la commande. Pour parcourir les invites, supprimez -y
de la commande :
- cd my-blog
- npm init -y
Pour plus d’informations sur ces invites, vous pouvez suivre l’étape 1 dans Comment utiliser les modules Node.js avec npm et package.json.
Vous obtiendrez un résultat similaire à ce qui suit, avec les réponses par défaut en place :
OutputWrote to /.../my-blog/package.json:
{
"name": "my-blog",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Cette commande crée un fichier package.json
minimal qui vous servira de fichier de configuration pour votre projet npm
. Vous êtes maintenant prêt à configurer TypeScript dans votre projet.
Exécutez la commande suivante pour procéder à une configuration simple de TypeScript :
- npm install typescript ts-node @types/node --save-dev
Vous installerez ainsi trois paquets en tant que dépendances de développement dans votre projet :
typescript
: la chaîne d’outils TypeScript.ts-node
: un paquet qui exécutera les applications TypeScript sans compilation préalable à JavaScript.@types/node
: les définitions de type TypeScript pour Node.js.La dernière chose à faire consiste à ajouter un fichier tsconfig.json
pour vous assurer que TypeScript est correctement configuré pour l’application que vous allez développer.
Tout d’abord, exécutez la commande suivante pour créer le fichier :
- nano tsconfig.json
Ajoutez le code JSON suivant dans le fichier :
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
Enregistrez et quittez le fichier.
Il s’agit d’une configuration standard et minimale pour un projet TypeScript. Si vous souhaitez en savoir plus sur les propriétés individuelles du fichier de configuration, vous pouvez les consulter dans la documentation de TypeScript.
Vous avez configuré votre projet TypeScript simple en utilisant npm
. Ensuite, vous allez configurer votre base de données PostgreSQL avec Docker et y connecter Prisma.
Au cours de cette étape, vous allez installer la CLI Prisma, créer votre fichier de schéma Prisma, configurer PostgreSQL avec Docker et y connecter Prisma. Le schéma Prisma est le fichier de configuration principal de votre configuration Prisma et contient votre schéma de base de données.
Commencez par installer la CLI Prisma avec la commande suivante :
- npm install @prisma/cli --save-dev
L’une des meilleures pratiques recommande d’installer la CLI Prisma localement dans votre projet (par opposition à une installation globale). Cela permet d’éviter les conflits de versions dans le cas où vous disposeriez de plusieurs projets Prisma sur votre machine.
Ensuite, vous allez configurer votre base de données PostgreSQL en utilisant Docker. Créez un nouveau fichier Docker Compose avec la commande suivante :
- nano docker-compose.yml
Maintenant, ajoutez le code suivant au fichier nouvellement créé :
version: '3.8'
services:
postgres:
image: postgres:10.3
restart: always
environment:
- POSTGRES_USER=sammy
- POSTGRES_PASSWORD=your_password
volumes:
- postgres:/var/lib/postgresql/data
ports:
- '5432:5432'
volumes:
postgres:
Ce fichier Docker Compose configure une base de données PostgreSQL qui peut être consultée via le port 5432
du conteneur Docker. Notez également que les informations d’identification de la base de données actuelles sont les suivantes : sammy
(utilisateur) et your_password
(mot de passe). N’hésitez pas à modifier ces informations d’identification et à utiliser votre nom d’utilisateur et votre mot de passe préférés. Enregistrez et quittez le fichier.
Une fois cette configuration en place, vous pouvez lancer le serveur de base de données PostgreSQL avec la commande suivante :
- docker-compose up -d
Le résultat de cette commande sera similaire à ce qui suit :
OutputPulling postgres (postgres:10.3)...
10.3: Pulling from library/postgres
f2aa67a397c4: Pull complete
6de83ca23e55: Pull complete
. . .
Status: Downloaded newer image for postgres:10.3
Creating my-blog_postgres_1 ... done
Vous pouvez vérifier si le serveur de base de données fonctionne avec la commande suivante :
- docker ps
Vous obtiendrez un résultat similaire à celui-ci :
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8547f8e007ba postgres:10.3 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:5432->5432/tcp my-blog_postgres_1
Maintenant que le serveur de la base de données est en cours d’exécution, vous pouvez créer votre configuration Prisma. Exécutez la commande suivante depuis la CLI Prisma :
- npx prisma init
Vous obtiendrez le résultat suivant :
Output✔ Your Prisma schema was created at prisma/schema.prisma.
You can now open it in your favorite editor.
Notez que l’une des meilleures pratiques vous recommande de préfixer toutes les invocations de CLI Prisma avec npx
. Vous aurez ainsi la certitude que votre installation locale est bien utilisée.
Une fois la commande exécutée, la CLI Prisma aura créé un nouveau dossier appelé prisma
dans votre projet. Il contient les deux fichiers suivants :
schema.prisma
: le fichier de configuration principal de votre projet Prisma (comprendra votre modèle de données)..env
: un fichier dotenv qui définit l’URL de connexion de votre base de données.Pour veiller à ce que Prisma connaisse bien l’emplacement de votre base de données, ouvrez le fichier .env
et ajustez la variable de l’environnement DATABASE_URL
.
Tout d’abord, ouvrez le fichier .env
:
- nano prisma/.env
Maintenant, vous pouvez configurer la variable d’environnement de la manière suivante :
DATABASE_URL="postgresql://sammy:your_password@localhost:5432/my-blog?schema=public"
Veillez à bien remplacer les informations d’identification de la base de données par les données que vous avez spécifiées dans le fichier Docker Compose. Pour en savoir plus sur le format de l’URL de connexion, consultez les docs Prisma.
Une fois que vous avez terminé, enregistrez et fermez le fichier.
Au cours de cette étape, vous avez configuré votre base de données PostgreSQL avec Docker, installé la CLI Prisma et connecté Prisma à la base de données via une variable d’environnement. Lors de la section suivante, vous configurerez votre modèle de données et créerez les tableaux de votre base de données.
Au cours de cette étape, vous allez configurer votre data model dans le fichier du schéma Prisma. Ce modèle de données sera ensuite mappé à la base de données avec Prisma Migrate, qui générera et enverra les instructions SQL pour créer les tableaux correspondant à votre modèle de données. Étant donné que vous développez une application de blog, les principales entités de l’application seront les utilisateurs et les publications.
Prisma utilise son propre langage de modélisation des données pour définir la forme des données de votre application.
Tout d’abord, ouvrez votre fichier schema.prisma
avec la commande suivante :
- nano prisma/schema.prisma
Maintenant, ajoutez-y les définitions de modèles suivantes. Vous pouvez placer les modèles au bas du fichier, juste après le bloc generator client
:
. . .
model User {
id Int @default(autoincrement()) @id
email String @unique
name String?
posts Post[]
}
model Post {
id Int @default(autoincrement()) @id
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
Enregistrez et quittez le fichier.
Vous allez définir deux modèles, que vous nommerez User
et Post
. Chacun de ces modèles possède un certain nombre de fields qui représentent les propriétés du modèle. Les modèles seront mappés sur les tables de base de données ; les champs représentent les colonnes individuelles.
Notez également qu’il existe une relation de un à plusieurs entre les deux modèles, spécifiés par les champs de relation posts
et author
sur User
et Post
. Cela signifie qu’un utilisateur peut être associé à plusieurs publications.
Une fois ces modèles en place, vous pouvez maintenant créer les tableaux correspondants dans la base de données en utilisant Prisma Migrate. Sur votre terminal, exécutez la commande suivante :
- npx prisma migrate save --experimental --create-db --name "init"
Cette commande crée une nouvelle migration sur votre système de fichiers. Voici un aperçu rapide des trois options disponibles avec la commande :
--experimental
: requise car Prisma Migrates indique actuellement un état experimental.--create-db
: permet à Prisma Migrate de créer la base de données nommée my-blog
qui est spécifiée dans l’URL de connexion.--name "init"
: spécifie le nom de la migration (sera utilisé pour nommer le dossier de migration créé sur votre système de fichiers).Le résultat de cette commande sera similaire à ce qui suit :
OutputNew datamodel:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @default(autoincrement()) @id
email String @unique
name String?
posts Post[]
}
model Post {
id Int @default(autoincrement()) @id
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
Prisma Migrate just created your migration 20200811140708-init in
migrations/
└─ 20200811140708-init/
└─ steps.json
└─ schema.prisma
└─ README.md
N’hésitez pas à explorer les fichiers de migration qui ont été créés dans le répertoire prisma/migrations
.
Pour exécuter la migration par rapport à votre base de données et créer les tableaux pour vos modèles Prisma, exécutez la commande suivante dans votre terminal :
- npx prisma migrate up --experimental
Vous obtiendrez le résultat suivant :
Output. . .
Checking the datasource for potential data loss...
Database Changes:
Migration Database actions Status
20200811140708-init 2 CreateTable statements. Done 🚀
You can get the detailed db changes with prisma migrate up --experimental --verbose
Or read about them here:
./migrations/20200811140708-init/README.md
🚀 Done with 1 migration in 206ms.
Prisma Migrate génère maintenant les instructions SQL nécessaires à la migration et les envoie à la base de données. Les instructions SQL qui ont créé les tableaux sont les suivantes :
CREATE TABLE "public"."User" (
"id" SERIAL,
"email" text NOT NULL ,
"name" text ,
PRIMARY KEY ("id")
)
CREATE TABLE "public"."Post" (
"id" SERIAL,
"title" text NOT NULL ,
"content" text ,
"published" boolean NOT NULL DEFAULT false,
"authorId" integer ,
PRIMARY KEY ("id")
)
CREATE UNIQUE INDEX "User.email" ON "public"."User"("email")
ALTER TABLE "public"."Post" ADD FOREIGN KEY ("authorId")REFERENCES "public"."User"("id") ON DELETE SET NULL ON UPDATE CASCADE
Au cours de cette étape, vous avez défini votre modèle de données dans votre schéma Prisma et créé les tableaux des bases de données correspondants avec Prisma Migrate. À l’étape suivante, vous allez installer Prisma Client dans votre projet afin de pouvoir interroger la base de données.
Prisma Client est un constructeur de requêtes automatisé de type sécurisé qui vous permet de lire et d’écrire des données dans une base de données depuis une application Node.js ou TypeScript. Vous l’utiliserez pour accéder à la base de données dans vos itinéraires API REST, en remplaçant les ORM traditionnelles, les requêtes SQL simples, les couches d’accès aux données personnalisées ou toute autre méthode d’échange avec une base de données.
Au cours de cette étape, vous allez installer Prisma Client et vous familiariser avec les requêtes que vous pouvez envoyer. Avant d’implémenter les itinéraires de votre API REST au cours des prochaines étapes, vous allez tout d’abord explorer certaines des requêtes Prisma Client dans un script exécutable simple.
Premièrement, vous pouvez procéder à l’installation de Prisma Client dans votre projet en ouvrant votre terminal et en installant le paquet npm
de Prisma Client :
- npm install @prisma/client
Ensuite, créez un nouveau répertoire que vous nommerez src
. Il contiendra vos fichiers sources :
- mkdir src
Créez maintenant un fichier TypeScript à l’intérieur du nouveau répertoire :
- nano src/index.ts
Toutes les requêtes de Prisma Client renvoient les promesses auxquelles vous pouvez vous attendre
dans votre code. Vous devez donc envoyer les requêtes à l’intérieur d’une fonction async
.
Ajoutez le texte standard suivant avec une fonction async
qui s’exécutera dans votre script :
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// ... your Prisma Client queries will go here
}
main()
.catch((e) => console.error(e))
.finally(async () => await prisma.disconnect())
Voici une rapide décomposition du texte standard :
PrismaClient
depuis le paquet @prisma/client
npm
déjà installé.PrismaClient
en appelant le constructeur et en obtenant une instance appelée prisma
.async
que vous appellerez main
dans laquelle vous allez ensuite ajouter vos requêtes Prisma Client.main
, tout en détectant toute exception potentielle et en vous assurant que Prisma Client ferme toutes les connexions à la base de données ouvertes, en appelant prisma.disconnect()
.Une fois la fonction main
en place, vous pouvez commencer à ajouter les requêtes Prisma Client au script. Ajustez index.ts
pour que cela ressemble à ce qui suit :
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const newUser = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: {
title: 'Hello World',
},
},
},
})
console.log('Created new user: ', newUser)
const allUsers = await prisma.user.findMany({
include: { posts: true },
})
console.log('All users: ')
console.dir(allUsers, { depth: null })
}
main()
.catch((e) => console.error(e))
.finally(async () => await prisma.disconnect())
Dans ce code, vous utilisez deux requêtes Prisma Client :
create
: crée un nouvel enregistrement User
. Notez que, en réalité, vous utilisez une écriture imbriquée, ce qui signifie que vous créez à la fois un enregistrement User
et un enregistrement Post
dans la même requête.findMany
: lit tous les enregistrements User
existants depuis la base de données. Vous fournissez l’option include
qui charge également les enregistrements de Post
correspondants pour chaque enregistrement User
.Maintenant, exécutez le script avec la commande suivante :
- npx ts-node src/index.ts
Vous obtiendrez le résultat suivant dans votre terminal :
OutputCreated new user: { id: 1, email: 'alice@prisma.io', name: 'Alice' }
[
{
id: 1,
email: 'alice@prisma.io',
name: 'Alice',
posts: [
{
id: 1,
title: 'Hello World',
content: null,
published: false,
authorId: 1
}
]
}
Remarque : si vous utilisez une interface graphique de base de données, vous pouvez valider si les données ont bien été créées en examinant les tableaux User
et Post
. Vous pouvez également explorer les données dans Prisma Studio en exécutant npx prisma studio --experimental
.
Vous avez maintenant utilisé Prisma Client pour lire et écrire des données dans votre base de données. Au cours des étapes restantes, vous allez appliquer ces nouvelles connaissances pour implémenter les itinéraires dans une API REST échantillon.
Au cours de cette étape, vous allez installer Express dans votre application. Express est un framework web populaire pour Node.js que vous utiliserez pour implémenter vos itinéraires API REST dans ce projet. Le premier itinéraire que vous allez implémenter vous permettra de récupérer tous les utilisateurs de l’API en utilisant une requête GET
. Les données utilisateur seront récupérées depuis la base de données en utilisant Prisma Client.
Vous pouvez maintenant installer Express avec la commande suivante :
- npm install express
Étant donné que vous utilisez TypeScript, vous devez également installer les types correspondants en tant que dépendances de développement. Pour cela, exécutez la commande suivante :
- npm install @types/express --save-dev
Une fois les dépendances installée, vous pouvez configurer votre application Express.
Commencez par rouvrir votre fichier source principal :
- nano src/index.ts
Maintenant, supprimez l’intégralité du code dans index.ts
et remplacez-le par ce qui suit pour lancer votre API REST :
import { PrismaClient } from '@prisma/client'
import express from 'express'
const prisma = new PrismaClient()
const app = express()
app.use(express.json())
// ... your REST API routes will go here
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
Voici une décomposition rapide du code :
PrismaClient
et express
à partir des paquets npm
correspondants.PrismaClient
en appelant le constructeur et en obtenant une instance appelée prisma
.express()
.express.json()
pour avoir la certitude que les données de JSON soient correctement traitées par Express.3000
.Maintenant, vous pouvez implémenter votre premier itinéraire. Entre les appels à app.use
et app.listen
, ajoutez le code suivant :
. . .
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 server ready at: http://localhost:3000'),
)
Une fois ajouté, enregistrez et fermez votre fichier. Ensuite, démarrez votre serveur web local en utilisant la commande suivante :
- npx ts-node src/index.ts
Vous recevrez le résultat suivant :
OutputREST API server ready at: http://localhost:3000
Pour accéder à l’itinéraire /users
, vous pouvez pointer votre navigateur vers http://localhost:3000/users
ou tout autre client HTTP.
Dans ce tutoriel, vous allez tester tous les itinéraire API REST en utilisant curl
, un client HTTP basé sur le terminal.
Note : si vous préférez utiliser un client HTTP basé sur une interface graphique, vous pouvez utiliser des alternatives comme Postwoman ou le Advanced REST Client.
Pour tester votre itinéraire, ouvrez une nouvelle fenêtre ou un nouveal onglet du terminal (afin que votre serveur web local puisse continuer à fonctionner) et exécutez la commande suivante :
- curl http://localhost:3000/users
Vous obtiendrez les données User
que vous avez créées au cours de l’étape précédente :
Output[{"id":1,"email":"alice@prisma.io","name":"Alice"}]
Notez que, cette fois, le tableau posts
n’est pas inclus, étant donné que vous ne faites pas passer l’option include
à l’appel findMany
dans l’implémentation de l’itinéraire /users
.
Vous avez implémenté votre premier itinéraire API REST au niveau de /users
. Au cours de l’étape suivante, vous allez implémenter les autres itinéraires API REST pour ajouter plus de fonctionnalités à votre API.
Au cours de cette étape, vous allez implémenter les autres itinéraires API REST de votre application de blog. À la fin, votre serveur web servira diverses requêtes GET
, POST
, PUT
et DELETE
.
Voici un aperçu des différents itinéraires que vous allez implémenter :
Méthode HTTP | Itinéraire | Description |
---|---|---|
GET |
/feed |
Récupère toutes les publications published. |
GET |
/post/:id |
Récupère une publication spécifique en utilisant son ID. |
POST |
/user |
Crée un nouvel utilisateur. |
POST |
/post |
Crée une nouvelle publication (en tant que draft). |
PUT |
/post/publish/:id |
Définit le champ published d’une publication comme true . |
DELETE |
post/:id |
Supprime une publication en utilisant son ID. |
Vous pouvez maintenant implémenter le reste des itinéraires Get
en premier.
Ouvrez la commande index.ts
avec la commande suivante :
- nano src/index.ts
Ensuite, ajoutez le code suivant une fois l’itinéraire /users
implémenté :
. . .
app.get('/feed', async (req, res) => {
const posts = await prisma.post.findMany({
where: { published: true },
include: { author: true }
})
res.json(posts)
})
app.get(`/post/:id`, async (req, res) => {
const { id } = req.params
const post = await prisma.post.findOne({
where: { id: Number(id) },
})
res.json(post)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
Enregistrez et fermez votre fichier
Ce code implémente les itinéraires API pour deux requêtes GET
:
/feed
: renvoie une liste des posts publiés./post/:id
: renvoie un post spécifique en utilisant son ID.Prisma Client est utilisé dans les deux implémentations. Dans l’implémentation de l’itinéraire /feed
, la requête que vous envoyez avec Prisma Client filtre pour tous les enregistrements Post
pour lesquels la colonne published
indique la valeur true
. En outre, la requête Prisma Client utilise include
pour récupérer les informations liées à l’author
pour chaque publication renvoyée. Dans l’implémentation de l’itinéraire /post/:id
, faites passer l’ID récupérée depuis le chemin de l’URL afin de lire un enregistrement Post
spécifique depuis la base de données.
Vous pouvez arrêter le serveur en utilisant les touches CTRL+C
de votre clavier. Ensuite, redémarrez le serveur en utilisant :
- npx ts-node src/index.ts
Pour tester l’itinéraire /feed
, vous pouvez utiliser la commande curl
suivante :
- curl http://localhost:3000/feed
Étant donné qu’aucune publication n’a encore été publiée, la réponse prendra la forme d’un tableau vide :
Output[]
Pour tester l’itinéraire /post/:id
, vous pouvez utiliser la commande curl
suivante :
- curl http://localhost:3000/post/1
Vous obtiendrez la publication que vous avez créée initialement :
Output{"id":1,"title":"Hello World","content":null,"published":false,"authorId":1}
Ensuite, implémentez les deux itinéraires POST
. Ajoutez le code suivant à index.ts
après les trois itinéraires GET
:
. . .
app.post(`/user`, async (req, res) => {
const result = await prisma.user.create({
data: { ...req.body },
})
res.json(result)
})
app.post(`/post`, async (req, res) => {
const { title, content, authorEmail } = req.body
const result = await prisma.post.create({
data: {
title,
content,
published: false,
author: { connect: { email: authorEmail } },
},
})
res.json(result)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
Une fois que vous avez terminé, enregistrez et fermez le fichier.
Ce code implémente les itinéraires API pour deux requêtes POST
:
/user
: crée un nouvel utilisateur dans la base de données./post
: crée une nouvelle publication dans la base de données.Comme auparavant, Prisma Client est utilisé dans les deux implémentations. Dans le cadre de l’implémentation de l’itinéraire /user
, vous faites passer les valeurs depuis le corps de la requête HTTP à la requête create
de Prisma Client.
L’itinéraire /post
exige un peu plus d’implication. Ici, vous ne pouvez pas faire passer les valeurs directement depuis le corps de la requête HTTP. Au contraire, vous devez d’abord les extraire manuellement afin de les transmettre à la requête Prisma Client. En effet, étant donné que la structure de JSON dans le corps de requête ne correspond pas à la structure attendue par Prisma Client. Vous devez donc créer la structure attendue manuellement.
Vous pouvez tester les nouveaux itinéraires en arrêtant le serveur avec CTRL+C
. Ensuite, redémarrez le serveur en utilisant :
- npx ts-node src/index.ts
Pour créer un nouvel utilisateur via l’itinéraire /user
, vous pouvez envoyer la requête POST
suivante avec curl
:
- curl -X POST -H "Content-Type: application/json" -d '{"name":"Bob", "email":"bob@prisma.io"}' http://localhost:3000/user
Cela créera un nouvel utilisateur dans la base de données, en donnant le résultat suivant :
Output{"id":2,"email":"bob@prisma.io","name":"Bob"}
Pour créer une nouvelle publication via l’itinéraire /post
, vous pouvez envoyer la requête POST
suivante avec curl
:
- curl -X POST -H "Content-Type: application/json" -d '{"title":"I am Bob", "authorEmail":"bob@prisma.io"}' http://localhost:3000/post
Cela créera une nouvelle publication dans la base de données et la connectera à l’utilisateur avec le courriel bob@prisma.io
. Cela donne le résultat suivant :
Output{"id":2,"title":"I am Bob","content":null,"published":false,"authorId":2}
Enfin, vous pouvez implémenter les itinéraires PUT
et DELETE
.
Ouvrez la commande index.ts
avec la commande suivante :
- nano src/index.ts
Ensuite, une fois les deux itinéraires POST
implémentés, ajoutez le code surligné :
. . .
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)
})
app.delete(`/post/:id`, async (req, res) => {
const { id } = req.params
const post = await prisma.post.delete({
where: { id: Number(id) },
})
res.json(post)
})
app.listen(3000, () =>
console.log('REST API server ready at: http://localhost:3000'),
)
Enregistrez et fermez votre fichier
Ce code implémente les itinéraires API pour une requête PUT
et une requête DELETE
:
/post/publish/:id
(PUT
) : publie une publication en utilisant son ID./post/:id
(DELETE
) : supprime une publication en utilisant son ID.À nouveau, Prisma Client est utilisé dans les deux implémentations. Dans le cadre de l’implémentation de l’itinéraire /post/publish/:id
, l’ID du message à publier est récupéré depuis l’URL et transmis à la requête update
de Prisma Client. L’implémentation de l’itinéraire /post/:id
qui permet de supprimer une publication dans la base de données renvoie également l’ID de l’URL et le transmet à la requête delete
de Prisma Client.
Encore une fois, arrêtez le serveur à l’aide des touches CTRL+C
de votre clavier. Ensuite, redémarrez le serveur en utilisant :
- npx ts-node src/index.ts
Vous pouvez tester l’itinéraire PUT
avec la commande curl
suivante :
- curl -X PUT http://localhost:3000/post/publish/2
Cela vous permettra de publier la publication avec une valeur d’ID de 2
. Si vous renvoyez la requête /feed
, cette publication sera alors incluse dans la réponse.
Enfin, vous pouvez tester l’itinéraire DELETE
avec la commande curl
suivante :
- curl -X DELETE http://localhost:3000/post/1
Cela vous permettra de supprimer la publication avec une valeur d’ID de 1
. Pour valider le fait que la publication portant cet ID ait été supprimée, vous pouvez renvoyer une requête GET
à l’itinéraire /post/1
.
Au cours de cette étape, vous avez implémenté les autres itinéraires API REST de votre application de blog. L’API répond maintenant aux diverses requêtes GET
, POST
, PUT
et DELETE
et implémente une fonctionnalité pour lire et écrire des données dans la base de données.
Au cours de cet article, vous avez créé un serveur API REST avec plusieurs itinéraires différents pour créer, lire, mettre à jour et supprimer les données utilisateur et de publications pour une application de blog échantillon. À l’intérieur des itinéraires de l’API, vous utilisez le Prisma Client pour envoyer les requêtes correspondantes à votre base de données.
Ensuite, vous pouvez implémenter des itinéraires API supplémentaires ou étendre le schéma de votre base de données en utilisant Prisma Migrate. Veillez à consulter la documentation de Prisma pour en savoir plus sur les divers aspects de Prisma et à explorer quelques exemples de projets prêts à l’exécution dans le référentiel prisma-examples
- en utilisant des outils comme les API GraphQL ou grPC.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!