lezione 09

api rest con spring boot

controller, dto e validazione per servizi moderni.

livello: intermedio durata: 42 min output: api service badge: api design

setup rapido

spring boot accelera la creazione di api. usa starter web e valida i payload.

# con spring initializr
# dipendenze: spring web, validation

controller

i controller espongono endpoint e trasformano dto in domain.

@RestController
@RequestMapping("/api/projects")
class projectController {
    @GetMapping
    List<Project> all() { return service.all(); }

    @PostMapping
    Project create(@Valid @RequestBody ProjectInput input) {
        return service.create(input);
    }
}

dto e validazione

separa dto e domain per evitare accoppiamenti eccessivi.

record ProjectInput(@NotBlank String name, @Size(max=140) String note) {}

error handling

normalizza gli errori con un handler globale e messaggi coerenti.

@ControllerAdvice
class errorHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    ResponseEntity<ApiError> handle() {
        return ResponseEntity.badRequest().body(new ApiError("invalid"));
    }
}

esercizi

crea una api di note con endpoint get, post, delete.

aggiungi validazione e un mapper dto -> entity.

checklist

  • separa dto e domain
  • valida input in ingresso
  • usa http status corretti
  • documenta l'api

panoramica

In questo capitolo su api rest con spring boot, controller, dto e validazione per servizi moderni. L'obiettivo è trasformare i concetti in micro-pattern riutilizzabili con esempi piccoli e verificabili.

Lavora in sequenza: leggi, prova, modifica gli snippet e annota i trade-off principali (performance, leggibilità, manutenzione).

badge: api design

obiettivi

  • capire e applicare setup in uno scenario reale
  • capire e applicare controller in uno scenario reale
  • capire e applicare dto e validazione in uno scenario reale
  • capire e applicare error handling in uno scenario reale

scheda rapida

import java.util.List;

public class Main {
  public static void main(String[] args) {
    var dati = List.of(1, 2, 3);
    var out = dati.stream().map(x -> x * 2).toList();
    System.out.println(out);
  }
}

Adatta questo scheletro agli esempi della lezione e sostituisci i dati con il tuo dominio.

tips

  • organizza package per dominio
  • preferisci immutabilità dove possibile
  • documenta le API pubbliche
  • resource naming consistente
  • usa HTTP status corretti
  • valida input

tip: Le API pubbliche si progettano come prodotti.

mini progetto

Specifica endpoints per un catalogo.

  • definisci risorse
  • mappa metodi HTTP
  • definisci payload
  • documenta errori

output atteso: uno script o query ripetibile con risultati verificabili.

start a brief