API REST per la gestione di una biblioteca: libri, utenti e prestiti. Il progetto include un'integrazione AI con Anthropic Claude tramite LangChain4j: quando si recupera un singolo libro, l'API arricchisce la risposta con una descrizione generata dall'AI.
Materiale pronto per orchestrare un flusso a 3 agenti sulla CR Audiobooks LibriVox:
docs/CR-AUDIOBOOKS-AF.md- analisi funzionale della CRdocs/CR-AUDIOBOOKS-SPEC.md- specifica tecnica dettagliatadocs/CR-AUDIOBOOKS-SEQUENCE.md- sequence diagram del flusso runtimedocs/CR-AUDIOBOOKS-HANDOFF.md- handoff operativo per agent implementatore.github/prompts/01-generate-af-from-cr.prompt.md- prompt per generare AF.github/prompts/02-generate-spec-from-af.prompt.md- prompt per generare specifica tecnica.github/prompts/03-implement-cr-from-af-spec.prompt.md- prompt per agent implementatore.github/skills/cr-af-spec-agent/SKILL.md- skill riusabile AF -> SPEC -> handoff
| Tecnologia | Versione |
|---|---|
| Java | 25 |
| Spring Boot | 3.4.5 |
| Spring Data JPA | (gestito da Spring Boot) |
| H2 Database | (in-memory / TCP) |
| LangChain4j Anthropic | 0.36.0 |
| SpringDoc OpenAPI | 2.6.0 |
| Lombok | (gestito da Spring Boot) |
- Java 25 installato (
java -version) - Maven installato (
mvn -version) - API Key Anthropic — ottienila su console.anthropic.com
- H2 Server in esecuzione in modalità TCP (oppure modifica il datasource per usare H2 in-memory)
Apri src/main/resources/application.properties e sostituisci il placeholder con la tua API key:
langchain4j.anthropic.chat-model.api-key=sk-ant-TUACHIAVEmvn spring-boot:runL'applicazione si avvia su http://localhost:8080.
| Metodo | URL | Descrizione |
|---|---|---|
GET |
/books/all |
Tutti i libri |
GET |
/books/?bookId={id} |
Libro per ID (con descrizione AI) |
POST |
/books/ |
Aggiunge un libro |
Esempio request body (POST /books/):
{
"title": "Il Signore degli Anelli",
"author": "J.R.R. Tolkien",
"isbn": "978-8845292613"
}Esempio response (GET /books/?bookId=1):
{
"title": "Il Signore degli Anelli",
"author": "J.R.R. Tolkien",
"isbn": "978-8845292613",
"description": "Il Signore degli Anelli è un'epica saga fantasy ambientata nella Terra di Mezzo..."
}| Metodo | URL | Descrizione |
|---|---|---|
GET |
/user/all |
Tutti gli utenti |
GET |
/user/?userId={id} |
Utente per ID |
POST |
/user/ |
Aggiunge un utente |
| Metodo | URL | Descrizione |
|---|---|---|
GET |
/loan/all |
Tutti i prestiti (con dati utente e libro) |
GET |
/loan/?userId={id} |
Prestiti di un utente |
GET |
/loan/?bookId={id} |
Prestiti di un libro |
POST |
/loan/ |
Aggiunge un prestito |
Quando si chiama GET /books/?bookId={id}, il sistema:
- Recupera il libro dal database H2
- Invia titolo e autore ad Anthropic Claude tramite LangChain4j
- Riceve una descrizione di 2-3 frasi in italiano
- Restituisce la descrizione nel campo
descriptiondella risposta JSON
La chiamata AI avviene solo sul singolo libro (
GET /books/?bookId=), non sulla lista (GET /books/all), per evitare chiamate multiple all'API.
Swagger UI disponibile all'avvio su:
http://localhost:8080/swagger-ui/index.html
Console H2 disponibile su:
http://localhost:8080/h2-console