Enterprise รุ่น
Billing — เอกสารอ้างอิงเชิงลึก
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”หน้านี้เป็นเอกสารอ้างอิงเชิงลึกสำหรับพื้นผิว billing ของ NextPDF Enterprise พื้นผิวนี้มีสองชั้น โมเดล billing ใน NextPDF\Enterprise\Billing กำหนดระดับชั้นของแผน โควตา นโยบาย overage และการแจ้งเตือนการใช้งานที่ผ่านการ deduplication ซับสเตรตการบังคับใช้ใน NextPDF\Enterprise\Billing\Substrate วางโมเดลนั้นไว้บนเส้นทางคำขอจริง แบบ fail-closed และปลอดภัยต่อการทำงานพร้อมกัน จุดเข้าใช้งานคือ PlanRegistry QuotaManager OverageCalculator BillingAlertService และ QuotaEnforcementGuard สำหรับคู่มือระดับเวิร์กโฟลว์ ดูหน้าความสามารถ Billing
ความพร้อมใช้งานและการออกใบอนุญาต
หัวข้อที่มีชื่อว่า “ความพร้อมใช้งานและการออกใบอนุญาต”ความสามารถนี้จัดส่งใน NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งานด้วยซองใบอนุญาตระดับ Enterprise การปรับใช้ที่ไม่มีสิทธิ์ดังกล่าวจะไม่โหลดคลาสของความสามารถนี้ เปรียบเทียบรุ่นและรับใบอนุญาต
Billing เป็นความสามารถพื้นฐานของ Enterprise ที่ไม่มีแฟล็กต่อฟีเจอร์แยกต่างหาก พร้อมใช้งานเมื่อติดตั้งแพ็กเกจ Enterprise ข้าง ๆ แพ็กเกจ Core แล้ว NextPDF Core (Apache-2.0) และ NextPDF Pro ไม่มีโมเดลแผน โควตา หรือ overage พื้นผิวนี้ไม่มีสิ่งเทียบเท่าในระดับที่ต่ำกว่า สิ่งที่รวมอยู่ในแผน โควตา และข้อกำหนดเชิงพาณิชย์อยู่ภายใต้ข้อตกลงใบอนุญาต ไม่ใช่การบังคับใช้ในขณะรันไทม์ เอกสารอ้างอิงนี้ไม่ใช่ความเห็นทางกฎหมายหรือทางสัญญา
พื้นผิว API สาธารณะ
หัวข้อที่มีชื่อว่า “พื้นผิว API สาธารณะ”สัญลักษณ์ทั้งหมดอยู่ภายใต้ NextPDF\Enterprise\Billing แถวที่ทำเครื่องหมาย substrate อยู่ภายใต้ NextPDF\Enterprise\Billing\Substrate TenantContext เป็นชนิด tenant ที่ผ่านการตรวจสอบสิทธิ์จาก NextPDF\Enterprise\SaaS
| สัญลักษณ์ | พารามิเตอร์ | พฤติกรรมเริ่มต้น | คืนค่า | โยนหรือล้มเหลวด้วย | หมายเหตุ |
|---|---|---|---|---|---|
SaaSPlan (enum) | — | ระดับชั้นแผนที่ backed ด้วยสตริง คือ standard, advanced, high_control | — | ไม่โยน | label() คืนชื่อสำหรับแสดงผล |
PlanDefinition::__construct | SaaSPlan $plan, float $includedCuQuota, list<CapabilityCode> $capabilities, non-empty-string $priceTier, bool $intelligencePackIncluded, bool $privacyPackIncluded | ออบเจ็กต์ค่าแผนที่ไม่เปลี่ยนแปลง เก็บอินพุตตามที่ให้มา | อินสแตนซ์ใหม่ | ไม่โยน | final readonly พร็อพเพอร์ตี้สาธารณะแบบ promoted |
PlanDefinition::includesCapability | CapabilityCode $capability | ตรวจสอบการเป็นสมาชิกด้วยเอกลักษณ์แบบเคร่งครัด | bool | ไม่โยน | — |
PlanRegistry::__construct | list<PlanDefinition> $definitions | จัดทำดัชนีคำนิยามตามระดับชั้น คำนิยามสุดท้ายต่อระดับชั้นเป็นผู้ชนะ | รีจิสทรีใหม่ | ไม่โยน | สำหรับการทดสอบและชุดแผนแบบ white-label |
PlanRegistry::get | SaaSPlan $plan | การ lookup แผนเชิงบัญญัติ | PlanDefinition | InvalidArgumentException เมื่อแผนไม่ได้ลงทะเบียน | — |
PlanRegistry::has | SaaSPlan $plan | การตรวจสอบการลงทะเบียน | bool | ไม่โยน | — |
PlanRegistry::defaultRegistry (static) | — | ค่าเริ่มต้นสำหรับการใช้งานจริง คือ Standard 1,000 CU; Advanced 5,000 CU บวก Intelligence Pack; High Control 20,000 CU บวก Intelligence และ Privacy Packs | PlanRegistry | ไม่โยน | ใช้ตัวนี้เว้นแต่ข้อกำหนดตามสัญญาจะกำหนดคำนิยามกำหนดเอง |
OveragePolicy (enum) | — | hard_stop, soft_stop, budget_alert | — | ไม่โยน | httpStatusCode() แมป 402 / 429 / 200; isBlocking() เป็นจริงเฉพาะ hard และ soft stop เท่านั้น |
QuotaManager::__construct | PlanRegistry $planRegistry, OveragePolicy $overagePolicy | ผูกรีจิสทรีเข้ากับหนึ่งนโยบาย | อินสแตนซ์ใหม่ | ไม่โยน | — |
QuotaManager::checkQuota | TenantContext $tenant, SaaSPlan $plan, float $currentCu | คืนค่าเงียบ ๆ เมื่ออยู่ที่หรือต่ำกว่าโควตา หรือภายใต้นโยบายที่ไม่บล็อก | void | QuotaExceededException เมื่อ overage แบบเคร่งครัดภายใต้นโยบายแบบบล็อก; InvalidArgumentException จากรีจิสทรีเมื่อแผนไม่ได้ลงทะเบียน | resetsAt = วันแรกของเดือนถัดไป เที่ยงคืน UTC |
QuotaManager::remainingQuota | SaaSPlan $plan, float $currentCu | การอ่านล้วน ไม่เคยบล็อก | float | InvalidArgumentException ของรีจิสทรี | เป็นลบเมื่อ overage |
QuotaManager::usagePercentage | SaaSPlan $plan, float $currentCu | การอ่านล้วน ไม่เคยบล็อก | float | InvalidArgumentException ของรีจิสทรี | 0.0 เมื่อโควตาที่รวมอยู่ไม่เป็นบวก; สูงกว่า 1.0 เมื่อ overage |
OverageCalculator::calculate | PlanDefinition $plan, float $currentCu | คำนวณสแนปช็อต overage ที่ไม่เปลี่ยนแปลง | OverageResult | ไม่โยน | final readonly ไร้สถานะ |
OverageResult | includedCu, usedCu, overageCu, usageRatio, isOverage | ผลการคำนวณที่ไม่เปลี่ยนแปลง | — | ไม่โยน | overageCu = max(0, used - included); isOverage ต้องการ overage แบบเคร่งครัด |
BillingAlertType (enum) | — | quota_warning_80, quota_warning_100, budget_exceeded, monthly_cap_reached | — | ไม่โยน | threshold() 0.8 / 1.0 / 1.0 / 1.0; severity() warning / critical / critical / critical |
BillingAlertService::__construct | AlertStateRepositoryInterface $alertState | ผูกกับที่จัดเก็บสำหรับการ deduplication | อินสแตนซ์ใหม่ | ไม่โยน | — |
BillingAlertService::evaluate | TenantContext $tenant, SaaSPlan $plan, PlanDefinition $planDef, float $currentCu | ทำงานการแจ้งเตือนที่ยังไม่ได้ทำงานตามลำดับเกณฑ์จากน้อยไปมากและบันทึกไว้ | list<BillingAlertType> | InvalidArgumentException เมื่อแผน/คำนิยามไม่ตรงกัน | คีย์ dedup คือ tenant ชนิด และรอบ YYYY-MM แบบ UTC |
BillingAlertService::clearAlerts | TenantContext $tenant | ล้างสถานะที่ทำงานแล้วของ tenant สำหรับรอบ UTC ปัจจุบัน | void | ความล้มเหลวที่ repository กำหนดจะถูกส่งต่อ | ติดตั้งการแจ้งเตือนใหม่ภายในรอบเดียวกัน |
AlertStateRepositoryInterface | hasAlertFired(), markAlertFired(), clearForPeriod() | สัญญาการคงอยู่สำหรับการ deduplication การแจ้งเตือนแบบคงทน | ตามแต่ละเมธอด | กำหนดโดยการนำไปใช้ | ผู้ดำเนินการเป็นเจ้าของความคงทนข้าม replica |
InMemoryAlertStateRepository | — | สถานะที่ทำงานแล้วที่ backed ด้วยอาร์เรย์ | ตามอินเทอร์เฟซ | ไม่โยน | สำหรับวงจรชีวิตคำขอเดียวและการทดสอบเท่านั้น |
QuotaExceededException | Readonly currentCu, limitCu, resetsAt, tenantId, isSaaS | การปฏิเสธโควตาที่รับรู้โหมดการปรับใช้ | — | เป็นตัว throwable | httpStatusCode() 402 SaaS / 403 on-prem; specCode() SPEC-BILLING-003 / SPEC-LIC-001; toErrorEnvelope() ให้เนื้อความ error แบบมีโครงสร้าง |
DeploymentMode (enum) | — | saas, self_hosted_oss, local_development | — | ไม่โยน | Substrate. enforcesQuota() เป็นจริงเฉพาะ Saas เท่านั้น การ opt-out ชัดเจนเสมอ |
QuotaEnforcementGuard::__construct | DeploymentMode, PlanResolverInterface, QuotaManager, UsageCounterStoreInterface | ประกอบเกตโควตาจริง | อินสแตนซ์ใหม่ | ไม่โยน | Substrate. final readonly |
QuotaEnforcementGuard::enforce | ?TenantContext $tenant, non-empty-string $featureKey, float $amount = 1.0 | เกตโควตาแบบ fail-closed พร้อมการจองแบบ atomic | QuotaDecision (เฉพาะผลลัพธ์ที่อนุญาตเท่านั้น) | ดู taxonomy การปฏิเสธด้านล่าง | Substrate. ติดตั้งหลังการตรวจสอบสิทธิ์ tenant ก่อน handler ที่เรียกเก็บเงินได้ |
PlanResolverInterface::resolve | TenantContext $tenant | แปลง tenant ไปยังแผนและนโยบายต่อฟีเจอร์ของมัน | ResolvedPlan | NoPlanForTenantException | Substrate. การถอยกลับไปใช้แผนเริ่มต้นสำหรับ tenant ที่ไม่รู้จักเป็นข้อบกพร่อง |
RegistryPlanResolver | array<non-empty-string, ResolvedPlan> $plansByTenant | ตัว resolver ที่ backed ด้วยแมป | ResolvedPlan | NoPlanForTenantException สำหรับ tenant ที่ไม่ได้แมป | Substrate. fail-closed โดยการออกแบบ |
ResolvedPlan::policyFor | non-empty-string $featureKey | การ lookup นโยบายบนแผนที่แปลงแล้ว | ?QuotaPolicy | ไม่โยน | Substrate. null หมายถึงฟีเจอร์ที่ไม่รู้จัก guard จะปฏิเสธ |
QuotaPolicy | non-empty-string $featureKey, float $limit, OveragePolicy $overagePolicy | ขีดจำกัดต่อฟีเจอร์และนโยบายเมื่อเกิน | — | ไม่โยน | Substrate. UNLIMITED = -1.0; ขีดจำกัด 0.0 คือไม่อนุญาตเลย ไม่ใช่ไม่จำกัด; isUnlimited(), isBlocking() |
QuotaDecision | สแตติก bypassed(), unlimited(), consumed() | ออบเจ็กต์ค่าผลลัพธ์ที่อนุญาต | QuotaDecision | ไม่โยน | Substrate. isAllowed() เป็นจริงเสมอ ทุกการปฏิเสธจะโยนแทน |
UsageCounter | สแนปช็อตแถว คือ tenant ฟีเจอร์ ขอบเขตรอบ used, limit, updatedAt | แถวการใช้งานที่ไม่เปลี่ยนแปลง | — | ไม่โยน | Substrate. remaining() อาจเป็นลบ; wouldExceed() เป็นแบบเคร่งครัด |
UsageCounterStoreInterface::get | Tenant ฟีเจอร์ ขอบเขตรอบ float $limit | อ่านแถวการใช้งาน สร้างด้วย used = 0 เมื่อไม่มี | UsageCounter | UsageStoreUnavailableException | Substrate. ไม่เคยคืนค่า falsy เมื่อ backend ล้มเหลว |
UsageCounterStoreInterface::tryConsume | Tenant ฟีเจอร์ ขอบเขตรอบ float $amount, float $limit | การจองแบบ compare-and-set atomic ภายในขีดจำกัด | ?UsageCounter (null เมื่อการจองจะเกินขีดจำกัด) | UsageStoreUnavailableException | Substrate. ต้องเป็นการดำเนินการ atomic เดี่ยวต่อที่จัดเก็บเบื้องหลัง |
InMemoryUsageCounterStore | — | การนำสัญญาที่จัดเก็บไปใช้แบบอ้างอิงในกระบวนการ | ตามอินเทอร์เฟซ | ตามอินเทอร์เฟซ | Substrate. กระบวนการเดียวเท่านั้น บันทึกค่าคงที่ด้านความ atomic |
QuotaEnforcementException (abstract) | — | ชนิดฐานของทุกการปฏิเสธในซับสเตรต | — | เป็นตระกูล throwable | Substrate. แต่ละชนิดย่อยประกาศ httpStatusCode() |
public function checkQuota(TenantContext $tenant, SaaSPlan $plan, float $currentCu): voidpublic function evaluate( TenantContext $tenant, SaaSPlan $plan, PlanDefinition $planDef, float $currentCu,): arraypublic function enforce(?TenantContext $tenant, string $featureKey, float $amount = 1.0): QuotaDecisionpublic function tryConsume( string $tenantId, string $featureKey, DateTimeImmutable $periodStart, DateTimeImmutable $periodEnd, float $amount, float $limit,): ?UsageCounter;Taxonomy การปฏิเสธของ QuotaEnforcementGuard::enforce
| Exception | สถานะ HTTP | ยกขึ้นเมื่อ |
|---|---|---|
MissingTenantContextException | 401 | โหมด SaaS ที่ไม่มีบริบท tenant ที่ผ่านการตรวจสอบสิทธิ์ |
NoPlanForTenantException | 402 | ตัว resolver ไม่พบแผนที่กำหนดให้ tenant |
UnknownFeatureException | 402 | แผนที่แปลงแล้วไม่ได้กำหนดนโยบายสำหรับคีย์ฟีเจอร์ |
UsageStoreUnavailableException | 503 | ไม่สามารถอ่านหรืออัปเดตที่จัดเก็บการใช้งานแบบ atomic ได้; ยกขึ้นด้วยเมื่อ $amount ไม่เป็นบวก |
QuotaExceededException | 402 (SaaS) / 403 (on-prem) | โควตาของนโยบายแบบบล็อกถูกใช้เกิน หรือการจองพร้อมกันใช้พื้นที่ว่างสุดท้ายไปแล้ว |
สัญญาด้านพฤติกรรม
หัวข้อที่มีชื่อว่า “สัญญาด้านพฤติกรรม”- รีจิสทรีเริ่มต้นจัดส่งสามระดับชั้น (Standard / Advanced / High Control) ด้วยโควตา CU และชุดความสามารถที่เพิ่มขึ้น คำขอแผนที่ไม่ได้ลงทะเบียนจะล้มเหลวด้วย
InvalidArgumentExceptionที่ชัดเจน QuotaManager::checkQuota()ยกขึ้นเฉพาะเมื่อทั้งสองเงื่อนไขเป็นจริง คือ นโยบายเป็นแบบบล็อกและการใช้งานปัจจุบันสูงกว่าโควตาที่รวมอยู่อย่างเคร่งครัด นโยบาย budget-alert ไม่เคยยกขึ้น overage ถูกส่งสัญญาณผ่านการแจ้งเตือนremainingQuota()และusagePercentage()เป็นการอ่านล้วนและไม่เคยบล็อก โควตาที่เหลือเป็นลบเมื่อ overage เปอร์เซ็นต์การใช้งานเกิน1.0เมื่อ overage- การแจ้งเตือนประเมินตามลำดับเกณฑ์จากน้อยไปมาก คือ คำเตือน 80% คำเตือน 100% (critical) จากนั้น budget-exceeded (critical) budget-exceeded ถูกเกตที่ overage แบบเคร่งครัด การใช้งานที่พอดี 100% จะทำให้คำเตือน 100% ทำงาน ไม่ใช่ budget-exceeded
- การแจ้งเตือนแต่ละชนิดทำงานได้มากที่สุดหนึ่งครั้งต่อ tenant ต่อรอบการเรียกเก็บเงิน สถานะที่ทำงานแล้วถูกบันทึกผ่าน
AlertStateRepositoryInterfaceดังนั้นการ deduplication จึงคงทนเท่ากับการนำไปใช้ที่เลือก - คีย์การ deduplication ฝังรอบ
YYYY-MMแบบ UTC เดือนปฏิทินใหม่จึงติดตั้งการแจ้งเตือนทุกชนิดใหม่โดยอัตโนมัติ ไม่ต้องเรียก clear สำหรับการติดตั้งใหม่เมื่อ rolloverclearAlerts()ล้างรอบปัจจุบัน ซึ่งติดตั้งการแจ้งเตือนใหม่กลางรอบ เช่น หลังการอัปเกรดแผน - ตัวป้องกัน plan-mismatch ใน
evaluate()ปฏิเสธการเรียกที่แผนที่จัดหามาและคำนิยามแผนไม่ตรงกัน ป้องกันคำนิยามจากระดับชั้นอื่นที่ไม่ใช่แผนของ tenant - การคำนวณรอบทั้งหมดยึดกับ UTC เวลารีเซ็ต quota-exceeded คือวันแรกของเดือนปฏิทินถัดไปเที่ยงคืน UTC การตอบสนอง soft-stop ควรโฆษณาเป็นขอบเขตการลองใหม่
QuotaEnforcementGuardเป็น fail-closed ในโหมด SaaS tenant ที่ขาดหาย แผนที่ขาดหาย ฟีเจอร์ที่ไม่รู้จัก การขัดข้องของที่จัดเก็บ และการเกินโควตา ทั้งหมดจะปฏิเสธ ไม่มีสิ่งใดตกไปสู่การอนุญาตโดยปริยาย การปรับใช้ที่ไม่ใช่ SaaS จะ opt out ได้เฉพาะโดยการสร้าง guard ด้วยDeploymentModeที่ไม่ใช่ SaaS- นโยบายแบบบล็อกจองการใช้งานผ่าน
UsageCounterStoreInterface::tryConsumeซึ่งเป็น compare-and-set แบบ atomic คำขอพร้อมกันไม่สามารถผลักดันการใช้งานเกินขีดจำกัดร่วมกันได้ ผู้แพ้ในการแข่งขันจะได้รับQuotaExceededExceptionแม้ว่าการตรวจสอบก่อนหน้าจะผ่านแล้ว - ภายใต้นโยบาย budget-alert guard จะบันทึกการบริโภคแบบ best-effort และไม่เคยปฏิเสธ การจองที่เกินเพดานแบบนุ่มยังคงบันทึกแถวที่ขีดจำกัด
QuotaExceededExceptionรับรู้โหมดการปรับใช้ คือ การปฏิเสธ SaaS แมปไปยัง HTTP 402 ด้วยรหัส specSPEC-BILLING-003และถูกทำเครื่องหมายว่าลองใหม่ได้; การปฏิเสธ on-prem แมปไปยัง HTTP 403 ด้วยSPEC-LIC-001- ไลบรารีไม่ปล่อยการตอบสนอง HTTP เอง โค้ดสถานะที่ประกาศเป็นสัญญาสำหรับชั้น edge ซึ่งแมปการปฏิเสธที่ถูกโยนไปยังการตอบสนอง และต้องไม่เรียก handler ที่เรียกเก็บเงินได้
กรณีขอบและโหมดความล้มเหลว
หัวข้อที่มีชื่อว่า “กรณีขอบและโหมดความล้มเหลว”- โควตาที่รวมอยู่ซึ่งไม่เป็นบวก
usagePercentage(),evaluate()และOverageCalculator::calculate()ทั้งหมดให้อัตราส่วนการใช้งาน0.0แทนการหารด้วยศูนย์ การแจ้งเตือนตามเกณฑ์จึงไม่เคยทำงานจากอัตราส่วนเพียงอย่างเดียว - Budget-alert บวก overage ขนาดใหญ่ ทั้งตัวจัดการและ guard คืนผลลัพธ์ที่อนุญาต อย่าปฏิบัติต่อการไม่มี exception ว่าเป็นข้อพิสูจน์ว่าอยู่ภายในโควตา ให้ปรึกษา
OverageResultหรือสตรีมการแจ้งเตือน - พอดีที่ขีดจำกัด
checkQuota()ที่currentCu == includedCuQuotaจะผ่านBudgetExceededต้องการ overage แบบเคร่งครัดUsageCounter::wouldExceed()เป็นแบบเคร่งครัดเช่นกัน MonthlyCapReachedenum ประกาศการแจ้งเตือนชนิดที่สี่นี้ แต่BillingAlertService::evaluate()ไม่เคยปล่อยมัน รายการผู้สมัครของมันครอบคลุมเฉพาะการแจ้งเตือนตามเกณฑ์สามชนิดเท่านั้น มันถูกสงวนไว้สำหรับตัวปล่อยที่ติดตาม cap นอกโมดูลนี้- คำนิยามระดับชั้นซ้ำ
PlanRegistryจัดทำดัชนีตามค่าระดับชั้น คำนิยามสุดท้ายสำหรับระดับชั้นจะแทนที่คำนิยามก่อนหน้าอย่างเงียบ ๆ สร้างรีจิสทรีจากรายการที่ deduplicate แล้ว - ไม่อนุญาตเลยเทียบกับไม่จำกัด ขีดจำกัด
QuotaPolicyที่0.0หมายถึงทุกการบริโภคในรอบเป็น overage มีเพียง sentinelUNLIMITEDที่เป็นลบเท่านั้นที่ปิดการวัดisUnlimited()ไม่เคยบล็อก - จำนวนการจองที่ไม่เป็นบวก
enforce()ปฏิเสธ$amountที่ไม่เป็นบวกแบบ fail-closed ด้วยUsageStoreUnavailableException(503) นี่เป็นข้อบกพร่องของผู้เรียก ไม่ใช่การขัดข้องของที่จัดเก็บ - การขัดข้องของที่จัดเก็บ ความล้มเหลวในการอ่านหรือจองใด ๆ จะปรากฏเป็น
UsageStoreUnavailableExceptionและปฏิเสธ guard ไม่เคยอนุญาตงานที่ไม่ได้วัดขณะที่ตัววัดขัดข้อง - การนำไปใช้แบบ in-memory
InMemoryAlertStateRepositoryและInMemoryUsageCounterStoreถูกต้องภายในกระบวนการ PHP เดียวเท่านั้น การปรับใช้แบบหลาย replica ต้องจัดหาการนำไปใช้ที่ backed ด้วย datastore ที่มีความ atomic จริง ที่จัดเก็บแบบ read-then-write เป็นข้อบกพร่องที่ยอมให้เกินโควตาภายใต้โหลด - โหมด FIPS Billing ไม่ทำการดำเนินการทางการเข้ารหัสของตนเองและไม่มีพฤติกรรมเฉพาะของ FIPS อัตลักษณ์ของ tenant ที่มันใช้ต้องมาจากบริบทที่ผ่านการตรวจสอบสิทธิ์ซึ่งท่าที FIPS ของมันถูกบันทึกไว้กับพื้นผิว SaaS
ความสอดคล้อง
หัวข้อที่มีชื่อว่า “ความสอดคล้อง”| ข้ออ้าง | มาตรฐาน | ข้อ |
|---|---|---|
| โค้ดสถานะ 402 ถูกสงวนไว้สำหรับการใช้งานในอนาคต มันไม่มีความหมายเชิงคำขอตามบรรทัดฐานของตนเอง | RFC 9110 | §15.5.3 |
| 429 บ่งชี้ว่าไคลเอนต์ได้ส่งคำขอมากเกินไปในช่วงเวลาที่กำหนด (“rate limiting”) | RFC 6585 | §4 |
| Retry-After บ่งชี้ว่า user agent ควรรอนานเท่าใดก่อนที่จะทำคำขอติดตามผล | RFC 9110 | §10.2.3 |
ทุกข้อถูกถอดความ NextPDF ไม่ได้ทำซ้ำข้อความตามบรรทัดฐาน NextPDF ไม่ได้อ้างความสอดคล้องหรือการรับรองโปรโตคอล HTTP สำหรับพื้นผิวนี้ การแมป 402 / 429 / 200 ที่ประกาศโดย OveragePolicy::httpStatusCode() และโค้ดการปฏิเสธ 401 / 402 / 503 ของ guard เป็นแบบแผนของผลิตภัณฑ์ที่สอดคล้องกับข้อข้างต้น คือ RFC 9110 สงวน 402 ไว้ ดังนั้นการใช้เพื่อปฏิเสธการชำระเงินที่นี่เป็นแบบแผนทั่วไปของอุตสาหกรรม ไม่ใช่ความหมายที่ IETF กำหนด ขอบเขตการลองใหม่แบบ soft-stop (resetsAt) เป็นค่าที่ชั้น edge ควรแสดงเป็นคำแนะนำ Retry-After การปล่อยการตอบสนอง HTTP หัวข้อ และพฤติกรรมการแคชจริงเป็นความรับผิดชอบของแอปพลิเคชันที่โฮสต์
บันทึกการพัฒนา
หัวข้อที่มีชื่อว่า “บันทึกการพัฒนา”- ประกอบโมเดลจาก
PlanRegistry::defaultRegistry()หนึ่งOveragePolicyและQuotaManagerเพิ่มBillingAlertServiceด้วยการนำAlertStateRepositoryInterfaceแบบคงทนไปใช้สำหรับการแจ้งเตือน - ติดตั้ง
QuotaEnforcementGuardในไปป์ไลน์คำขอหลังการตรวจสอบสิทธิ์ tenant และก่อน handler ที่เรียกเก็บเงินได้ จับQuotaEnforcementExceptionและQuotaExceededExceptionของ billing ที่ edge และแมปhttpStatusCode()ไปยังการตอบสนอง - คำนิยามแผนในโมดูลนี้เป็นแหล่งความจริงเพียงแหล่งเดียวสำหรับ billing อย่าดูแลคำนิยาม billing คู่ขนานที่อื่นในการปรับใช้ของคุณ
- การนำไปใช้แบบ in-memory ทำให้พื้นผิวทั้งหมดทดสอบหน่วยได้โดยไม่ต้องมี I/O การทดสอบขอบเขตที่แนะนำ คือ การใช้งานพอดีที่โควตา หนึ่งหน่วยเหนือกว่า เกณฑ์อัตราส่วนที่ 0.8 และ 1.0 ตัวป้องกัน plan-mismatch การแข่งขัน CAS (การจองสองครั้งต่อพื้นที่ว่างหน่วยสุดท้าย) และการปฏิเสธเมื่อที่จัดเก็บขัดข้อง
- คลาสโมเดลหลักพก
@since 2.2.0; ซับสเตรตพก@since 2.3.0สายแพ็กเกจปัจจุบันคือ 3.1.0 - ผู้ดำเนินการเป็นเจ้าของการนำ repository สถานะการแจ้งเตือนและที่จัดเก็บการใช้งานไปใช้ ความคงทนของมันข้าม replica และการติดตั้งการแจ้งเตือนใหม่กลางรอบผ่าน
clearAlerts()
ขอบเขตการเผยแพร่
หัวข้อที่มีชื่อว่า “ขอบเขตการเผยแพร่”หน้านี้บันทึกเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว API สาธารณะที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และคำนำหน้า ticket อยู่นอกขอบเขต