ข้ามไปยังเนื้อหา

คู่มือสำหรับนักพัฒนา Gotenberg

แพ็กเกจ Gotenberg ส่งงานแปลงเอกสารเป็น Portable Document Format (PDF) ไปยังบริการภายนอก ในโค้ดของแอปพลิเคชัน ให้กำหนดขอบเขตของบริการให้ชัดเจน ได้แก่ ตรวจสอบความถูกต้องของอินพุต สร้าง payload ส่งคำขอ แยกวิเคราะห์ผลลัพธ์ และจัดการความล้มเหลวของบริการ

ใช้คู่มือนี้เมื่อสร้างเวิร์กโฟลว์การแปลงเอกสารสำนักงานเป็น PDF จุดปลายทางสำหรับอัปโหลด การตรวจสอบสถานะบริการ หรือนโยบายการขนส่งที่เกี่ยวข้องกับ nextpdf/gotenberg

เลเยอร์เป็นเจ้าของโดยความรับผิดชอบอย่าใส่ไว้ที่นี่
แหล่งที่มาของการอัปโหลดหรือเอกสารแอปพลิเคชันตรวจสิทธิ์ผู้เรียก ตรวจสอบความถูกต้องของแหล่งที่มา และเลือกนโยบายการแปลงการตัดสินใจเรื่องจุดปลายทางของบริการหรือการตรึงการขนส่ง
การตรวจหารูปแบบnextpdf/gotenbergจับคู่นามสกุลที่ปลอดภัยกับ OfficeFormatเชื่อถือชนิดสื่อที่ประกาศมาโดยไม่ตรวจสอบความถูกต้องในระดับแอปพลิเคชัน
Bridgenextpdf/gotenbergสร้างคำขอแบบ multipart เรียก Gotenberg และแยกวิเคราะห์การตอบกลับ PDFการคิวรีโดเมนหรือนโยบายการจัดเก็บ
บริการ Gotenbergการปรับใช้แปลงเอกสารสำนักงานเป็น PDFการให้สิทธิ์ในแอปพลิเคชัน Hypertext Preprocessor (PHP)
เอนจินหลักnextpdf/nextpdfนำเข้าหรือรวมข้อมูล PDF ที่แปลงแล้วเมื่อจำเป็นการแปลงเอกสารสำนักงาน
ขั้นตอนพฤติกรรมการดำเนินการของนักพัฒนา
การสร้างการกำหนดค่าโหลดจุดปลายทางของ application programming interface (API) ค่าหมดเวลา ขนาดสูงสุด คีย์ API และพินจากการกำหนดค่าเก็บจุดปลายทางของบริการและโทเค็นไว้นอกซอร์สโค้ด
การตรวจสอบความถูกต้องของอินพุตตรวจสอบเส้นทางไฟล์ ขนาดไฟล์ ชื่อไฟล์ นามสกุล และความปลอดภัยของ Uniform Resource Locator (URL)ปฏิเสธอินพุตที่ไม่รองรับก่อนส่งออกไป
การสร้าง payloadGotenbergConvertPayload สร้างข้อมูลฟอร์มแบบ multipartเก็บชื่อไฟล์เดิมไว้เฉพาะเมื่อปลอดภัยเท่านั้น
คำขอบริการBridge ส่งคำขอไปยัง /forms/libreoffice/convertกำหนดค่าหมดเวลาและนโยบายการขนส่ง
การแยกวิเคราะห์ผลลัพธ์GotenbergResponseParser::parse() ส่งคืนไบต์ PDF และข้อมูลเมตาถือว่าการตอบกลับที่ไม่ใช่ PDF และการตอบกลับที่เป็นข้อผิดพลาดเป็นความล้มเหลวของการแปลง
เส้นทางวัตถุประสงค์
app/Pdf/Conversion/*ตัวห่อหุ้มระดับแอปพลิเคชันสำหรับ GotenbergBridge
app/Pdf/Uploads/*การตรวจสอบความถูกต้องของการอัปโหลด การจัดเก็บ และนโยบายชื่อไฟล์
app/Pdf/ConversionPolicy/*นโยบายขนาด รูปแบบ และการเลือกบริการ
tests/Pdf/Conversion/*การทดสอบรูปแบบ ไฟล์ บริการ และการขนส่ง

แยกการตรวจสอบความถูกต้องของไฟล์ออกจากการแปลง บริการแปลงควรรับเฉพาะอินพุตที่ได้รับอนุญาตแล้ว และยังคงพึ่งพาการตรวจสอบความถูกต้องของแพ็กเกจเป็นการป้องกันเชิงลึก

<?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;
}
}
รูปแบบAPIใช้เมื่อข้อจำกัด
แปลงจากเส้นทางไฟล์GotenbergBridge::convertFile()เอกสารถูกจัดเก็บไว้บนดิสก์แล้วเส้นทางต้องอ่านได้และได้รับอนุมัติตามนโยบาย
แปลงไบต์ในหน่วยความจำGotenbergBridge::convertString()แอปพลิเคชันมีไบต์จากการอัปโหลดหรือ object store อยู่แล้วชื่อไฟล์ยังเป็นตัวกำหนดการตรวจหารูปแบบ
สร้าง payload โดยตรงGotenbergConvertPayloadต้องการไบต์แบบ multipart สำหรับการทดสอบหรือโค้ดการขนส่งแบบกำหนดเองอย่าให้การสร้างขอบเขต (boundary) มาจากอินพุตของผู้ใช้
แยกวิเคราะห์การตอบกลับโดยตรงGotenbergResponseParser::parse()การเรียก Hypertext Transfer Protocol (HTTP) แบบกำหนดเองยังต้องใช้ตัวแยกวิเคราะห์ของแพ็กเกจต้องส่ง OfficeFormat ที่คาดหวัง

GotenbergBridge::isAvailable() เป็นสัญญาณความพร้อม ไม่ใช่กลไกป้องกันเพียงอย่างเดียวขณะรันไทม์ บริการอาจผ่านการตรวจสอบความพร้อมแล้ว แต่ยังล้มเหลวในการแปลงครั้งถัดไป

การตรวจสอบวัตถุประสงค์หมายเหตุการดำเนินงาน
ความถูกต้องของการกำหนดค่าตรวจหาจุดปลายทาง API ที่ขาดหายไปเรียกใช้ระหว่างบูตแอปหรือระหว่างตรวจสอบการปรับใช้
ความพร้อมใช้งานของ /healthตรวจว่าบริการเข้าถึงได้หรือไม่ใช้สำหรับแดชบอร์ดความพร้อม
การแปลงฟิกซ์เจอร์ขนาดเล็กตรวจหาพฤติกรรม LibreOffice ที่เสียหายหรือการถดถอยของบริการเรียกใช้ในการทดสอบ smoke ตามกำหนดเวลา ไม่ใช่ในทุกคำขอ
การตรวจสอบการหมดเวลาตรวจหาพฤติกรรมของบริการที่ช้าติดตามตามรูปแบบและขนาดไฟล์
จุดขยายใช้สำหรับข้อจำกัด
มาตรฐาน PHP Standard Recommendation (PSR)-18 ClientInterfaceพฤติกรรมไคลเอนต์ HTTP แบบกำหนดเองต้องสอดคล้องกับความหมายของการตอบกลับและข้อยกเว้นตาม PSR-18
แฟกทอรี PSR-17การสร้างคำขอและสตรีมจำเป็นสำหรับการสร้าง bridge
HtmlSecurityPolicyInterfaceนโยบายระดับการแยกวิเคราะห์สำหรับอินพุต Hypertext Markup Language (HTML)เสริมนโยบายความปลอดภัยของ Gotenberg
ResponseFactoryInterfaceการสร้างการตอบกลับสำหรับการขนส่ง cURL ที่ตรึงไว้จำเป็นเฉพาะเมื่อใช้เส้นทางการขนส่งของแพ็กเกจ
GotenbergSecurityPolicyการตรวจสอบความถูกต้องของ URL ขนาดไฟล์ ชื่อไฟล์ และพินเก็บการให้สิทธิ์ของแอปพลิเคชันไว้นอกเลเยอร์นี้
  1. เริ่มด้วย convertString() ในการทดสอบเพื่อให้ฟิกซ์เจอร์ชัดเจน
  2. เพิ่ม convertFile() หลังจากควบคุมเส้นทางในระบบไฟล์ได้แล้วเท่านั้น
  3. เก็บขนาดไฟล์สูงสุดไว้ต่ำกว่าขีดจำกัดของบริการและโครงสร้างพื้นฐาน
  4. ใช้ isAvailable() สำหรับสัญญาณความพร้อม ไม่ใช่เพื่อแทนที่การจัดการข้อผิดพลาด
  5. บันทึกชื่อไฟล์ รูปแบบ ขนาด สถานะ และระยะเวลา อย่าบันทึกไบต์ของเอกสาร
  6. เพิ่มการทดสอบการหมดเวลาและโหมดความล้มเหลวก่อนเปิดเผยจุดปลายทางสำหรับอัปโหลด
ความล้มเหลวตำแหน่งที่ควรจัดการการตอบสนองที่แนะนำ
นามสกุลที่ไม่รองรับการตรวจหารูปแบบปฏิเสธก่อนส่งไปยังบริการ
ชื่อไฟล์ที่ไม่ปลอดภัยนโยบายความปลอดภัยปฏิเสธและปรับนโยบายการตั้งชื่อไฟล์อัปโหลดให้เป็นมาตรฐาน
ไฟล์ขนาดเกินกำหนดนโยบายการอัปโหลดและการตรวจสอบความถูกต้องของแพ็กเกจปฏิเสธก่อนอ่านหรือส่ง payload ขนาดใหญ่
Gotenberg ไม่พร้อมใช้งานขอบเขตของ bridgeคืนข้อผิดพลาดของแอปพลิเคชันที่สามารถลองใหม่ได้เมื่อเหมาะสม
การตอบกลับที่ไม่ใช่ PDFตัวแยกวิเคราะห์การตอบกลับถือเป็นความล้มเหลวของการแปลงและเก็บสถานะบริการไว้
ความล้มเหลวในการตรวจสอบความถูกต้องของพินหรือ URLนโยบายการขนส่งล้มเหลวแบบปิด (fail closed) และแจ้งเตือนผู้ปฏิบัติงาน
ประเด็นที่เกี่ยวข้องค่าเริ่มต้นเมื่อใดควรแทนที่
ค่าหมดเวลา30 วินาทีเพิ่มหลังจากวัดความหน่วงจริงของบริการแล้วเท่านั้น
ขนาดไฟล์สูงสุด52,428,800 ไบต์ลดสำหรับจุดปลายทางสาธารณะหรือแบบหลายผู้เช่า
คีย์ APIว่างเปล่าตั้งค่าสำหรับการปรับใช้ Gotenberg แบบส่วนตัว
รูปแบบที่รองรับdocx, xlsx, pptx, odt, ods, odpเพิ่มรูปแบบเมื่อ OfficeFormat และตัวแยกวิเคราะห์รองรับเท่านั้น
ชุดพินว่างเปล่าเพิ่มพินพร้อมพินสำรองและขั้นตอนหมุนเวียน
  • การทดสอบรูปแบบครอบคลุมนามสกุลที่รองรับและไม่รองรับ
  • การทดสอบไฟล์ครอบคลุมไฟล์ที่ขาดหายไป ไฟล์ที่อ่านไม่ได้ ไฟล์ขนาดเกินกำหนด และชื่อไฟล์ที่ไม่ปลอดภัย
  • การทดสอบบริการครอบคลุมการตอบกลับที่ไม่ใช่ 2xx เนื้อหาการตอบกลับที่ไม่ถูกต้อง และข้อยกเว้นของการขนส่ง
  • การทดสอบความปลอดภัยครอบคลุม URL ของบริการแบบส่วนตัวหรือที่ไม่ถูกต้องเมื่อนโยบายห้ามไว้
  • การทดสอบการหมดเวลายืนยันว่าค่าหมดเวลาที่กำหนดค่าไว้ถูกส่งต่อไปยังการขนส่ง
  • การทดสอบฟิกซ์เจอร์ควรเก็บเอกสารตัวอย่างให้มีขนาดเล็กและไม่มีข้อมูลที่ละเอียดอ่อน