使用 Lumen(PHP 微框架)开发 RESTful API

作者:API传播员 · 2026-01-11 · 阅读时间:7分钟

在本教程中,我们将详细介绍如何使用 Lumen(PHP 微框架)快速开发和保护 RESTful API。Lumen 是一个轻量级框架,专为高性能 API 构建而设计。通过本教程,您将学习如何构建一个简单的 API 来管理作者数据,并为其添加验证和安全功能。


Lumen 的特性和结构

Lumen 提供了许多开箱即用的功能,以下是其中一些关键特性:

  • 路由:支持基本路由、路由参数、命名路由和路由组(如中间件)。
  • 身份验证:通过无状态机制(如令牌)进行身份验证,不支持会话状态。
  • 缓存:与 Laravel 的缓存实现相同,支持多种缓存驱动(如 Database、Memcached 和 Redis)。
  • 错误和日志记录:基于 Monolog 库,支持多种日志处理程序。
  • 队列:提供统一的 API,支持多种队列后台。
  • 事件:实现了简单的观察者模式,支持事件订阅和监听。
  • 引导:启动过程集中在单个文件中,简化了配置。

使用 Lumen 的基本要求

在开始之前,请确保您的开发环境满足以下要求:

  1. PHP:安装 PHP,并确保启用了以下扩展:OpenSSLPDOMbstring
  2. Composer:访问 Composer 官网 并安装 Composer,用于管理 Lumen 的依赖。

构建一个简单的作者管理 API

我们将构建一个简单的 API 需要实现的功能:

  • 获取所有作者信息。
  • 添加新作者。
  • 编辑作者信息。
  • 删除作者。

API 端点设计

以下是 API 的端点设计:

  • 获取所有作者:GET /api/authors
  • 获取单个作者:GET /api/authors/{id}
  • 添加新作者:POST /api/authors
  • 更新作者信息:PUT /api/authors/{id}
  • 删除作者:DELETE /api/authors/{id}

安装 Lumen

首先,通过 Composer 创建一个新的 Lumen 项目:

composer create-project --prefer-dist laravel/lumen authors

进入项目目录:

cd authors

启动本地开发服务器:

php -S localhost:8000 -t public

在浏览器中访问 http://localhost:8000,您应该能看到 Lumen 的欢迎页面。


配置数据库和模型

创建迁移文件

Lumen 支持多种数据库系统(如 MySQL、Postgres、SQLite 和 SQL Server)。在本教程中,我们将使用 MySQL。

运行以下命令创建一个迁移文件,用于定义 authors 表的结构:

php artisan make:migration create_authors_table

编辑生成的迁移文件,添加表结构:

increments('id');
            $table->string('name');
            $table->string('email');
            $table->string('github');
            $table->string('twitter');
            $table->string('location');
            $table->string('latest_article_published');
            $table->timestamps();
        });
    }    public function down()
    {
        Schema::dropIfExists('authors');
    }
}

运行迁移命令以创建数据库表:

php artisan migrate

创建模型

app 目录下创建 Author.php 文件,并定义模型:

<?php

namespace App;use IlluminateDatabaseEloquentModel;class Author extends Model
{
    protected $fillable = [
        'name', 'email', 'github', 'twitter', 'location', 'latest_article_published'
    ];
}

配置路由和控制器

定义路由

编辑 routes/web.php 文件,添加以下路由:

$router->group(['prefix' => 'api'], function () use ($router) {
    $router->get('authors', ['uses' => 'AuthorController@showAllAuthors']);
    $router->get('authors/{id}', ['uses' => 'AuthorController@showOneAuthor']);
    $router->post('authors', ['uses' => 'AuthorController@create']);
    $router->put('authors/{id}', ['uses' => 'AuthorController@update']);
    $router->delete('authors/{id}', ['uses' => 'AuthorController@delete']);
});

创建控制器

app/Http/Controllers 目录下创建 AuthorController.php 文件,并实现以下方法:

public function delete($id)
{
Author::findOrFail($id)->delete();
return response('Deleted Successfully', 200);
}

}

namespace AppHttpControllers;

use AppAuthor;
use IlluminateHttpRequest;

class AuthorController extends Controller
{
public function showAllAuthors()
{
return response()->json(Author::all());
}

public function showOneAuthor($id)
{
return response()->json(Author::find($id));
}

public function create(Request $request)
{
$author = Author::create($request->all());
return response()->json($author, 201);
}

public function update($id, Request $request)
{
$author = Author::findOrFail($id);
$author->update($request->all());
return response()->json($author, 200);
}

public function delete($id)
{
Author::findOrFail($id)->delete();
return response('Deleted Successfully', 200);
}
}

验证 API 数据

在 Lumen 中,可以使用 $this->validate 方法轻松验证请求数据。例如,在 create 方法中添加以下验证规则:

$this->validate($request, [
    'name' => 'required',

    'email' => 'required|email|unique:authors',    'location' => 'required|alpha'
]);

使用 Auth0 保护 API

为了保护 API,我们将使用 Auth0 提供的 JWT(JSON Web Token)验证服务。

安装 Auth0 SDK

通过 Composer 安装 Auth0 的 PHP SDK:

composer require auth0/auth0-php

创建中间件

app/Http/Middleware 目录下创建 Auth0Middleware.php 文件,并实现以下逻辑:

bearerToken();        if (!$token) {
            return response()->json(['error' => 'No token provided'], 401);
        }        try {
            $verifier = new TokenVerifier(env('AUTH0_DOMAIN'), env('AUTH0_AUD'));
            $verifier->verify($token);
        } catch (InvalidTokenException $e) {
            return response()->json(['error' => 'Invalid token'], 401);
        }        return $next($request);
    }
}

应用中间件

bootstrap/app.php 文件中注册中间件:

$app->routeMiddleware([
    'auth' => AppHttpMiddlewareAuth0Middleware::class,
]);

在路由组中添加中间件:

$router->group(['prefix' => 'api', 'middleware' => 'auth'], function () use ($router) {
    $router->get('authors', ['uses' => 'AuthorController@showAllAuthors']);
    $router->post('authors', ['uses' => 'AuthorController@create']);
});

总结

通过本教程,您学习了如何使用 Lumen 快速构建高性能的 API。如果您有任何问题,欢迎在评论区留言!

原文链接: https://auth0.com/blog/developing-restful-apis-with-lumen/