Salta ai contenuti

Guida per sviluppatori Gotenberg

Il pacchetto Gotenberg delega la conversione a un servizio esterno. Il codice applicativo deve esplicitare il confine del servizio: convalidare l’input, costruire un payload, inviare la richiesta, analizzare il risultato e gestire i malfunzionamenti del servizio.

Usare questa guida per creare workflow di conversione da Office a PDF, endpoint di caricamento, controlli di integrità del servizio o criteri di trasporto basati su nextpdf/gotenberg.

LivelloDi proprietà diResponsabilitàDa non inserire qui
Caricamento o origine del documentoApplicazioneAutorizzare il chiamante, convalidare l’origine, scegliere i criteri di conversione.Decisioni sull’URL del servizio o sul pinning del trasporto.
Rilevamento del formatonextpdf/gotenbergMappare le estensioni sicure su OfficeFormat.Affidarsi al tipo MIME senza convalida applicativa.
Bridgenextpdf/gotenbergCostruire la richiesta multipart, chiamare Gotenberg, analizzare la risposta PDF.Query di dominio o criteri di archiviazione.
Servizio GotenbergDistribuzioneConvertire il documento Office in PDF.Autorizzazione dell’applicazione PHP.
Motore principalenextpdf/nextpdfImportare o combinare, se necessario, i dati PDF convertiti.Conversione Office.
FaseComportamentoAzione dello sviluppatore
Creazione della configurazioneVengono caricati l’URL dell’API, il timeout, la dimensione massima, la chiave API e i pin.Tenere l’URL del servizio e il token fuori dal codice sorgente.
Convalida dell’inputVengono verificati il percorso del file, la dimensione del file, il nome del file, l’estensione e la sicurezza dell’URL.Rifiutare l’input non supportato prima dell’invio.
Costruzione del payloadGotenbergConvertPayload costruisce i dati del modulo multipart.Conservare il nome del file originale solo quando è sicuro.
Richiesta al servizioIl bridge invia la richiesta a /forms/libreoffice/convert.Configurare il timeout e i criteri di trasporto.
Analisi del risultatoGotenbergResponseParser::parse() restituisce i byte del PDF e i metadati.Trattare le risposte non PDF o di errore come errori di conversione.
PercorsoScopo
app/Pdf/Conversion/*Wrapper applicativo attorno a GotenbergBridge.
app/Pdf/Uploads/*Convalida del caricamento, archiviazione e criteri per i nomi dei file.
app/Pdf/ConversionPolicy/*Criteri di selezione per dimensione, formato e servizio.
tests/Pdf/Conversion/*Test su formato, file, servizio e trasporto.

Mantenere separata la convalida dei file dalla conversione. Un servizio di conversione deve ricevere input già autorizzato, continuando comunque ad affidarsi alla convalida del pacchetto come difesa in profondità.

<?php
use NextPDF\Gotenberg\GotenbergBridge;
final readonly class OfficeConversionService
{
public function __construct(
private GotenbergBridge $bridge,
) {}
public function convertUploadedFile(string $safePath): string
{
$result = $this->bridge->convertFile($safePath);
if (!$result->isValid()) {
throw new RuntimeException('The conversion service did not return a valid PDF.');
}
return $result->pdfData;
}
}
PatternAPIQuando usarloVincolo
Convertire da un percorso fileGotenbergBridge::convertFile()Il documento è già archiviato su disco.Il percorso deve essere leggibile e approvato dai criteri.
Convertire i byte in memoriaGotenbergBridge::convertString()L’applicazione dispone già dei byte provenienti da un caricamento o da un object store.Il nome del file continua comunque a determinare il rilevamento del formato.
Costruire il payload direttamenteGotenbergConvertPayloadI test o il codice di trasporto personalizzato richiedono i byte multipart.Mantenere la generazione del boundary al di fuori dell’input utente.
Analizzare la risposta direttamenteGotenbergResponseParser::parse()Una chiamata HTTP personalizzata richiede comunque l’analisi del pacchetto.È necessario passare l’OfficeFormat previsto.

GotenbergBridge::isAvailable() è un segnale di prontezza. Non deve essere l’unica protezione a runtime. Un servizio può risultare disponibile durante la verifica di prontezza e fallire comunque nella conversione successiva.

ControlloScopoNota operativa
Validità della configurazioneRilevare l’URL dell’API mancante.Eseguire durante l’avvio dell’applicazione o i controlli di distribuzione.
Disponibilità di /healthRilevare se il servizio è raggiungibile.Usare per i dashboard di prontezza.
Conversione di una piccola fixtureRilevare un’installazione di LibreOffice non funzionante o una regressione del servizio.Eseguire in smoke test pianificati, non a ogni richiesta.
Monitoraggio del timeoutRilevare rallentamenti del servizio.Tracciare per formato e dimensione del file.
Punto di estensioneUsarlo perVincolo
PSR-18 ClientInterfaceComportamento personalizzato del client HTTP.Deve rispettare la semantica response/exception di PSR-18.
Factory PSR-17Creazione di richieste e flussi.Necessarie per costruire il bridge.
HtmlSecurityPolicyInterfaceCriteri a livello di analisi per gli input HTML.Integra i criteri di sicurezza di Gotenberg.
ResponseFactoryInterfaceCostruzione della risposta per il trasporto cURL con pin.Necessaria solo quando si usa il percorso di trasporto del pacchetto.
GotenbergSecurityPolicyConvalida di URL, dimensione del file, nome del file e pin.Mantenere l’autorizzazione applicativa al di fuori di questo livello.
  1. Iniziare con convertString() nei test in modo che le fixture siano esplicite.
  2. Aggiungere convertFile() solo dopo aver verificato i percorsi del file system.
  3. Mantenere la dimensione massima del file al di sotto dei limiti del servizio e dell’infrastruttura.
  4. Usare isAvailable() per i segnali di prontezza, non come sostituto della gestione degli errori.
  5. Registrare nei log nome del file, formato, dimensione, stato e durata. Non registrare nei log i byte del documento.
  6. Aggiungere test di timeout e degli scenari di errore prima di esporre gli endpoint di caricamento.
ErroreDove deve essere gestitoRisposta consigliata
Estensione non supportataRilevamento del formato.Rifiutare prima dell’invio al servizio.
Nome file non sicuroCriteri di sicurezza.Rifiutare e normalizzare i criteri di denominazione per i caricamenti.
File troppo grandeCriteri di caricamento e convalida del pacchetto.Rifiutare prima di leggere o inviare payload di grandi dimensioni.
Gotenberg non disponibileConfine del bridge.Restituire un errore applicativo ritentabile quando appropriato.
Risposta non PDFParser della risposta.Considerarla un errore di conversione e acquisire lo stato del servizio.
Errore di convalida del pin o dell’URLCriteri di trasporto.Applicare il fail-closed e avvisare gli operatori.
AspettoValore predefinitoQuando eseguire l’override
Timeout30 secondi.Aumentarlo solo dopo aver misurato la latenza reale del servizio.
Dimensione massima del file52,428,800 byte.Ridurla per gli endpoint pubblici o multi-tenant.
Chiave APIVuota.Impostarla per distribuzioni Gotenberg private.
Formati supportatidocx, xlsx, pptx, odt, ods, odp.Aggiungere formati solo quando OfficeFormat e il parser li supportano.
Set di pinVuoto.Aggiungere i pin solo con pin di backup e una procedura di rotazione.
  • I test di formato coprono le estensioni supportate e non supportate.
  • I test sui file coprono nomi di file mancanti, illeggibili, troppo grandi e non sicuri.
  • I test del servizio coprono le risposte non 2xx, i corpi di risposta non validi e le eccezioni di trasporto.
  • I test di sicurezza coprono gli URL del servizio privati o non validi quando sono vietati dai criteri.
  • I test di timeout verificano che il timeout configurato venga passato al trasporto.
  • I test delle fixture mantengono i documenti di esempio piccoli e non sensibili.