支持 Laravel.io 的持续发展 →

Laravel API 版本管理

2023年1月16日 阅读时间 3 分钟

简介

许多公司,尤其是 SaaS 公司,在他们的应用程序中使用这种技术,这取决于您应用程序的上下文,可能非常有用。

Laravel 中实现 API 版本化有许多方法。我在本文中将展示的是其中最简单的一种,让您可以轻松地将此技术应用到您的应用程序中。

什么是 API 版本化

API 版本化是指发布多个 应用程序编程接口 (API) 的版本来支持不同的功能、特性或向后兼容性的实践。它允许开发人员在不过多影响现有集成或用户的情况下,随着时间的推移更新和改进他们的 API。当一个 API 更新时,通常会发布一个新的版本,并且会维护旧版本一段时间以允许用户过渡到新版本。这允许开发人员在不影响现有集成功能的情况下添加新功能或更改他们的 API。它还使用户可以根据需要和系统兼容性选择使用哪个版本的 API。

准备路由

首先,让我们为 API 的版本准备我们的路由文件。在 routes 文件夹中创建一个文件夹

mkdir routes/api

接下来,在新建的文件夹中创建两个 PHP 文件

touch routes/api/v1.php
touch routes/api/v2.php

现在,让我们编辑 routes/api.php 文件,使其看起来像这样

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/

require __DIR__.'/api/v1.php';
require __DIR__.'/api/v2.php';

创建测试路由

为了确保我们的 API 版本正在工作,让我们创建一些测试路由。

更新 routes/api/v1.php 文件,使其看起来像这样

<?php

use Illuminate\Support\Facades\Route;

Route::prefix('v1')->group(function () {
    Route::get('test', function () {
        return response()->json(['message' => 'API V1 working']);
    });
});

现在,将routes/api/v2.php文件更新如下

<?php

use Illuminate\Support\Facades\Route;

Route::prefix('v2')->group(function () {
    Route::get('test', function () {
        return response()->json(['message' => 'API V2 working']);
    });
});

测试版本化路由

让我们使用配备在我们Laravel应用中的开箱即用的PHPUnit来测试我们新创建的版本化路由。

tests/Feature目录下创建一个新的测试文件命名为ApiVersionTest.php并更新它如下

<?php

namespace Tests\Feature;

use Tests\TestCase;

class ApiVersionTest extends TestCase
{
    public function testV1RouteReturnsSuccessResponse()
    {
        $this->get('api/v1/test')
            ->assertOk()
            ->assertJsonStructure(['message']);
    }

    public function testV2RouteReturnsSuccessResponse()
    {
        $this->get('api/v2/test')
            ->assertOk()
            ->assertJsonStructure(['message']);
    }
}

现在,使用Laravel Artisan,运行:php artisan test,你将在终端看到类似以下的输出

PASS  Tests\Feature\ApiVersionTest
✓ v1 route returns success response
✓ v2 route returns success response

其他技巧

现在API版本化运行正常后,根据应用环境,我们还可以

users表中创建一个新的字段来跟踪每个用户应该使用哪个API版本。

app/Http/Kernel class中为每个版本创建不同的middleware groups

结论

在这篇文章中,我们学习了什么叫做API版本化,以及如何在我们的Laravel应用中以一个简单直白的方式进行实现。

希望你喜欢这篇文章,如果你喜欢,别忘了和你的朋友分享!!!再见!😉

上次更新1年前。

以下是喜欢本文的读者:driesvints, fadela, wpdew, camquipc

4
喜欢这篇文章?让作者知道并给他们点赞!
wendell_adriel (Wendell Adriel) 专注于PHP/Laravel的Web工匠 😎 开源爱好者 🔥 帮助你提升技能 💪 拥有超过13年网络开发经验 🤘 指导众多开发者 🎓

你可能还喜欢以下文章

March 11th 2024

如何使用Larastan让你的Laravel应用从0到9

在应用执行前找到你的Laravel应用的错误是可能的,多亏了Larastan,这是...

阅读文章
2024年7月19日

无特性标准化API响应

我发现,大多数用于API响应的库都是使用特性实现的,...

阅读文章
2024年7月17日

在您的Laravel项目中通过Discord通知收集反馈

如何在Laravel项目中创建反馈模块,并在收到信息时获...

阅读文章

我们要感谢这些 令人惊叹的公司 支持我们

您的标志在这里?

Laravel.io

用于问题解决、知识分享和社区建设的Laravel门户。

© 2024 Laravel.io - 版权所有。