En aquest cas d'estudi, dissenyarem i desenvoluparem una API RESTful per a una xarxa social. Aquesta API permetrà als usuaris registrar-se, iniciar sessió, publicar missatges, seguir altres usuaris i veure el feed de missatges dels usuaris que segueixen.
Requisits de l'API
Funcionalitats principals
- Registre d'usuaris: Permetre als usuaris crear un compte.
- Inici de sessió: Permetre als usuaris iniciar sessió.
- Publicació de missatges: Permetre als usuaris publicar missatges.
- Seguiment d'usuaris: Permetre als usuaris seguir i deixar de seguir altres usuaris.
- Feed de missatges: Mostrar els missatges dels usuaris que segueixen.
Entitats principals
- Usuari: Representa un usuari de la xarxa social.
- Missatge: Representa un missatge publicat per un usuari.
- Seguiment: Representa la relació de seguiment entre dos usuaris.
Disseny de l'API
Recursos i URIs
Recurso | URI | Mètode HTTP | Descripció |
---|---|---|---|
Usuari | /users | POST | Crear un nou usuari |
Usuari | /users/{id} | GET | Obtenir informació d'un usuari |
Sessió | /sessions | POST | Iniciar sessió |
Missatge | /messages | POST | Publicar un nou missatge |
Missatge | /messages/{id} | GET | Obtenir informació d'un missatge |
Seguiment | /follow | POST | Seguir un usuari |
Seguiment | /unfollow | POST | Deixar de seguir un usuari |
Feed | /feed | GET | Obtenir el feed de missatges |
Exemples de Peticions i Respostes
Registre d'usuari
Petició:
Resposta:
Inici de sessió
Petició:
POST /sessions Content-Type: application/json { "username": "johndoe", "password": "securepassword" }
Resposta:
HTTP/1.1 200 OK Content-Type: application/json { "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." }
Publicació de missatge
Petició:
POST /messages Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Content-Type: application/json { "content": "Aquest és el meu primer missatge!" }
Resposta:
HTTP/1.1 201 Created Content-Type: application/json { "id": 1, "user_id": 1, "content": "Aquest és el meu primer missatge!", "timestamp": "2023-10-01T12:34:56Z" }
Seguiment d'un usuari
Petició:
POST /follow Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Content-Type: application/json { "followed_user_id": 2 }
Resposta:
Obtenir el feed de missatges
Petició:
Resposta:
HTTP/1.1 200 OK Content-Type: application/json [ { "id": 1, "user_id": 2, "content": "Aquest és un missatge d'un usuari que segueixes.", "timestamp": "2023-10-01T12:34:56Z" }, { "id": 2, "user_id": 3, "content": "Un altre missatge d'un altre usuari que segueixes.", "timestamp": "2023-10-01T12:35:56Z" } ]
Desenvolupament de l'API
Configuració de l'entorn de desenvolupament
-
Instal·lació de Node.js i Express:
npm install express
-
Configuració del servidor bàsic:
const express = require('express'); const app = express(); const port = 3000; app.use(express.json()); app.listen(port, () => { console.log(`Server running on http://localhost:${port}`); });
Creació de rutes i controladors
Ruta per al registre d'usuaris
app.post('/users', (req, res) => { const { username, password } = req.body; // Lògica per crear un nou usuari res.status(201).json({ id: 1, username }); });
Ruta per a l'inici de sessió
app.post('/sessions', (req, res) => { const { username, password } = req.body; // Lògica per autenticar l'usuari const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'; res.status(200).json({ token }); });
Ruta per a la publicació de missatges
app.post('/messages', (req, res) => { const { content } = req.body; // Lògica per crear un nou missatge res.status(201).json({ id: 1, user_id: 1, content, timestamp: new Date().toISOString() }); });
Ruta per al seguiment d'usuaris
app.post('/follow', (req, res) => { const { followed_user_id } = req.body; // Lògica per seguir un usuari res.status(200).json({ follower_id: 1, followed_user_id }); });
Ruta per obtenir el feed de missatges
app.get('/feed', (req, res) => { // Lògica per obtenir el feed de missatges const feed = [ { id: 1, user_id: 2, content: "Aquest és un missatge d'un usuari que segueixes.", timestamp: "2023-10-01T12:34:56Z" }, { id: 2, user_id: 3, content: "Un altre missatge d'un altre usuari que segueixes.", timestamp: "2023-10-01T12:35:56Z" } ]; res.status(200).json(feed); });
Exercicis Pràctics
- Afegir validació de dades: Assegura't que les dades enviades en les peticions siguin vàlides (per exemple, que el nom d'usuari no estigui buit).
- Implementar autenticació: Utilitza JWT per protegir les rutes que requereixen autenticació.
- Gestió d'errors: Implementa una gestió d'errors adequada per a les rutes de l'API.
Resum
En aquest cas d'estudi, hem dissenyat i desenvolupat una API RESTful per a una xarxa social amb funcionalitats bàsiques com el registre d'usuaris, inici de sessió, publicació de missatges, seguiment d'usuaris i obtenció del feed de missatges. Hem vist com definir els recursos i les URIs, i hem creat exemples de peticions i respostes per a cada funcionalitat. Finalment, hem implementat les rutes i controladors bàsics utilitzant Node.js i Express, i hem proposat exercicis pràctics per millorar l'API.
Curs de REST API: Principis de Disseny i Desenvolupament d'APIs RESTful
Mòdul 1: Introducció a les APIs RESTful
Mòdul 2: Disseny d'APIs RESTful
- Principis de disseny d'APIs RESTful
- Recursos i URIs
- Mètodes HTTP
- Codis d'estat HTTP
- Versionat d'APIs
- Documentació d'APIs
Mòdul 3: Desenvolupament d'APIs RESTful
- Configuració de l'entorn de desenvolupament
- Creació d'un servidor bàsic
- Gestió de peticions i respostes
- Autenticació i autorització
- Gestió d'errors
- Proves i validació
Mòdul 4: Bones Pràctiques i Seguretat
- Bones pràctiques en el disseny d'APIs
- Seguretat en APIs RESTful
- Rate limiting i throttling
- CORS i polítiques de seguretat
Mòdul 5: Eines i Frameworks
- Postman per a proves d'APIs
- Swagger per a documentació
- Frameworks populars per a APIs RESTful
- Integració contínua i desplegament