Què és un servei web RESTful?

Un servei web RESTful és una arquitectura de serveis web que segueix els principis de REST (Representational State Transfer). REST és un estil arquitectònic que utilitza els mètodes HTTP per interactuar amb recursos representats en format JSON o XML. Els serveis web RESTful són àmpliament utilitzats per la seva simplicitat, escalabilitat i interoperabilitat.

Principis de REST

  1. Client-Servidor: La separació de les preocupacions entre el client i el servidor permet una major escalabilitat i mantenibilitat.
  2. Sense estat (Stateless): Cada petició del client al servidor ha de contenir tota la informació necessària per entendre i processar la petició. El servidor no ha de mantenir cap estat del client entre peticions.
  3. Caché: Les respostes del servidor poden ser cachejades per millorar el rendiment.
  4. Interfície uniforme: L'ús d'una interfície uniforme simplifica i desacobla l'arquitectura, permetent la independència entre el client i el servidor.
  5. Sistema en capes: L'arquitectura pot estar composta per capes jeràrquiques que ajuden a limitar la complexitat i millorar l'escalabilitat.
  6. Code on Demand (Opcional): Els servidors poden proporcionar codi executable al client quan sigui necessari.

Mètodes HTTP comuns en REST

Mètode HTTP Descripció Exemple d'ús
GET Obtenir un recurs GET /api/llibres/1
POST Crear un nou recurs POST /api/llibres
PUT Actualitzar un recurs existent PUT /api/llibres/1
DELETE Eliminar un recurs DELETE /api/llibres/1
PATCH Actualitzar parcialment un recurs PATCH /api/llibres/1

Beneficis dels serveis web RESTful

  • Simplicitat: Utilitza els mètodes HTTP estàndard, fent-lo fàcil d'entendre i implementar.
  • Escalabilitat: La separació de client i servidor permet una millor escalabilitat.
  • Interoperabilitat: Pot ser utilitzat per diferents clients (navegadors, aplicacions mòbils, etc.) sense necessitat de canvis en el servidor.
  • Flexibilitat: Permet la representació de recursos en diferents formats (JSON, XML, etc.).

Exemples pràctics

Exemple 1: Obtenir un recurs (GET)

@RestController
@RequestMapping("/api/llibres")
public class LlibreController {

    @GetMapping("/{id}")
    public ResponseEntity<Llibre> obtenirLlibre(@PathVariable Long id) {
        Llibre llibre = serveiLlibre.obtenirLlibrePerId(id);
        if (llibre != null) {
            return ResponseEntity.ok(llibre);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

Exemple 2: Crear un nou recurs (POST)

@RestController
@RequestMapping("/api/llibres")
public class LlibreController {

    @PostMapping
    public ResponseEntity<Llibre> crearLlibre(@RequestBody Llibre llibre) {
        Llibre nouLlibre = serveiLlibre.crearLlibre(llibre);
        return ResponseEntity.status(HttpStatus.CREATED).body(nouLlibre);
    }
}

Exemple 3: Actualitzar un recurs existent (PUT)

@RestController
@RequestMapping("/api/llibres")
public class LlibreController {

    @PutMapping("/{id}")
    public ResponseEntity<Llibre> actualitzarLlibre(@PathVariable Long id, @RequestBody Llibre llibre) {
        Llibre llibreActualitzat = serveiLlibre.actualitzarLlibre(id, llibre);
        if (llibreActualitzat != null) {
            return ResponseEntity.ok(llibreActualitzat);
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

Exemple 4: Eliminar un recurs (DELETE)

@RestController
@RequestMapping("/api/llibres")
public class LlibreController {

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> eliminarLlibre(@PathVariable Long id) {
        boolean eliminat = serveiLlibre.eliminarLlibre(id);
        if (eliminat) {
            return ResponseEntity.noContent().build();
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

Exercicis pràctics

Exercici 1: Crear un controlador REST per gestionar autors

  1. Crea una classe Autor amb els camps id, nom i llibreId.
  2. Implementa un controlador REST per gestionar autors (AutorController).
  3. Implementa els mètodes següents:
    • GET /api/autors/{id}: Obtenir un autor per ID.
    • POST /api/autors: Crear un nou autor.
    • PUT /api/autors/{id}: Actualitzar un autor existent.
    • DELETE /api/autors/{id}: Eliminar un autor.

Solució

// Classe Autor
public class Autor {
    private Long id;
    private String nom;
    private Long llibreId;

    // Getters i setters
}

// Controlador AutorController
@RestController
@RequestMapping("/api/autors")
public class AutorController {

    @GetMapping("/{id}")
    public ResponseEntity<Autor> obtenirAutor(@PathVariable Long id) {
        Autor autor = serveiAutor.obtenirAutorPerId(id);
        if (autor != null) {
            return ResponseEntity.ok(autor);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @PostMapping
    public ResponseEntity<Autor> crearAutor(@RequestBody Autor autor) {
        Autor nouAutor = serveiAutor.crearAutor(autor);
        return ResponseEntity.status(HttpStatus.CREATED).body(nouAutor);
    }

    @PutMapping("/{id}")
    public ResponseEntity<Autor> actualitzarAutor(@PathVariable Long id, @RequestBody Autor autor) {
        Autor autorActualitzat = serveiAutor.actualitzarAutor(id, autor);
        if (autorActualitzat != null) {
            return ResponseEntity.ok(autorActualitzat);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> eliminarAutor(@PathVariable Long id) {
        boolean eliminat = serveiAutor.eliminarAutor(id);
        if (eliminat) {
            return ResponseEntity.noContent().build();
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

Conclusió

En aquesta secció, hem après els conceptes bàsics dels serveis web RESTful, incloent-hi els principis de REST, els mètodes HTTP comuns i els beneficis d'utilitzar serveis web RESTful. També hem vist exemples pràctics de com implementar aquests serveis utilitzant Spring Boot. A més, hem proporcionat un exercici pràctic per reforçar els conceptes apresos. En la següent secció, explorarem com crear controladors REST en detall.

Curs de Spring Boot

Mòdul 1: Introducció a Spring Boot

Mòdul 2: Conceptes bàsics de Spring Boot

Mòdul 3: Construint serveis web RESTful

Mòdul 4: Accés a dades amb Spring Boot

Mòdul 5: Seguretat a Spring Boot

Mòdul 6: Proves a Spring Boot

Mòdul 7: Funcions avançades de Spring Boot

Mòdul 8: Desplegant aplicacions Spring Boot

Mòdul 9: Rendiment i monitorització

Mòdul 10: Millors pràctiques i consells

© Copyright 2024. Tots els drets reservats