محتويات الدورة

Laravel / حدود التطبيق وسير العمل الموثوق / الدرس 11

موارد API والترقيم المحدود

حدد مخطط رد مقصودا واختر الترقيم بحسب الترتيب والعدد والحداثة والكلفة.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • المورد عقد رد
  • تمثيل منشور صغير
  • اختيار الإزاحة أو المؤشر بصدق

المورد عقد رد

يمثل النموذج البيانات والحفظ ويحدد المورد ما يوصله المسار. قد يسرب إرجاع السمات كلها حقلا جديدا؛ حدد الحقول والنوع والفراغ والعلاقات والبيانات الوصفية. يفيد hidden ولا يعوض التفويض. حدد السجلات المرئية قبل التحويل. تعرض العينة المنشور واسم المؤلف العام لا البريد والملاحظات الخاصة.

إبقاء التحميل خارج التسلسل

قد ينفذ المورد استعلاما لكل عنصر بقراءة غير المحمل. تدرج whenLoaded ما حمله التطبيق فقط ولا تجلبه أو تفوضه. قرر التحميل خارجها وميز المحذوف من null المحملة. مرر الاسم لا القيمة المحسوبة لتجنب التحميل نفسه. اختبر عدة سجلات لكشف N+1.

تمثيل منشور صغير

يفترض المورد المخطط وعقد النشر المنطقي ويخرج المعرف والعنوان والنشر والمؤلف المحمل فقط. لا تقرأ الدالة العلاقة بلا شرط. اختبر المؤلف المفقود إن سمح المخطط؛ تعالجه دلالة المساعد. يحمل المتحكم الاسم والمعرف ويحفظ المفاتيح. الصنف ضمن دورة التطبيق لا برنامج مستقل أو رد HTTP منفذ.

php مقطع سياقي لتطبيق Laravel 12
<?php
namespace App\Http\Resources;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
    public function toArray(Request $request): array
    {
        return [
            "id" => $this->id,
            "title" => $this->title,
            "published" => (bool) $this->published,
            "author" => $this->whenLoaded("author", fn () => [
                "id" => $this->author->getKey(),
                "name" => $this->author->name,
            ]),
        ];
    }
}
الناتج المتوقع
Loaded author Mira: id/title/published plus author id/name. Unloaded author: author key omitted.

يوفر التطبيق Post ويفحص المساعد تحميله دون جلب، ويستبعد البريد والجسم عمدا.

حد حجم الصفحة والترتيب الحتمي

يتحقق المتحكم من الحجم بين واحد وخمسين ويقيد النشر ويرتب بمعرف فريد ويعيد مجموعة. يضم الترقيم الافتراضي data وlinks وmeta حتى مع تعطيل التغليف العادي، وقد يغير تخصيص صريح العقد. بصفين منشورين 1 و3 ومسودة يعطي الحجم واحدا ومجموع اثنين. لا تنسخ كل مدخل في الروابط بل الحجم المعتمد.

php مقطع سياقي لتطبيق Laravel 12
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use App\Http\Resources\PostResource;
use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;
class PublicPostIndexController extends Controller
{
    public function index(Request $request): AnonymousResourceCollection
    {
        $input = $request->validate(["per_page" => ["sometimes", "integer", "between:1,50"]]);
        $perPage = (int) ($input["per_page"] ?? 15);
        $posts = Post::query()->where("published", true)
            ->with("author:id,name")->orderBy("id")
            ->paginate($perPage)->appends(["per_page" => $perPage]);
        return PostResource::collection($posts);
    }
}
الناتج المتوقع
Fixture with published ids 1 and 3, draft id 2, per_page=1: first data row id 1; pagination total 2.

القائمة العامة المصطنعة تقيد الحقول والسجلات والحجم وتفترض التطبيق؛ لم تنفذ قاعدة.

اختيار الإزاحة أو المؤشر بصدق

تقدم paginate العدد والصفحات وتتجنب simplePaginate العدد للتالي والسابق. يناسب المؤشر أحيانا الكبير المتغير بفهرس وترتيب فريد وقيود منها null. لا ينشئ أي منها لقطة ثابتة بين الطلبات؛ تؤثر الكتابات. وثق الحداثة والتصدير المستقر واختبر الفراغ والحدود والتعادل والعلاقة الغائبة والاستبعاد قبل اعتبار JSON كاملة.

الأخطاء الشائعة وإصلاحها

يظهر عمود جديد في JSON عامة

لماذا يحدث؟
صار النموذج الخام عقدا.
كيف تصلحه؟
حدد الحقول وراجع الإضافات.
كيف تتجنب تكراره؟
اختبر غياب الحساس.

يكرر التسلسل استعلام العلاقة

لماذا يحدث؟
قرأ المورد غير المحمل.
كيف تصلحه؟
حمّل عمدا واستخدم الاسم.
كيف تتجنب تكراره؟
افحص عدة صفوف.

يكرر الترقيم سجلات متعادلة

لماذا يحدث؟
لا يوجد فاصل فريد.
كيف تصلحه؟
أضف ترتيبا حتميا واختر الترقيم.
كيف تتجنب تكراره؟
اختبر التعادل والتغير.

اختبر فهمك

1. اختر paginate أو simplePaginate لخلاصة بالتالي والسابق فقط.

اعرض الحل المشروح

قد تتجنب simplePaginate العدد غير اللازم مع ترتيب وحد واضحين. ادرس المؤشر مستقلا للكبير المتغير ولا تساو بينهما.

2. لماذا يؤكد اختبار API غياب البريد الخاص لا العنوان فقط؟

اعرض الحل المشروح

قد يصح العنوان ويسرب الرد زائدا. أكد المخطط وغياب الحساس بالعلاقات والأخطاء، لا وجود قيمة صحيحة فقط.

أهم ما تعلمته

  • تحدد الموارد ناتجا مقصودا.
  • لا يحمل الإدراج المشروط البيانات أو يفوضها.
  • يحتاج الترقيم حدودا وترتيبا وحداثة.

المراجع الرسمية