编程

Kit: Laravel 的 API 入门套件

4 2026-09-17 01:18:00

Steve McDougall 的 Kit 包是 Laravel API 入门套件,它基于 token 认证、API 文档、默认安全第一等理念构建。其面向想要结构化的起点来创建版本化 JSON API 的开发者,而无需一切都从头开始编写。

开始

克隆该库,安装依赖并运行 setup 脚本:

composer install
composer run setup
php artisan serve

composer run setup 命令将 .env.example 复制到 .env,并生成应用密钥,基于本地 SQLite 数据库运行迁移。

API 架构

Kit 使用了一些深思熟虑的架构决策:

  • 非全局的 /api 前缀 — 路由直接是版本化的,e.g. /v1/auth/login
  • Invokable 控制器 — 每个控制器都只有一个 __invoke 方法
  • 用于验证的表单请求 — 请求负载(payload)在专有的 FormRequest 类中使用 DTO 样式的负载类中验证 app/Http/Payloads/V1
  • JSON:API 资源格式 — 响应对所有的实体数据遵循一致性结构

认证

有九个路由用来处理整个认证生命周期:

  • 注册和登录(都通过 Laravel Sanctum 返回 token)
  • /v1/auth/me (使用 Bearer token)
  • 通过签名 URL 的 Email 验证
  • 密码重置使用防枚举响应 (无论邮箱是否存在,都返回同样的响应)

安全的默认设置

Kit 包含多个开箱即用的安全默认设置:

  • ULID 主键用于用户记录
  • 认证断点预定义限流,可以在 AppServiceProvider 中配置
  • 写入请求必须强制使用 Content-Type: application/json
  • 强化响应头,包括 X-Content-Type-Options: nosniff、X-Frame-Options: DENY 和 Referrer-Policy: no-referrer
  • 请求 ID 跟踪
  • 敏感操作的审计日志记录
  • 以及更多

Sunset 中间件

Kit 同时引入了 Sunset 中间件用于逐步弃用 API 端点。你可以将其直接应用于路由,并传入三个参数:弃用日期、替代 URL 以及用于控制强制执行的布尔值:

Route::middleware('sunset:2027-01-01,https://api.acme.com/v2/auth/login,true')
    ->post('/v1/auth/login', LoginController::class);

在接口仍然处于激活状态时,中间件会在每个响应中添加 Deprecation、Sunset 和 Link(后续版本)标头,以便 API 客户端能够检测到弃用并进行相应的规划。一旦弃用日期过后且强制执行生效,该接口将返回 410 Gone 状态码。

文档

API 文档使用 Scribe 生成。注释基于注解而非文档块,并且该设置会在生成文档的同时生成 OpenAPI 规范。

本地化

Kit 遵循 Accept-Language 请求头,并以 Content-Language 头进行响应。默认支持的语言为 en 和 es,翻译文件分别位于 lang/en/api.php 和 lang/es/api.php。

工具

项目使用 Pest 进行测试,PHPStan 进行静态分析,Pint 进行代码格式化,以及 Rector 进行自动化重构。GitHub Actions 工作流会在每次推送时运行 CI 测试,应用每日依赖更新,并使用 Composer Audit 和 Gitleaks 进行安全扫描。

要求

  • PHP 8.5+
  • Laravel 12
  • SQLite (用于本地开发;其他数据库可配置)

Github 源码 juststeveking/kit