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

  1. Registre d'usuaris: Permetre als usuaris crear un compte.
  2. Inici de sessió: Permetre als usuaris iniciar sessió.
  3. Publicació de missatges: Permetre als usuaris publicar missatges.
  4. Seguiment d'usuaris: Permetre als usuaris seguir i deixar de seguir altres usuaris.
  5. Feed de missatges: Mostrar els missatges dels usuaris que segueixen.

Entitats principals

  1. Usuari: Representa un usuari de la xarxa social.
  2. Missatge: Representa un missatge publicat per un usuari.
  3. 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ó:

POST /users
Content-Type: application/json

{
  "username": "johndoe",
  "password": "securepassword"
}

Resposta:

HTTP/1.1 201 Created
Content-Type: application/json

{
  "id": 1,
  "username": "johndoe"
}

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:

HTTP/1.1 200 OK
Content-Type: application/json

{
  "follower_id": 1,
  "followed_user_id": 2
}

Obtenir el feed de missatges

Petició:

GET /feed
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

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

  1. Instal·lació de Node.js i Express:

    npm install express
    
  2. 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

  1. 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).
  2. Implementar autenticació: Utilitza JWT per protegir les rutes que requereixen autenticació.
  3. 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.

© Copyright 2024. Tots els drets reservats