لارافيل, Api / 2024-11-21

التعامل مع Api في لارافيل - الجزء الرابع - ما هو Versioning في API، وطريقة القيام به في لارافيل.

التعامل مع Api في لارافيل - الجزء الرابع - ما هو Versioning في API، وطريقة القيام به في لارافيل.

2024-11-21 وقت القراءه : 5 دقائق

في السنوات الأخيرة إنتشر بشكل كبير مفهوم Api Versioning، والفكرة الرئيسية منه هي عدم حذف Api القديمة عندما نحتاج لإنشاء نسخة جديدة من API، حيث يتم إضافة الإصدار إلى الرابط، وبإتباع هذه الفكرة سيكون لدينا على سبيل المثال الروابط التالية :

http://www.test.test/api/v1/brands
http://www.test.test/api/v2/brands

لاحظ أن الفرق بين الرابطين هو “V1” و “V2”، فهي مرتبطة بالإصدار الذي نستخدمة، مثلا بعض التطبيقات، مواقع front end القديمة، سوف تستخدم الإصدار الأول V1، وبينما الإصدارات المحدثة من التطبيقات ومواقع front end سوف تستخدم الإصدار v2.

  

كيف يمكن تنفيذ أكثر من إصدار versioning للـ api.

حتى يكون العمل منظم من المفضل أن يتم تطبيق Versioning على المجلدات، فبداخل المجلد Controllers/Api يفضل إنشاء V1 للـ controllers التي تستخدم الإصدار الأول، و مجلد V2 للـ controllers التي تستخدم الإصدار الثاني، كذلك يمكن تطبيق هذه الطريقة على Resources.

app/Http/Controllers/Api/V1
app/Http/Controllers/Api/V2

 

وللقيام بذلك

إنشاء مجلد V1 بداخل مجلد API بداخل مجلد Controllers

 

 

/app
  /controllers
    /Api
      /v1
        /BrandController.php


تعديل namespace للـ Controllers التي تم نقلها إلى المجلد V1 

namespace App\Http\Controllers\API\V1;
class BrandController extends Controller
{

تعديل nameSpace للـ BrandController في ملف routes/api.php

use App\Http\Controllers\API\V1\BrandController;
 
Route::apiResource('brands',BrandController::class);

 

تعديل prfix من api إلى api/v1 في ملف routeServiceProvider.php

Route::prefix('api/v1')
       ->middleware('api')
       ->namespace($this->namespace)
       ->group(base_path('routes/api.php'));

 

الأن لو قمنا بزيارة الرابط بإستخدام v1 فإننا سوف نحصل على النتائج.

 

 

إنشاء v2 من api

إنشاء مجلد V2 للـ Controllers

 

تعديل namespace للـ controllers التي توجد بداخل المجلد V2

<?php
namespace App\Http\Controllers\API\V2;
 
class BrandController extends Controller
{

 

إنشاء route prefix في الكلاس routeServiceProvider.php بداخل الدالة boot

Route::prefix('api/v2')
    ->middleware('api')
    ->namespace($this->namespace)
    ->group(base_path('routes/api_V2.php'));

 

كما نلاحظ أنه ملف route إسمة api_v2.php وهو غير موجود، حيث نحتاج لإنشاؤه في المسار routes/api_v2.php، من أجل إستخدام namespace للـ controllers التي توجد بداخل المجلد V2 وذلك لأن controllers namespace التي توجد بداخل الملف api.php تؤشر على الـ controllers التي توجد بداخل المجلد V1

//routes/api_v2.php
<?php
use App\Http\Controllers\API\V2\BrandController;
 
Route::apiResource('brands',BrandController::class);

 

الأن لو قمنا بزيارة الرابط بـ V2


ملخص الخطوات و إنشاء V3

  • إنشاء مجلد باسم V3 للـ controllers بداخل المجلد api
/app
   /controllers
     /Api
       /v3
         /BrandController.php


  • تعديل namespace للـ controllers التيتم نقلها للمجلد V3
  • إنشاء route prfix في الكلاس routeServiceProvider
Route::prefix('api/v3')
     ->middleware('api')
     ->namespace($this->namespace)
     ->group(base_path('routes/api_V3.php'));

 

  • إنشاء ملف للـ routes باسم api_V3.php في المسار routes/api_v2.php
  • تعديل namespace للـ controllers بداخل الملف api_v3.php
//routes/api_v3.php
 <?php
 use App\Http\Controllers\API\V3\BrandController;
  
 Route::apiResource('brands',BrandController::class);
  •  الرابط
http://www.test.test/api/v3/brands

التعليقات
زائر
منذ سنتين

السلام عليكم يعطيك العافية م. إيثار شروف اولا أتقدم بالشكر الخالص لك لما تقدمه من مقالات مفيدة لمجتمعنا العربي ،والتى لطالما قمت بالرجوع الى تلك المقالات للاستفادة منها . كان هناك طلب لتطوير موقعك \"etharshrouf.com\" ، وهو يتمثل في إضافة تواريخ للمقالات بالاضافة الي فلتر بحث لترتيب المقالات حسب الاحدث والاقدم ،مع وبدون اختيار القسم. خالص تحياتي

إضافة تعليق
Loading...