Lewati ke konten

Panduan pengembang Gotenberg

Paket Gotenberg mengirim konversi Portable Document Format (PDF) ke layanan eksternal. Dalam kode aplikasi, jaga agar batas layanan tetap eksplisit: validasi masukan, bangun payload, kirim permintaan, parse hasilnya, dan tangani kegagalan layanan.

Gunakan panduan ini saat Anda membangun alur kerja konversi office-ke-PDF, endpoint unggah, pemeriksaan kesehatan layanan, atau kebijakan transport di sekitar nextpdf/gotenberg.

LapisanDimiliki olehTanggung jawabJangan letakkan di sini
Unggahan atau sumber dokumenAplikasiOtorisasi pemanggil, validasi sumber, dan pemilihan kebijakan konversi.Penentuan endpoint layanan atau penyematan transport.
Deteksi formatnextpdf/gotenbergPetakan ekstensi yang aman ke OfficeFormat.Memercayai tipe media yang dideklarasikan tanpa validasi aplikasi.
Jembatannextpdf/gotenbergBangun permintaan multipart, panggil Gotenberg, dan parse respons PDF.Kueri domain atau kebijakan penyimpanan.
Layanan GotenbergdeploymentKonversi dokumen office menjadi PDF.Otorisasi aplikasi Hypertext Preprocessor (PHP).
Mesin intinextpdf/nextpdfMengimpor atau menggabungkan data PDF hasil konversi bila diperlukan.Konversi office.
TahapPerilakuTindakan pengembang
Pembuatan konfigurasiEndpoint application programming interface (API), timeout, ukuran maksimum, kunci API, dan pin dimuat dari konfigurasi.Pastikan endpoint layanan dan token tetap berada di luar kode sumber.
Validasi masukanPath berkas, ukuran berkas, nama berkas, ekstensi, dan keamanan Uniform Resource Locator (URL) diperiksa.Tolak masukan yang tidak didukung sebelum Anda mengirimnya.
Konstruksi payloadGotenbergConvertPayload membangun data formulir multipart.Pertahankan nama berkas asli hanya jika aman.
Permintaan layananJembatan mengirim permintaan ke /forms/libreoffice/convert.Konfigurasikan timeout dan kebijakan transport.
Penguraian hasilGotenbergResponseParser::parse() mengembalikan byte PDF dan metadata.Perlakukan respons non-PDF dan respons error sebagai kegagalan konversi.
PathTujuan
app/Pdf/Conversion/*Pembungkus aplikasi untuk GotenbergBridge.
app/Pdf/Uploads/*Validasi unggahan, penyimpanan, dan kebijakan nama berkas.
app/Pdf/ConversionPolicy/*Kebijakan ukuran, format, dan pemilihan layanan.
tests/Pdf/Conversion/*Pengujian format, berkas, layanan, dan transport.

Pisahkan validasi berkas dari konversi. Layanan konversi Anda sebaiknya menerima masukan yang sudah terotorisasi, lalu tetap mengandalkan validasi paket sebagai lapisan pertahanan tambahan.

<?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;
}
}
PolaAPIGunakan saatKendala
Konversi path berkasGotenbergBridge::convertFile()Dokumen sudah tersimpan di disk.Path harus dapat dibaca dan disetujui oleh kebijakan.
Konversi byte dalam memoriGotenbergBridge::convertString()Aplikasi Anda sudah memiliki byte dari unggahan atau object store.Nama berkas tetap mengendalikan deteksi format.
Bangun payload secara langsungGotenbergConvertPayloadAnda membutuhkan byte multipart untuk pengujian atau kode transport khusus.Jaga agar pembuatan boundary tetap berada di luar masukan pengguna.
Parse respons secara langsungGotenbergResponseParser::parse()Panggilan Hypertext Transfer Protocol (HTTP) khusus tetap membutuhkan parser paket.Anda harus meneruskan OfficeFormat yang diharapkan.

GotenbergBridge::isAvailable() adalah sinyal kesiapan, bukan satu-satunya perlindungan runtime Anda. Layanan dapat lolos pemeriksaan kesiapan, tetapi tetap gagal pada konversi berikutnya.

PemeriksaanTujuanCatatan operasional
Validitas konfigurasiMendeteksi endpoint API yang hilang.Jalankan ini saat boot aplikasi atau pemeriksaan deployment.
Ketersediaan /healthMendeteksi apakah layanan dapat dijangkau.Gunakan ini untuk dasbor kesiapan.
Konversi fixture kecilMendeteksi perilaku LibreOffice yang rusak atau regresi layanan.Jalankan ini dalam smoke test terjadwal, bukan di setiap permintaan.
Pemantauan timeoutMendeteksi perilaku layanan yang lambat.Lacak ini berdasarkan format dan ukuran berkas.
Titik ekstensiGunakan untukKendala
PHP Standard Recommendation (PSR)-18 ClientInterfacePerilaku klien HTTP khusus.Harus mengikuti semantik respons dan eksepsi PSR-18.
Factory PSR-17Pembuatan permintaan dan stream.Diperlukan untuk konstruksi jembatan.
HtmlSecurityPolicyInterfaceKebijakan pada lapisan parse untuk masukan Hypertext Markup Language (HTML).Melengkapi kebijakan keamanan Gotenberg.
ResponseFactoryInterfaceKonstruksi respons transport cURL yang tersemat (pinned).Diperlukan hanya saat Anda menggunakan jalur transport paket.
GotenbergSecurityPolicyValidasi URL, ukuran berkas, nama berkas, dan pin.Jaga agar otorisasi aplikasi tetap berada di luar lapisan ini.
  1. Mulailah dengan convertString() dalam pengujian agar fixture tetap eksplisit.
  2. Tambahkan convertFile() hanya setelah path filesystem berada dalam kendali.
  3. Jaga agar ukuran berkas maksimum tetap di bawah batas layanan dan infrastruktur.
  4. Gunakan isAvailable() untuk sinyal kesiapan, bukan sebagai pengganti penanganan error.
  5. Catat nama berkas, format, ukuran, status, dan durasi. Jangan catat byte dokumen.
  6. Tambahkan pengujian timeout dan mode kegagalan sebelum Anda mengekspos endpoint unggah.
KegagalanDi mana seharusnya ditanganiRespons yang direkomendasikan
Ekstensi tidak didukungDeteksi format.Tolak sebelum Anda mengirim ke layanan.
Nama berkas tidak amanKebijakan keamanan.Tolak dan normalisasikan kebijakan penamaan unggahan.
Berkas berukuran berlebihKebijakan unggahan dan validasi paket.Tolak sebelum Anda membaca atau mengirim payload besar.
Gotenberg tidak tersediaBatas jembatan.Kembalikan error aplikasi yang dapat dicoba ulang bila sesuai.
Respons non-PDFParser respons.Perlakukan sebagai kegagalan konversi dan catat status layanan.
Kegagalan validasi pin atau URLKebijakan transport.Gagal secara tertutup dan beri tahu operator.
AspekDefaultKapan menimpa
Timeout30 detik.Naikkan hanya setelah Anda mengukur latensi layanan yang sesungguhnya.
Ukuran berkas maksimum52,428,800 byte.Turunkan untuk endpoint publik atau multi-tenant.
Kunci APIKosong.Setel untuk deployment Gotenberg privat.
Format yang didukungdocx, xlsx, pptx, odt, ods, odp.Tambahkan format hanya jika OfficeFormat dan parser mendukungnya.
Set pinKosong.Tambahkan pin dengan pin cadangan dan prosedur rotasi.
  • Pengujian format mencakup ekstensi yang didukung dan yang tidak didukung.
  • Pengujian berkas mencakup berkas yang hilang, berkas yang tidak dapat dibaca, berkas berukuran berlebih, dan nama berkas yang tidak aman.
  • Pengujian layanan mencakup respons non-2xx, badan respons yang tidak valid, dan eksepsi transport.
  • Pengujian keamanan mencakup URL layanan yang privat atau tidak valid saat kebijakan melarangnya.
  • Pengujian timeout memastikan bahwa timeout yang dikonfigurasi diteruskan ke transport.
  • Pengujian fixture memastikan dokumen contoh tetap kecil dan tidak sensitif.