Cloudflare API-referentie
In het kort
Sectie met titel “In het kort”Het NextPDF\Cloudflare-package vormt de brug naar edge-rendering. Uw PHP-proces houdt de Hypertext Markup Language (HTML) in eigen beheer, terwijl een Cloudflare Worker de headless browser draait. Het package stelt een door een Worker ondersteunde HTML-renderer (CloudflareHtmlRenderer), de waarde-objecten die deze retourneert, een verzoekbeschermingslaag voor render-endpoints (ApiProtection), een R2-archiefservice voor gerenderde Portable Document Format (PDF)-bestanden (R2ArchiveManager) en gepind-transporthulpprogramma’s beschikbaar voor het versterken van Transport Layer Security (TLS) en Domain Name System (DNS). Configuratie wordt vastgelegd in drie onveranderlijke objecten (CloudflareRendererConfig, ApiProtectionConfig, R2ArchiveConfig).
Maak om te beginnen een CloudflareRendererConfig, koppel die aan CloudflareHtmlRenderer en roep render() aan. Die aanroep stuurt uw HTML naar de Worker en retourneert een CloudflareRenderResult met de PDF-bytes. Bescherming, archivering en pinning liggen als lagen om die aanroep heen.
Veelvoorkomende taken
Sectie met titel “Veelvoorkomende taken”Deze fragmenten beschrijven de workflows die u waarschijnlijk het vaakst gebruikt. Elk fragment staat op zichzelf, is geverifieerd tegen src/Cloudflare/ en leest secrets uit de omgeving.
Render een HTML-string naar een PDF aan de edge met de canonieke aanroep:
<?php
declare(strict_types=1);
use GuzzleHttp\Client;use GuzzleHttp\Psr7\HttpFactory;use NextPDF\Cloudflare\CloudflareHtmlRenderer;use NextPDF\Cloudflare\CloudflareRendererConfig;
$httpFactory = new HttpFactory();
$renderer = new CloudflareHtmlRenderer( config: new CloudflareRendererConfig( workerUrl: 'https://pdf-renderer.example.workers.dev/render', apiToken: getenv('CF_PDF_TOKEN') ?: throw new RuntimeException('CF_PDF_TOKEN not set'), ), httpClient: new Client(), requestFactory: $httpFactory, streamFactory: $httpFactory, responseFactory: $httpFactory,);
$result = $renderer->render('<h1>Hello from the edge</h1>', widthPt: 595.28);
if ($result->isValid()) { file_put_contents('output.pdf', $result->pdfData);}Wat het doet: het stuurt de HTML via Hypertext Transfer Protocol Secure (HTTPS) naar de Worker en schrijft de geretourneerde A4-PDF-bytes naar schijf nadat isValid() een echte PDF bevestigt.
Archiveer een gerenderde PDF naar R2 en retourneer een kortlevende link:
<?php
declare(strict_types=1);
use NextPDF\Cloudflare\R2ArchiveConfig;use NextPDF\Cloudflare\R2ArchiveManager;
$archive = new R2ArchiveManager( config: R2ArchiveConfig::fromArray([ 'bucket_name' => 'pdf-archive', 'account_id' => getenv('CF_ACCOUNT_ID') ?: '', 'access_key_id' => getenv('R2_ACCESS_KEY_ID') ?: '', 'secret_access_key' => getenv('R2_SECRET_ACCESS_KEY') ?: '', ]), httpClient: $httpClient, // PSR-18 ClientInterface requestFactory: $requestFactory, // PSR-17 RequestFactoryInterface streamFactory: $streamFactory, // PSR-17 StreamFactoryInterface);
$upload = $archive->upload($result->pdfData, 'invoice-1234.pdf');
$signedUrl = $upload->isValid() ? $archive->generateSignedUrl($upload->key, expiresInSeconds: 600) : null;Wat het doet: het uploadt de PDF-bytes naar een op datum gepartitioneerde R2-sleutel en maakt bij succes een vooraf ondertekende uniform resource locator (URL) die 10 minuten geldig is voor tijdelijke download.
Bescherm een render-endpoint voordat het dure Worker-werk start:
<?php
declare(strict_types=1);
use NextPDF\Cloudflare\ApiKeyValidator;use NextPDF\Cloudflare\ApiProtection;use NextPDF\Cloudflare\ApiProtectionConfig;
$protection = new ApiProtection( config: new ApiProtectionConfig(maxRequestsPerMinute: 30), keyValidator: new ApiKeyValidator([getenv('RENDER_API_KEY') ?: '']),);
$decision = $protection->checkRequest( clientId: $clientIp, payloadSize: strlen($html), apiKey: $presentedApiKey,);
if (!$decision->allowed) { // Reject with 429 and rate-limit headers before any render call. return [429, $decision->toHeaders(), $decision->denialReason];}Wat het doet: het valideert de API-sleutel en payloadgrootte, controleert de rate limit per client en retourneert een beslissing plus de response-headers die u toevoegt wanneer het verzoek wordt geweigerd.
Renderer
Sectie met titel “Renderer”Deze tabel beschrijft het kernoppervlak van de renderer. Gebruik deze wanneer u configuratie opbouwt, de renderer bouwt of render- en bereikbaarheidsaanroepen doet.
| Symbool | Parameters | Standaardgedrag | Retourwaarde | Gooit of faalt met | Opmerkingen |
|---|---|---|---|---|---|
new CloudflareRendererConfig(string $workerUrl, string $apiToken, int $renderTimeout = 30, string $defaultCss = '', int $maxHtmlSize = 5000000, ?string $r2FontBucket = null, bool $fallbackToLocal = true, array $pinnedPublicKeys = [], array $backupPublicKeys = []) | Worker-URL, bearer-token, time-out, Cascading Style Sheets (CSS), groottelimiet, optionele R2-lettertypebucket, fallback-vlag, pinsets. | Lokale fallback is ingeschakeld; pinning staat uit wanneer de pin-arrays leeg zijn. | CloudflareRendererConfig | Niet verwacht. | Houd het API-token geheim; gebruik bij voorkeur HTTPS-worker-URL’s. |
CloudflareRendererConfig::fromArray(array $config) | worker_url, api_token, render_timeout, default_css, max_html_size, r2_font_bucket, fallback_to_local, pin-arrays. | Ontbrekende optionele sleutels gebruiken de standaardwaarden van de constructor. | CloudflareRendererConfig | Niet verwacht. | Gebruik dit voor config-arrays in frameworkstijl. |
CloudflareRendererConfig::isValid() | geen. | Vereist een niet-lege worker-URL en een niet-leeg API-token. | bool | Niet verwacht. | Een ongeldige config leidt tot fallback of tot een rendererfout. |
CloudflareRendererConfig::allPublicKeyPins() | geen. | Combineert primaire en back-up publieke-sleutelpins. | list<string> | Niet verwacht. | Een lege lijst schakelt pinning uit. |
new CloudflareHtmlRenderer(CloudflareRendererConfig $config, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory, ?LoggerInterface $logger = null, ?LocalRendererFactoryInterface $localRendererFactory = null, ?HtmlSecurityPolicyInterface $htmlSecurityPolicy = null, ?ResponseFactoryInterface $responseFactory = null) | Config, PHP Standards Recommendation (PSR)-Hypertext Transfer Protocol (HTTP)-dependencies, optionele logger, optionele lokale fallback-factory, optioneel HTML-beleid, optionele response-factory. | Gebruikt DefaultHtmlSecurityPolicy als er geen HTML-beleid wordt opgegeven. | CloudflareHtmlRenderer | Container-wiringfouten. | De response-factory schakelt gepind cURL-transport in wanneer dat nodig is. |
CloudflareHtmlRenderer::render(string $html, float $widthPt = 595.28, float $heightPt = 0, array $fontFiles = []) | HTML, paginabreedte, paginahoogte, lettertypebestanden in R2. | A4-breedte, automatische hoogte, geen lettertypebestanden. | CloudflareRenderResult | CloudflareNotAvailableException, CloudflareRenderException, validatiefouten. | Valideert de HTML-grootte en de worker-URL voordat er netwerk-input/output (I/O) plaatsvindt. |
CloudflareHtmlRenderer::getHtmlSecurityPolicy() | geen. | Retourneert het geconfigureerde beleid van de parse-laag. | HtmlSecurityPolicyInterface | Niet verwacht. | Gebruik dit samen met endpoint-bescherming en Worker-URL-validatie. |
CloudflareHtmlRenderer::isAvailable() | geen. | Stuurt een HEAD-verzoek naar de worker als de config geldig is. | bool | Retourneert false bij fouten. | Gebruik voor gereedheidscontroles, niet als enige runtime-bescherming. |
Renderer-waarde-objecten en beveiliging
Sectie met titel “Renderer-waarde-objecten en beveiliging”Gebruik deze tabel voor verzoek- en resultaatwaarde-objecten (CloudflareRenderResult, CloudflareRenderPayload) en statische controles op de transportlaag die HTML, de Worker-URL en DNS-pins valideren vóór netwerk-I/O.
| Symbool | Parameters | Standaardgedrag | Retourwaarde | Gooit of faalt met | Opmerkingen |
|---|---|---|---|---|---|
new CloudflareRenderResult(string $pdfData, float $widthPt, float $heightPt, float $contentHeightPx = 0.0, string $renderLocation = '', float $renderTimeMs = 0.0) | PDF-bytes, breedte, hoogte, gemeten inhoudshoogte, edge-locatie, rendertijd. | Metadata blijven leeg wanneer de Worker deze niet rapporteert. | CloudflareRenderResult | Niet verwacht. | Doorgaans geretourneerd door CloudflareResponseParser::parse(). |
CloudflareRenderResult::isValid() | geen. | Controleert op niet-lege PDF-bytes die met een PDF-header beginnen. | bool | Niet verwacht. | Gebruik dit vóór het archiveren of voordat u bytes aan een andere laag doorgeeft. |
CloudflareRenderResult::size() | geen. | Telt de gerenderde PDF-bytes. | int | Niet verwacht. | Voeg toe aan quota- en auditlogica. |
new CloudflareRenderPayload(string $html, float $widthPt, float $heightPt = 0, string $defaultCss = '', ?string $r2FontBucket = null, array $fontFiles = []) | HTML, grootte, CSS, optionele R2-lettertypebucket, lijst met lettertypebestanden. | Automatische hoogte, geen standaard-CSS, geen R2-lettertypebucket, geen lettertypebestanden. | CloudflareRenderPayload | Niet verwacht. | Waarde-object voor de verzoekpayload. |
CloudflareRenderPayload::toJson() | geen. | Serialiseert HTML, grootte, CSS en lettertypereferenties als JavaScript Object Notation (JSON) voor de Worker. | string | JSON-coderingsfouten. | Low-level-API voor de verzoekpayload. |
CloudflareResponseParser::parse(ResponseInterface $response, float $requestedWidthPt) | Worker-response en gevraagde breedte. | Accepteert binaire PDF-responses en gestructureerde JSON-responses. | CloudflareRenderResult | CloudflareRenderException voor mislukte of ongeldige Worker-uitvoer. | Centrale parser die door de renderer wordt gebruikt. |
CloudflareSecurityPolicy::validate(string $html, int $maxSize) | HTML-invoer en groottelimiet. | Past het HTML-invoerbeleid van het package toe. | void | Validatie-exception. | Houd controles op niet-vertrouwde invoer buiten de Worker-grens. |
CloudflareSecurityPolicy::validateWorkerUrl(string $url) | Worker-URL. | Parseert en valideert de bestemming. | array | Validatie-exception. | Blokkeert onveilige endpointvormen vóór netwerk-I/O. |
CloudflareSecurityPolicy::assertPinsStillValid(string $host, array $pinnedIps) | Host en lijst met gepinde IP’s. | Verifieert de verwachte DNS-pins. | void | Validatie-exception wanneer pins verouderd of ongeldig zijn. | Gebruik tijdens operationele controles voor gepinde deployments. |
API-bescherming
Sectie met titel “API-bescherming”Gebruik deze tabel wanneer u een render-endpoint beschermt: API-sleutelvalidatie, controles op payloadgrootte en rate limits, en de result- en header-objecten die daaruit voortkomen.
| Symbool | Parameters | Standaardgedrag | Retourwaarde | Gooit of faalt met | Opmerkingen |
|---|---|---|---|---|---|
new ApiProtection(ApiProtectionConfig $config, ?ApiKeyValidator $keyValidator = null, ?Closure $clock = null) | Beschermingsconfig, optionele key-validator, optionele clock. | Gebruikt de systeemtijd als er geen clock wordt opgegeven. | ApiProtection | Niet verwacht. | Injecteer een deterministische clock in tests. |
ApiProtection::checkRequest(string $clientId, int $payloadSize, string $apiKey = '') | Client-identifier, payloadgrootte, optionele API-sleutel. | Een lege API-sleutel is alleen toegestaan wanneer de config geen sleutels vereist. | ApiProtectionResult | Niet verwacht. | Controleert de API-sleutel en payloadgrootte en past daarna rate limiting toe. |
ApiProtection::getRateLimit(string $clientId) | Client-identifier. | Registreert geen verzoek. | RateLimitResult | Niet verwacht. | Gebruik om rate-limit-headers toe te voegen. |
new ApiKeyValidator(array $validKeys = []) | Lijst met geldige plaintext-sleutels. | Een lege lijst wijst alle sleutels af. | ApiKeyValidator | Niet verwacht. | Bewaar secrets buiten de code en hydrateer ze via configuratie. |
ApiKeyValidator::validate(string $key) | Ruwe sleutel. | Vergelijkt met geconfigureerde plaintext-sleutels via timing-safe logica. | bool | Niet verwacht. | De parameter is gevoelig; log geen ruwe sleutels. |
ApiKeyValidator::addKey(string $key) | Ruwe sleutel. | Voegt een gehashte sleutel toe en retourneert een nieuwe validator-instantie. | self | Niet verwacht. | Behandel de geretourneerde instantie als de bijgewerkte validator. |
ApiKeyValidator::revokeKey(string $key) | Ruwe sleutel. | Verwijdert de overeenkomende hash en retourneert een nieuwe validator-instantie. | self | Niet verwacht. | Behandel de geretourneerde instantie als de bijgewerkte validator. |
ApiKeyValidator::hashKey(string $key) | Ruwe sleutel. | Produceert de opgeslagen hashrepresentatie. | string | Niet verwacht. | Stel hashes niet bloot in logs of clientresponses. |
ApiKeyValidator::validateHashed(string $key, array $hashedKeys) | Ruwe sleutel en kandidaat-hashes. | Vergelijkt met de aangeleverde hashes in constante tijd. | bool | Niet verwacht. | Low-level-hulpfunctie voor aangepaste sleutelopslag. |
new ApiProtectionConfig(int $maxRequestsPerMinute = 60, int $maxRequestsPerHour = 1000, int $maxPayloadSizeBytes = 10485760, array $allowedOrigins = [], bool $requireApiKey = true, string $apiKeyHeader = 'X-Api-Key', int $rateLimitWindowSeconds = 60) | Verzoeklimieten, payloadlimiet, toegestane origins, API-sleutelvereiste, headernaam, vensterlengte. | 60/minute, 1000/hour, payload van 10 MiB, API-sleutel vereist. | ApiProtectionConfig | Niet verwacht. | Construeer rechtstreeks in tests of hydrateer met fromArray(). |
ApiProtectionConfig::fromArray(array $data) | max_requests_per_minute, max_requests_per_hour, max_payload_size_bytes, allowed_origins, require_api_key, api_key_header, rate_limit_window_seconds. | Ontbrekende sleutels gebruiken de standaardwaarden van de constructor. | ApiProtectionConfig | Niet verwacht. | Gebruik voor het hydrateren van framework-config. |
ApiProtectionConfig::isValid() | geen. | Vereist positieve limieten en coherente grootte- en vensterwaarden. | bool | Niet verwacht. | Valideer voordat u een endpoint blootstelt. |
new ApiProtectionResult(bool $allowed, string $denialReason = '', ?RateLimitResult $rateLimit = null) | Beslissing, weigeringsreden, optioneel rate-limit-resultaat. | Lege weigeringsreden en geen rate-limit-resultaat. | ApiProtectionResult | Niet verwacht. | Geretourneerd door ApiProtection::checkRequest(). |
ApiProtectionResult::toHeaders() | geen. | Retourneert rate-limit-headers wanneer er rate-gegevens bestaan. | array<string, string> | Niet verwacht. | Voeg toe aan Worker- of framework-responses. |
new RateLimitResult(bool $allowed, int $remainingRequests, int $retryAfterSeconds, string $clientId) | Beslissing, resterend aantal, hernieuwingsvertraging, client-identifier (ID). | Geen standaardwaarden. | RateLimitResult | Niet verwacht. | Onveranderlijk resultaat voor één controle. |
RateLimitResult::toHeaders() | geen. | Retourneert headers voor resterende limiet en reset. | array<string, string> | Niet verwacht. | Gebruik voor observability en client-backoff. |
new RateLimitEntry(string $clientId, int $requestCount = 0, int $windowStart = 0, int $hourlyCount = 0, int $hourlyWindowStart = 0) | Client-ID en veranderlijke tellers. | Tellers beginnen bij nul. | RateLimitEntry | Niet verwacht. | In-memory tracking-object. |
RateLimitEntry::increment() | geen. | Verhoogt de in-memory teller voor één client/window. | void | Niet verwacht. | Laag-niveau-hulpfunctie die door ApiProtection wordt gebruikt. |
RateLimitEntry::isExpired(int $windowSeconds) | Vensterlengte in seconden. | Vergelijkt met de huidige tijd. | bool | Niet verwacht. | Runtime-helper voor vervalcontrole. |
RateLimitEntry::isExpiredAt(int $now, int $windowSeconds) | Clock-waarde en vensterlengte. | Vergelijkt met de aangeleverde clock-waarde. | bool | Niet verwacht. | Deterministische testhulpfunctie. |
RateLimitEntry::reset() | geen. | Reset de telling en de starttijd van het venster. | void | Niet verwacht. | Gebruikt wanneer een nieuw venster begint. |
R2-archief
Sectie met titel “R2-archief”Gebruik deze tabel wanneer u gerenderde PDF’s opslaat in Cloudflare R2: de archiefservice, de bijbehorende config- en object-key-typen, en het uploadresultaat dat u inspecteert voordat u een URL blootstelt.
| Symbool | Parameters | Standaardgedrag | Retourwaarde | Gooit of faalt met | Opmerkingen |
|---|---|---|---|---|---|
new R2ArchiveManager(R2ArchiveConfig $config, ClientInterface $httpClient, RequestFactoryInterface $requestFactory, StreamFactoryInterface $streamFactory) | R2-config en PSR-HTTP-factories/client. | Geen netwerkaanroep tijdens de constructie. | R2ArchiveManager | Container-wiringfouten. | Belangrijkste archiefservice. |
R2ArchiveManager::upload(string $pdfData, string $filename, array $metadata = []) | Ruwe PDF-bytes, oorspronkelijke bestandsnaam, metadata als strings. | Lege metadata; op datum gepartitioneerde sleutel. | R2UploadResult | Retourneert een niet-succesvol resultaat bij een fout in config, grootte, HTTP of transport. | Gooit geen exception voor een normale uploadfout. |
R2ArchiveManager::generateSignedUrl(string $key, int $expiresInSeconds = 3600) | Object-sleutel en URL-time to live (TTL). | Ondertekende URL van één uur. | string | Ondertekeningsfouten door een ongeldige config. | Gebruik korte TTL’s voor gevoelige PDF’s. |
R2ArchiveManager::buildObjectKey(string $filename) | Oorspronkelijke bestandsnaam. | Gebruikt het geconfigureerde padprefix en de huidige datum. | R2ObjectKey | Niet verwacht. | Gebruik voor voorspelbare archiefpartitionering. |
R2ArchiveManager::createPutRequest(R2ObjectKey $key, string $data, array $metadata = []) | Object-sleutel, ruwe bytes, metadata. | Ondertekent een PUT-verzoek. | RequestInterface | Fouten bij verzoekconstructie. | Low-level-API voor aangepaste transports. |
new R2ArchiveConfig(string $bucketName, string $accountId, string $accessKeyId, string $secretAccessKey, string $endpoint = '', string $pathPrefix = 'pdfs/', int $maxFileSizeBytes = 104857600) | Bucket, account-ID, credentials, endpoint-override, sleutelprefix, maximale objectgrootte. | Afgeleid endpoint, prefix pdfs/, maximale objectgrootte van 100 MiB. | R2ArchiveConfig | InvalidArgumentException voor ongeldige bucketnamen. | Behandel credentials als config met secrets. |
R2ArchiveConfig::fromArray(array $data) | Account-ID, bucket, credentials, padprefix, endpoint-override, maximale grootte. | Ontbrekende waarden gebruiken de standaardwaarden van de constructor. | R2ArchiveConfig | Ongeldige bucketnaam als die is opgegeven. | Gebruik voor het hydrateren van applicatieconfig. |
R2ArchiveConfig::isValid() | geen. | Vereist een niet-leeg account, bucket, access key en secret key. | bool | Niet verwacht. | Een ongeldige config laat uploads falen met gestructureerde resultaten. |
R2ArchiveConfig::getEndpoint() | geen. | Gebruikt een expliciet endpoint of leidt het Cloudflare R2-endpoint af uit de account-ID. | string | Niet verwacht. | Gebruikt voor het construeren van ondertekende verzoeken. |
new R2ObjectKey(string $key, string $bucket) | Volledige object-sleutel en bucket. | Geen normalisatie. | R2ObjectKey | Niet verwacht. | Doorgaans gemaakt door R2ObjectKey::generate(). |
R2ObjectKey::generate(string $prefix, string $filename, ?DateTimeInterface $date = null) | Prefix, oorspronkelijke bestandsnaam, optionele datum. | Op datum gepartitioneerde, opgeschoonde object-sleutel. | R2ObjectKey | Niet verwacht. | Injecteer een datum in tests voor deterministische sleutels. |
R2ObjectKey::fullPath() | geen. | Voegt het partitiepad en de objectbestandsnaam samen. | string | Niet verwacht. | Bewaar deze waarde als de object-sleutel. |
new R2UploadResult(bool $success, string $key, string $etag = '', int $size = 0, string $error = '') | Succesvlag, object-sleutel, entity tag (ETag), bytegrootte, foutmelding. | Lege ETag, grootte nul, lege fout. | R2UploadResult | Niet verwacht. | Geretourneerd door R2ArchiveManager::upload(). |
R2UploadResult::isValid() | geen. | Geldig wanneer de upload is geslaagd en zowel sleutel als ETag aanwezig zijn. | bool | Niet verwacht. | Controleer voordat u URL’s blootstelt. |
R2UploadResult::publicUrl(string $customDomain = '') | Optioneel aangepast publiek domein. | Retourneert de onbewerkte object-sleutel wanneer geen aangepast domein wordt opgegeven. | string | Niet verwacht. | Vermijd publieke URL’s voor gevoelige documenten, tenzij het beleid dit toestaat. |
Transporthulpprogramma’s
Sectie met titel “Transporthulpprogramma’s”Gebruik deze tabel alleen voor low-level-wiring: pinning van Internet Protocol (IP) en SubjectPublicKeyInfo (SPKI) op cURL-niveau, plus de local-renderer-contracten die als fallbackpad worden gebruikt wanneer de Worker onbereikbaar is.
| Symbool | Parameters | Standaardgedrag | Retourwaarde | Gooit of faalt met | Opmerkingen |
|---|---|---|---|---|---|
new PinnedCurlTransport(ResponseFactoryInterface $responseFactory, StreamFactoryInterface $streamFactory, array $pinnedIps = [], array $pinnedPublicKeys = [], int $timeoutSeconds = 30) | PSR-17-factories, gepinde IP’s, gepinde publieke sleutels, time-out. | Geen pins en een time-out van 30 seconden. | PinnedCurlTransport | Niet verwacht. | Gebruik alleen wanneer pinning op cURL-niveau nodig is. |
PinnedCurlTransport::sendRequest(RequestInterface $request) | PSR-7-verzoek. | Verzendt via cURL met de geconfigureerde time-out en pinning-controles. | ResponseInterface | PSR-18-transport-exceptions. | Gebruik alleen wanneer framework-HTTP-clients hetzelfde pinningbeleid niet kunnen afdwingen. |
PinnedCurlTransport::buildCurlOptions(RequestInterface $request, string $host, int $port) | Verzoek, doelhost, doelpoort. | Bouwt de cURL-optiearray die door sendRequest() wordt gebruikt. | array | Ongeldig verzoek of fouten in de pinconfiguratie. | Low-level-test- en diagnosehook. |
LocalRendererInterface::render(string $html, array $options = []) | HTML en renderer-opties. | Alleen een contract; de implementatie stelt de standaardwaarden in. | string | Implementatiespecifieke renderfouten. | Gebruikt als lokale fallback wanneer Worker-rendering niet beschikbaar is. |
LocalRendererFactoryInterface::create() | geen. | Maakt een lokale renderer-implementatie. | LocalRendererInterface | Factory- of dependency-fouten. | Houdt de constructie van de fallback-renderer buiten CloudflareHtmlRenderer. |
Ontwikkelnotities
Sectie met titel “Ontwikkelnotities”- Behandel de Worker-URL als een netwerkgrens. Valideer bestemming, grootte en authenticatie vóór het renderen.
- Gebruik API-beschermingsresultaten als beleidsuitvoer, niet om besturingsstroom via exceptions te sturen.
- R2-uploads retourneren gestructureerde succes- of foutresultaten; handel beide paden af.