4.3 KiB
4.3 KiB
Contratto JSON del Cruciverba
Questo documento definisce il formato di scambio tra:
brain: il motore che genera e compila il cruciverbaclient: web app, backend, servizio PDF o altra macchina remota che richiede un cruciverba
L'obiettivo e' avere un payload:
- completo
- stabile
- espandibile
- riusabile per stampa PDF, gioco web e archiviazione
Flusso
- Il client invia una
requestJSON al motore. - Il motore risponde con una
responseJSON completa del cruciverba. - Lo stesso JSON di risposta puo' essere:
- salvato a database
- convertito in PDF
- renderizzato in una pagina web interattiva
- riaperto in futuro senza rigenerare il cruciverba
Principi di progettazione
- Ogni cruciverba ha un
crossword_idunivoco. - La
requestconserva i parametri di generazione originali. - La
responseinclude sia la griglia giocabile sia la soluzione. - Le parole hanno metadati ricchi: posizione, direzione, clue, tema, pos, fonte clue.
- Le coordinate sono sempre assolute e 0-based nella griglia normalizzata esportata.
- La griglia esportata e' rettangolare e normalizzata: niente coordinate negative.
- Il formato supporta versioning con
schema_version.
Request
Campi principali:
schema_version: versione del contrattorequest_id: id della richiesta lato clientrequested_at: timestamp ISO 8601generator: configurazione del motoreoutput: preferenze di outputclient_context: metadati opzionali del chiamante
generator
topic: stringa o lista di topicdifficulty: alias testualeseed: opzionale, per riproducibilita'initial_word_countthemed_fill_counttarget_empty_ratiodiffxytime_limit_secondsmax_candidates_per_wordlexicon_filedefinitions_enableddefinition_style: per future varianti cluepreferred_output_language
output
include_solution_gridinclude_clue_sourcesinclude_diagnosticsinclude_generation_logformat_hints
Response
Campi principali:
schema_versionrequest_idcrossword_idgenerated_atstatusgeneratorsummarygridentriescluessolutiondiagnosticsartifacts
Sezione grid
rowscolscell_size_hintcells
Ogni cella ha:
rowcolkind:blockoppurelettersolutiondisplaynumber: numero clue se la cella apre una parolaacross_entry_iddown_entry_idis_prefilled
Note:
solutioncontiene sempre la lettera corretta per celle attive.displaye' vuoto per la scheda giocatore.numberserve per numerazione in stampa e web.
Sezione entries
Ogni entry rappresenta una parola collocata in griglia.
Campi:
entry_idnumberdirection:acrossodownansweranswer_lengthrowcolcells: lista coordinateclueclue_sourcetopicsposis_seedadded_by_fillerconfidence
Sezione clues
Ridondante ma utile per client semplici.
across: lista clues orizzontalidown: lista clues verticali
Ogni clue:
numberentry_idtextenumerationtopic_matchsource
Sezione solution
grid_rows: lista di stringhe, una per rigawords: elenco risposte
grid_rows usa:
- lettera maiuscola per cella piena
#per casella nera
Sezione diagnostics
Serve a tuning, benchmark e debug.
total_wordsseed_words_requestedseed_words_placedfiller_words_addedintersectionsfilled_cellsempty_cellsempty_ratiotarget_empty_ratiotopic_wordsoff_topic_wordspos_countsruntime_lexiconseedgeneration_seconds
Sezione artifacts
URL o path futuri per file derivati.
pdf_playerpdf_solutionthumbnailhtml_preview
Estensioni future previste
difficulty_profile: facile/medio/difficile per definizioni separatehints: aiuti progressivi per singola parolatheme_story: testo introduttivo del cruciverbaplayer_state: salvataggio partita in corsostats: tempi, errori, percentuali di completamento
Regola pratica consigliata
La macchina "brain" deve esporre almeno due endpoint logici:
-
POST /crosswords/generate- input: request JSON
- output: response JSON
-
GET /crosswords/{crossword_id}- output: stessa response JSON salvata
In questo modo il contratto resta identico sia via file sia via webservice.