İçeriğe geç

Cloudflare için geliştirici kılavuzu

Cloudflare paketi, Taşınabilir Belge Biçimi (PDF) işlemeyi bir Worker sınırına taşır. Worker işleme, yerel yedek, API koruması ve R2 arşivini, her biri kendi hata yönetimine sahip ayrı yetenekler olarak ele alın.

Kenar işleme hizmetleri, korumalı işleme uç noktaları, arşiv iş akışları veya yerel yedek yolları oluştururken bu kılavuzu nextpdf/cloudflare ile birlikte kullanın.

KatmanSahibiSorumlulukBuraya koymayın
Uygulama uç noktasıUygulamaÇağıranı yetkilendirin, işleme isteğini normalleştirin ve iş politikasını uygulayın.Kodda saklanan Worker belirteçleri.
API korumasınextpdf/cloudflare ve uygulamaAPI anahtarı denetimleri, yük boyutu denetimleri ve süreç içi hız sınırı kararları.Faturalandırma, kiracı hakları veya kalıcı kota uygulaması.
Cloudflare işleyicisinextpdf/cloudflareHTML’yi ve Worker URL’sini doğrulayın, işleme yükünü gönderin ve yanıtı ayrıştırın.Şablon işleme veya etki alanı sorguları.
WorkerUygulama dağıtımıBrowser Rendering’i çalıştırın ve PDF baytlarını ya da yapılandırılmış bir sonuç döndürün.PHP tarafı depolama politikası.
Yerel yedekUygulama dağıtımıWorker kullanılamadığında işleme yapın.İşletim kesintilerini gizleyen sessiz yedek.
R2 arşivinextpdf/cloudflarePDF dosyalarını karşıya yükleyin, nesne anahtarları ve imzalı URL’ler oluşturun.Gözden geçirilmeden eklenen hassas iş meta verileri.
AşamaDavranışGeliştirici eylemi
Yapılandırma oluşturmaWorker URL’sini, API belirtecini, zaman aşımlarını, boyut sınırlarını, yedeği ve sabitlemeleri yükler.Gizli bilgileri dağıtım yapılandırmasında tutun.
İstek korumasıİsteğe bağlı ApiProtection, anahtarı, boyutu ve hız sınırını doğrular.Maliyetli işleme çalışmasından önce çalıştırın.
İşleyici çağrısıCloudflareHtmlRenderer HTML’yi ve Worker URL’sini doğrular, ardından JSON’u gönderir.Worker kullanılamamasını ve işleme hatalarını ayrı ayrı ele alın.
Yanıt ayrıştırmaCloudflareResponseParser::parse() ikili PDF çıktısını veya yapılandırılmış JSON çıktısını kabul eder.Geçersiz veya PDF olmayan çıktıyı reddedin.
Yerel yedekİsteğe bağlı bir yerel işleyici, Worker hatasını ele alır.Yerel işleyici fabrikasını yalnızca barındırma ortamı bunu desteklediğinde ekleyin.
R2 arşiviR2ArchiveManager PDF baytlarını saklar ve imzalı URL’ler oluşturur.Bilinçli olarak hassas bilgi saklamadığınız sürece meta verileri hassas olmayan bilgilerle sınırlı tutun.
YolAmaç
app/Pdf/Cloudflare/*Uygulama tarafındaki CloudflareHtmlRenderer sarmalayıcıları.
app/Pdf/Workers/*Worker isteği veri aktarım nesneleri (DTO’lar) ve uç noktaya özgü politika.
app/Pdf/Archive/*R2 arşivi orkestrasyonu ve saklama kararları.
app/Pdf/Fallback/*LocalRendererFactoryInterface, izin verilen yedek için uygulama.
tests/Pdf/Cloudflare/*Worker kapalıyken çalışma, geçersiz belirteç, yük ve arşiv testleri.

PHP API belirtecini Worker belirtecinden ayrı tutun. PHP, Worker’a karşı kimliğini doğrular. Worker, tarayıcı çalışmasına başlamadan önce gelen isteklerin kimliğini doğrulamalıdır.

<?php
use NextPDF\Cloudflare\ApiProtection;
use NextPDF\Cloudflare\ApiProtectionConfig;
use NextPDF\Cloudflare\ApiKeyValidator;
$protection = new ApiProtection(
new ApiProtectionConfig(maxRequestsPerMinute: 30),
new ApiKeyValidator([$expectedApiKey]),
);
$result = $protection->checkRequest(
clientId: $clientId,
payloadSize: strlen($html),
apiKey: $presentedApiKey,
);
if (!$result->allowed) {
return new JsonResponse(['error' => $result->denialReason], 429, $result->toHeaders());
}

İşleyiciyi, çerçevenizin sağladığı PSR-18 ve PSR-17 dahil PHP Standartları Önerisi (PSR) bağımlılıklarıyla oluşturun. Yerel yedeği açıkça belirtin; böylece işletim ekipleri sistemin Worker’ı kullanmayı ne zaman bıraktığını görebilir.

<?php
use NextPDF\Cloudflare\CloudflareHtmlRenderer;
use NextPDF\Cloudflare\CloudflareRendererConfig;
$renderer = new CloudflareHtmlRenderer(
config: CloudflareRendererConfig::fromArray([
'worker_url' => getenv('NEXTPDF_CLOUDFLARE_WORKER_URL'),
'api_token' => getenv('NEXTPDF_CLOUDFLARE_API_TOKEN'),
'render_timeout' => 30,
'max_html_size' => 1_000_000,
'fallback_to_local' => false,
]),
httpClient: $httpClient,
requestFactory: $requestFactory,
streamFactory: $streamFactory,
);
$rendered = $renderer->render($html, widthPt: 595.28);

Yalnızca işleme başarılı olduktan ve politika sonucu kabul ettikten sonra arşivleyin. Genel URL’leri ve imzalı URL’leri ayrı kararlar olarak değerlendirin.

<?php
use NextPDF\Cloudflare\R2ArchiveManager;
$upload = $archive->upload(
pdfData: $rendered->pdfData,
filename: 'invoice-1234.pdf',
metadata: [
'document_type' => 'invoice',
],
);
if ($upload->isValid()) {
$temporaryUrl = $archive->generateSignedUrl($upload->key, 600);
}

Saklama ve erişim politikanız açıkça izin vermediği sürece nesne meta verilerine müşteri adlarını, e-posta adreslerini, fatura toplamlarını veya düzenlemeye tabi tanımlayıcıları koymayın.

Genişletme noktasıŞunun için kullanınKısıtlama
LocalRendererFactoryInterfaceArtisan veya başka bir işleyici üzerinden yerel yedek.Mutlaka LocalRendererInterface arabirimini uygulayan bir nesne döndürmelidir.
ApiProtectionConfigAPI anahtarı, yük boyutu ve hız sınırı politikası.Bellek içi sınırlar her süreç için geçerlidir.
ApiKeyValidatorZamanlama açısından güvenli anahtar doğrulama ve anahtar döndürme yardımcıları.Gizli bilgileri kaynak kodunun dışında saklayın.
R2ArchiveConfigPaket, kimlik bilgileri, yol öneki, uç nokta ve boyut sınırları.Kimlik bilgileri asla günlüğe kaydedilmemelidir.
PinnedCurlTransportİnternet Protokolü (IP) ve Konu Genel Anahtar Bilgisi (SPKI) sabitleme uygulaması.cURL etkin bir çalışma zamanı ve yanıt fabrikası gerektirir.
CloudflareResponseParserWorker yanıtını ayrıştırma.Geçersiz PDF çıktısını veya hata yanıtlarını reddeder.
  1. Önce yerel bir işleme yolu oluşturun.
  2. Küçük ve temsili bir HTML örneğiyle Worker işlemesini ekleyin.
  3. Genel uç noktaları açığa çıkarmadan önce istek korumasını etkinleştirin.
  4. R2 yüklemesini yalnızca işleme ve yanıt akışları kararlı hale geldikten sonra ekleyin.
  5. Worker kapalı, geçersiz belirteç, aşırı büyük yük, hız sınırı ve R2 hatası yollarını test edin.
  6. Worker işlemesini, yedek işlemesini, arşiv yüklemesini ve imzalı URL oluşturmayı birbirinden ayıran günlükler ekleyin.
HataNerede ele alınmalıÖnerilen yanıt
Eksik veya geçersiz API anahtarıAPI koruma katmanında.İsteği, işleme çalışması başlamadan önce reddedin.
Aşırı büyük yükAPI korumasında veya işleyici doğrulamasında.Worker çağrısı olmadan bir doğrulama hatası döndürün.
Güvenli olmayan Worker URL’siİşleyici güvenlik politikasında.Ağ G/Ç işlemi başlamadan önce yapılandırmayı veya isteği başarısız hale getirin.
Worker kullanılamıyorİşleyici sınırında.Açıkça tanımlı yedeği yalnızca izin verildiğinde kullanın; aksi takdirde görünür biçimde başarısız olun.
R2 yükleme hatasıArşiv sınırında.Arşiv isteğe bağlıysa PDF yanıtını döndürün; politika gereği arşiv zorunluysa başarısız olun.
Sabitleme döndürme hatasıDağıtım ve işletimde.Yedek sabitlemeler ve bir geri alma planıyla döndürün.
KonuVarsayılanNe zaman geçersiz kılınmalı
YedekYapılandırma varsayılanına göre etkin.Yerel işleme dağıtım yalıtımını ihlal edecekse devre dışı bırakın.
En büyük HTML boyutu5,000,000 bayt.Genel uç noktalar için düşürün.
İmzalı URL yaşam süresi (TTL)3600 saniye.Hassas PDF’ler için kısaltın.
Sabitleme kümeleriBoş.Sabitlemeleri yalnızca bir döndürme planı ve yedek sabitlemelerle ekleyin.
API anahtarı gereksinimiKoruma yapılandırması varsayılanına göre etkin.Yalnızca özel, halihazırda kimliği doğrulanmış dahili çağrılar için devre dışı bırakın.
  • İşleyici testleri geçerli HTML, aşırı büyük HTML, geçersiz Worker URL’si ve Worker hata yanıtını kapsar.
  • API koruma testleri eksik anahtarı, geçersiz anahtarı, çok büyük bir yükü ve aşılan bir hız sınırını kapsar.
  • R2 testleri başarılı yüklemeyi, çok büyük yüklemeyi, başarısız HTTP durumunu, geçersiz paketi ve imzalı URL oluşturmayı kapsar.
  • Yedek testleri, yerel işleyici yolunun açıkça tanımlı ve gözlemlenebilir olduğunu doğrular.
  • Aktarım testleri sabitlenmiş IP’leri, genel anahtar sabitlemelerini, zaman aşımını ve politika gereği devre dışı bırakılan yönlendirmeleri kapsar.
  • Gözlemlenebilirlik testleri işleme, yedek, arşiv ve imzalı URL oluşturma için ayrı günlük olaylarını doğrular.