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
