Aller au contenu

Guide développeur Gotenberg

Le package Gotenberg délègue la conversion à un service externe. Dans le code applicatif, rends la frontière de service explicite : valide l’entrée, construis une charge utile, envoie la requête, analyse le résultat et gère l’échec du service.

Utilise ce guide lorsque tu construis des workflows de conversion de documents bureautiques vers PDF, des points de terminaison d’upload, des contrôles d’état du service ou une politique de transport autour de nextpdf/gotenberg.

CoucheDétenue parResponsabilitéÀ ne pas mettre ici
Upload ou source du documentApplicationAutorise l’appelant, valide la source et choisis la politique de conversion.Décisions liées à l’URL du service ou à l’épinglage du transport.
Détection de formatnextpdf/gotenbergMappe les extensions sûres vers OfficeFormat.Confiance accordée au MIME sans validation applicative.
Pontnextpdf/gotenbergConstruit la requête multipart, appelle Gotenberg et analyse la réponse PDF.Requêtes métier ou politique de stockage.
Service GotenbergDéploiementConvertit le document bureautique en PDF.Autorisation applicative PHP.
Moteur principalnextpdf/nextpdfImporte ou combine éventuellement les données PDF converties.Conversion bureautique.
ÉtapeComportementAction du développeur
Création de la configurationL’URL de l’API, le timeout, la taille maximale, la clé d’API et les pins sont chargés.Garde l’URL du service et le jeton hors du code source.
Validation de l’entréeLe chemin du fichier, la taille du fichier, le nom de fichier, l’extension et la sûreté de l’URL sont vérifiés.Rejette les entrées non prises en charge avant l’envoi.
Construction de la charge utileGotenbergConvertPayload construit les données de formulaire multipart.Conserve le nom de fichier d’origine uniquement lorsque c’est sûr.
Requête de serviceLe pont envoie la requête vers /forms/libreoffice/convert.Configure le timeout et la politique de transport.
Analyse du résultatGotenbergResponseParser::parse() renvoie les octets du PDF et les métadonnées.Traite les réponses non-PDF ou d’erreur comme des échecs de conversion.
CheminRôle
app/Pdf/Conversion/*Wrapper applicatif autour de GotenbergBridge.
app/Pdf/Uploads/*Validation de l’upload, stockage et politique de nom de fichier.
app/Pdf/ConversionPolicy/*Politique de taille, de format et de sélection du service.
tests/Pdf/Conversion/*Tests de format, de fichier, de service et de transport.

Garde la validation des fichiers séparée de la conversion. Un service de conversion doit recevoir une entrée déjà autorisée, tout en continuant à s’appuyer sur la validation du package comme défense en profondeur.

<?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;
}
}
SchémaAPIÀ utiliser quandContrainte
Convertir un chemin de fichierGotenbergBridge::convertFile()Le document est déjà stocké sur le disque.Le chemin doit être lisible et approuvé par la politique.
Convertir des octets en mémoireGotenbergBridge::convertString()L’application dispose déjà des octets issus d’un upload ou d’un magasin d’objets.Le nom de fichier détermine toujours la détection du format.
Construire la charge utile directementGotenbergConvertPayloadDes tests ou un code de transport personnalisé ont besoin des octets multipart.La génération de la boundary doit rester indépendante de l’entrée utilisateur.
Analyser la réponse directementGotenbergResponseParser::parse()Un appel HTTP personnalisé veut tout de même utiliser l’analyse du package.Doit transmettre le OfficeFormat attendu.

GotenbergBridge::isAvailable() est un signal de disponibilité. Cela ne doit pas être le seul garde-fou à l’exécution. Un service peut répondre au contrôle de disponibilité, puis échouer lors de la conversion suivante.

ContrôleRôleNote opérationnelle
Validité de la configurationDétecter une URL d’API manquante.À exécuter au démarrage de l’application ou lors des contrôles de déploiement.
/health disponibilitéDétecter un service joignable.À utiliser pour les tableaux de bord de disponibilité.
Conversion d’une petite fixtureDétecter un LibreOffice défaillant ou une régression du service.À exécuter dans des smoke tests planifiés, pas à chaque requête.
Surveillance du timeoutDétecter la lenteur du service.Suivre par format et par taille de fichier.
Point d’extensionÀ utiliser pourContrainte
PSR-18 ClientInterfaceComportement personnalisé du client HTTP.Doit respecter la sémantique response/exception de PSR-18.
Fabriques PSR-17Création de requêtes et de flux.Requises pour la construction du pont.
HtmlSecurityPolicyInterfacePolitique de la couche d’analyse pour les entrées HTML.Complète la politique de sécurité de Gotenberg.
ResponseFactoryInterfaceConstruction de la réponse pour le transport cURL épinglé.Requis seulement quand tu utilises le chemin de transport du package.
GotenbergSecurityPolicyValidation de l’URL, de la taille du fichier, du nom de fichier et des pins.Garde l’autorisation applicative hors de cette couche.
  1. Commence par convertString() dans les tests pour que les fixtures soient explicites.
  2. Ajoute convertFile() seulement après avoir maîtrisé les chemins du système de fichiers.
  3. Maintiens la taille maximale de fichier en dessous des limites du service et de l’infrastructure.
  4. Utilise isAvailable() pour les signaux de disponibilité, pas comme un remplacement de la gestion des erreurs.
  5. Journalise le nom de fichier, le format, la taille, le statut et la durée. Ne journalise pas les octets du document.
  6. Ajoute des tests sur le timeout et les modes d’échec avant d’exposer les points de terminaison d’upload.
ÉchecOù le gérerRéponse recommandée
Extension non prise en chargeDétection de format.Rejeter avant l’envoi au service.
Nom de fichier non sûrPolitique de sécurité.Rejeter et normaliser la politique de nommage des uploads.
Fichier trop volumineuxPolitique d’upload et validation du package.Rejeter avant de lire ou d’envoyer des charges utiles volumineuses.
Gotenberg indisponibleFrontière du pont.Renvoyer une erreur applicative réessayable lorsque c’est approprié.
Réponse non-PDFAnalyseur de réponse.Traiter comme un échec de conversion et capturer le statut du service.
Échec de validation du pin ou de l’URLPolitique de transport.Échouer en mode fermé et alerter les opérateurs.
AspectValeur par défautQuand la remplacer
Timeout30 secondes.À augmenter seulement après avoir mesuré la latence réelle du service.
Taille maximale de fichier52,428,800 octets.À abaisser pour les points de terminaison publics ou multi-tenants.
Clé d’APIVide.À définir pour les déploiements Gotenberg privés.
Formats pris en chargedocx, xlsx, pptx, odt, ods, odp.Ajoute des formats uniquement lorsque OfficeFormat et l’analyseur les prennent en charge.
Jeux de pinsVide.Ajoute des pins avec des pins de secours et une procédure de rotation.
  • Les tests de format couvrent les extensions prises en charge et non prises en charge.
  • Les tests de fichier couvrent les fichiers manquants, illisibles ou trop volumineux, ainsi que les noms de fichiers non sûrs.
  • Les tests de service couvrent les réponses non-2xx, les corps de réponse invalides et les exceptions de transport.
  • Les tests de sécurité couvrent les URL de service privées ou invalides lorsque la politique les interdit.
  • Les tests de timeout vérifient que le timeout configuré est transmis au transport.
  • Les tests de fixtures gardent les documents d’exemple petits et non sensibles.