لاراول ۱۳.۱۴؛ دیسریالایز کردن JSON Schema
خلاصهٔ کاملتر
تو این مقاله از Laravel News اومده که تیم لاراول نسخهٔ v13.14.0 رو (تاریخ ۰۴/۰۶/۲۰۲۶) منتشر کرده که یه دیسریالایزر تازه برای کتابخونهٔ JSON Schema، چند اصلاح تو نحوهٔ ارثبری اتریبیوتهای جابِ صف، دیدِ بیشتر روی جابهای در انتظار، و یه دور اصلاحِ کلاینت HTTP و میل داره.
مهمترین تغییر، اضافهشدن متد JsonSchema::fromArray() هست که یه آرایهٔ خام JSON Schema رو دوباره به آبجکت Type تبدیل میکنه. تا الان کتابخونه فقط یه مسیر داشت: میتونستی آبجکت Type بسازی و به آرایه سریالایز کنی. حالا Deserializer تازه دقیقاً قرینهٔ Serializer موجوده، پس یه اسکیمایی که از روی شبکه میگیری رو میشه دوباره به آبجکتهایی که بقیهٔ API انتظار دارن برگردوند:
$type = JsonSchema::fromArray([
'type' => 'object',
'properties' => [
'name' => ['type' => 'string', 'minLength' => 1],
'age' => ['type' => 'integer', 'minimum' => 0],
],
'required' => ['name'],
]);
// Returns an ObjectTypeاین دو عملیات رفتوبرگشتیان؛ یعنی اگه JsonSchema::fromArray() رو روی یه تایپِ سریالایزشده اجرا کنی، یه تایپِ معادل بهت میده.
یه اصلاح مهم دیگه مربوط به سیستم صفه. قبلاً وقتی یه کلاس والد یه اتریبیوت صف مثل #[Timeout(40)] تعریف میکرد، کلاس فرزند نمیتونست با تعریف دوبارهٔ همون پراپرتی با مقدار متفاوت اون رو بازنویسی کنه. این اصلاح یه اولویت روشن میذاره: اتریبیوتهای همکلاس هنوز روی پراپرتیهای پیشفرضِ همکلاس برتری دارن، پراپرتیهایی که در زمان اجرا تغییر کردن اولویتشون حفظ میشه، و حالا پراپرتیهای کلاس فرزند روی اتریبیوتهای صفِ ارثبرده از والد اولویت پیدا میکنن.
چند تغییر کوچیکتر هم هست: به کلاس InspectedJob یه پراپرتی queue اضافه شده تا موقع بررسی جابهای در انتظار ببینی هر جاب به کدوم صف اساین شده (هم برای درایور دیتابیس هم Redis). یه باگ هم درست شده که مقادیر falsy معتبر مثل false، 0 یا null تو پاسخهای کلاینت HTTP کش نمیشدن؛ راهحل اینه که با یه فلگ بولینِ جدا ردگیری میکنه که آیا اصلاً دیکُد انجام شده یا نه، تا یه مقدار falsy با «هنوز دیکُد نشده» اشتباه گرفته نشه. در کنارش چند اصلاح تو Message::embed، هندلکردن هدرهای null و سازگاری با Symfony 8.1 هم اومده.
نکات کلیدی:
- متد تازهٔ JsonSchema::fromArray() یه آرایهٔ JSON Schema رو به آبجکت Type برمیگردونه و قرینهٔ سریالایزره.
- این دو عملیات رفتوبرگشتیان و خروجی معادل میدن.
- حالا پراپرتی کلاس فرزند روی اتریبیوت صفِ ارثبرده از والد اولویت داره.
- پراپرتی queue به InspectedJob اضافه شد تا صفِ هر جاب در انتظار رو ببینی.
- باگ کشنشدن مقادیر falsy (مثل false و 0 و null) تو پاسخهای HTTP درست شد.




