Ga naar inhoud

Gotenberg-ontwikkelaarsgids

Het Gotenberg-pakket stuurt conversie naar Portable Document Format (PDF) door naar een externe service. Houd die servicegrens expliciet in applicatiecode: valideer de invoer, bouw een payload, verstuur het verzoek, verwerk het resultaat en handel servicefouten af.

Gebruik deze gids wanneer je workflows bouwt voor office-naar-PDF-conversie, upload-endpoints, servicegezondheidscontroles of transportbeleid rond nextpdf/gotenberg.

LaagEigendom vanVerantwoordelijkheidPlaats hier niet
Upload- of documentbronApplicatieAutoriseer de aanroeper, valideer de bron en kies het conversiebeleid.Beslissingen over service-endpoints of transport-pinning.
Formaatdetectienextpdf/gotenbergKoppel veilige extensies aan OfficeFormat.Vertrouwen op gedeclareerde mediatypen zonder validatie in de applicatie.
Bridgenextpdf/gotenbergBouw het multipart-verzoek, roep Gotenberg aan en verwerk het PDF-antwoord.Domeinquery’s of opslagbeleid.
Gotenberg-serviceImplementatieConverteer het office-document naar PDF.Autorisatie in de Hypertext Preprocessor (PHP)-applicatie.
Core-enginenextpdf/nextpdfImporteer of combineer geconverteerde PDF-gegevens wanneer dat nodig is.Office-conversie.
FaseGedragActie van de ontwikkelaar
Configuratie aanmakenHet application programming interface (API)-endpoint, de timeout, de maximale grootte, de API-sleutel en de pins worden uit de configuratie geladen.Houd het service-endpoint en het token buiten de broncode.
InvoervalidatieHet bestandspad, de bestandsgrootte, de bestandsnaam, de extensie en de veiligheid van de Uniform Resource Locator (URL) worden gecontroleerd.Wijs niet-ondersteunde invoer af voordat je die verstuurt.
Payload opbouwenGotenbergConvertPayload bouwt multipart-formuliergegevens op.Bewaar de oorspronkelijke bestandsnaam alleen wanneer die veilig is.
ServiceverzoekDe bridge stuurt het verzoek naar /forms/libreoffice/convert.Configureer de timeout en het transportbeleid.
Resultaat verwerkenGotenbergResponseParser::parse() retourneert PDF-bytes en metadata.Behandel niet-PDF-antwoorden en foutantwoorden als conversiefouten.
PadDoel
app/Pdf/Conversion/*Applicatiewrapper rond GotenbergBridge.
app/Pdf/Uploads/*Uploadvalidatie, opslag en bestandsnaambeleid.
app/Pdf/ConversionPolicy/*Beleid voor grootte, formaat en serviceselectie.
tests/Pdf/Conversion/*Tests voor formaat, bestand, service en transport.

Houd bestandsvalidatie gescheiden van conversie. Je conversieservice hoort al geautoriseerde invoer te ontvangen en moet tegelijk op de validatie van het pakket blijven vertrouwen als verdediging in de diepte.

<?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;
}
}
PatroonAPIGebruik wanneerBeperking
Bestandspad converterenGotenbergBridge::convertFile()Het document staat al op schijf.Het pad moet leesbaar zijn en door beleid zijn goedgekeurd.
In-memory bytes converterenGotenbergBridge::convertString()Je applicatie heeft al bytes uit een upload of een object store.De bestandsnaam stuurt nog steeds de formaatdetectie aan.
Payload rechtstreeks bouwenGotenbergConvertPayloadJe hebt multipart-bytes nodig voor tests of voor eigen transportcode.Houd het genereren van de boundary buiten de gebruikersinvoer.
Antwoord rechtstreeks verwerkenGotenbergResponseParser::parse()Eigen Hypertext Transfer Protocol (HTTP)-aanroepen hebben nog steeds de verwerking van het pakket nodig.Je moet het verwachte OfficeFormat doorgeven.

GotenbergBridge::isAvailable() is een gereedheidssignaal, niet je enige runtime-waarborg. Een service kan de gereedheidscontrole doorstaan en toch bij de volgende conversie mislukken.

ControleDoelOperationele opmerking
ConfiguratiegeldigheidDetecteer een ontbrekend API-endpoint.Voer dit uit tijdens het opstarten van de app of bij implementatiecontroles.
Beschikbaarheid van /healthDetecteer of de service bereikbaar is.Gebruik dit voor gereedheidsdashboards.
Conversie van een kleine fixtureDetecteer kapot LibreOffice-gedrag of een serviceregressie.Voer dit uit in geplande smoke-tests, niet bij elk verzoek.
Timeout-monitoringDetecteer traag servicegedrag.Monitor dit per formaat en bestandsgrootte.
UitbreidingspuntGebruik het voorBeperking
PHP Standard Recommendation (PSR)-18 ClientInterfaceAangepast gedrag van de HTTP-client.Moet de respons- en exception-semantiek van PSR-18 volgen.
PSR-17-factory’sAanmaken van verzoek en stream.Vereist om de bridge te construeren.
HtmlSecurityPolicyInterfaceBeleid op parse-niveau voor invoer in Hypertext Markup Language (HTML).Vormt een aanvulling op het beveiligingsbeleid van Gotenberg.
ResponseFactoryInterfaceConstructie van het antwoord voor het vastgepinde cURL-transport.Alleen vereist wanneer je het transportpad van het pakket gebruikt.
GotenbergSecurityPolicyValidatie van URL, bestandsgrootte, bestandsnaam en pin.Houd applicatieautorisatie buiten deze laag.
  1. Begin met convertString() in tests om fixtures expliciet te houden.
  2. Voeg convertFile() pas toe wanneer de bestandssysteempaden onder controle zijn.
  3. Houd de maximale bestandsgrootte onder de limieten van de service en de infrastructuur.
  4. Gebruik isAvailable() voor gereedheidssignalen, niet als vervanging voor foutafhandeling.
  5. Log de bestandsnaam, het formaat, de grootte, de status en de duur. Log geen documentbytes.
  6. Voeg tests voor timeouts en faalmodi toe voordat je upload-endpoints blootstelt.
FoutWaar deze moet worden afgehandeldAanbevolen respons
Niet-ondersteunde extensieFormaatdetectie.Wijs af voordat je naar de service verstuurt.
Onveilige bestandsnaamBeveiligingsbeleid.Wijs deze af en normaliseer het naamgevingsbeleid voor uploads.
Te groot bestandUploadbeleid en validatie van het pakket.Wijs af voordat je grote payloads inleest of verstuurt.
Gotenberg niet beschikbaarBridge-grens.Retourneer waar passend een opnieuw te proberen applicatiefout.
Niet-PDF-antwoordAntwoordverwerker.Behandel dit als een conversiefout en leg de servicestatus vast.
Validatiefout voor pin of URLTransportbeleid.Faal gesloten en waarschuw de operators.
AandachtspuntStandaardWanneer overschrijven
Timeout30 seconden.Verhoog dit alleen nadat je de werkelijke servicelatentie hebt gemeten.
Maximale bestandsgrootte52,428,800 bytes.Verlaag dit voor publieke of multi-tenant-endpoints.
API-sleutelLeeg.Stel dit in voor private Gotenberg-implementaties.
Ondersteunde formatendocx, xlsx, pptx, odt, ods, odp.Voeg formaten alleen toe wanneer OfficeFormat en de verwerker ze ondersteunen.
Pin-setsLeeg.Voeg pins toe met back-uppins en een rotatieprocedure.
  • Formaattests dekken ondersteunde en niet-ondersteunde extensies.
  • Bestandstests dekken ontbrekende bestanden, onleesbare bestanden, te grote bestanden en onveilige bestandsnamen.
  • Servicetests dekken niet-2xx-antwoorden, ongeldige antwoordbodies en transport-exceptions.
  • Beveiligingstests dekken private of ongeldige service-URL’s wanneer het beleid die verbiedt.
  • Timeout-tests stellen vast dat de geconfigureerde timeout aan het transport wordt doorgegeven.
  • Fixture-tests houden voorbeelddocumenten klein en niet-gevoelig.