以每小时 20 美元的价格聘请具备人工智能专业知识的 Laravel 开发人员。48 小时内即可开始工作。

使用 Scramble 进行静态代码分析,自动生成 Laravel API 文档

发布日期 经过

使用 Scramble 图像进行静态代码分析,实现 Laravel 的自动化 API 文档生成

在 Laravel 中记录 API 通常需要使用依赖手动 PHPDoc 注释的软件包。虽然这种方法有效,但它很耗时、容易出错,并且经常导致文档随着代码库的发展而过时。

代码和文档之间的脱节可能会导致不准确的信息,从而误导开发人员并妨碍项目维护。

还可以选择手动维护 OpenAPI 规范文件,但这也会花费大量工作,而且很容易过时。

使用静态代码分析生成 API 文档

另一方面,还有静态代码分析方法。

与文档和代码可能存在分歧的传统方法不同,静态代码分析会扫描您的代码库,直接从代码中推断类型、参数和响应。这意味着,随着代码的变化,您的文档也会随之变化,从而确保两者始终保持同步,而无需开发人员付出额外努力。

例如,看一下这个简化的控制器的方法代码:

// app/Http/Controllers/Api/ExpensesController.php
民众 功能 指数 要求 $请求)
{
$this -> 授权 'readAny' , 费用 ::班级 (英文):
支出 = 费用 :: 询问 ()
-> 什么时候
$请求 -> '类别' ),
fn ($q) => $q -> 在哪里 '类别' ,$request -> 枚举 '类别' , 费用类别 ::班级 )),
-> 得到 ();
返回 费用资源 :: 收藏 (费用) -> 额外的 ([
'can_create' => 布尔值 )$request -> 用户 () -> '创造' , 费用 ::班级 ),
]);
}

只要看一下你就可以知道:

  • 此端点返回成功响应,其中包含费用资源集合以及显示用户是否可以创建费用的附加数据
  • 当用户未获得授权时,此端点可能会失败并出现 403 响应
  • 用户可以将费用状态传递给请求,该状态可以是可用的 ExpenseStatus 枚举值之一

这正是静态代码分析方法所做的:通过扫描代码库并推断类型,它可以确定 API 的请求和响应是什么样的,因此生成的文档始终准确并与代码库保持同步。

遇见争夺

在本文中我想向你介绍 Scramble: https://scramble.dedoc.co/

这是 Laravel 的一个软件包,它依靠静态代码分析来生成 API 文档。使用它,您无需手动编写和维护 PHPDoc 注释,并且始终拥有与您的代码库同步的最新 API 文档。

让我们通过在 Laravel API 项目中简单地要求它来安装 Scramble:

作曲家 要求 dedoc/混乱

在我们检查文档之前,我想简单向你展示一下我们将记录的 API:

GET /api/expenses
POST /api/expenses

该应用程序是一个简单的费用跟踪器,允许用户列出所有费用并存储费用。

现在,让我们查看文档。安装 Scramble 后,可从以下位置获取 /docs/api 默认情况下。

GET /api/expenses 端点的文档

以下是 GET /api/expenses 端点,其代码我们在前面的例子中见过。

只需分析代码库,Scramble 就可以:

  • 记录此端点的成功(200)响应类型。
  • 记录用户没有权限时的错误(403)响应。
  • 记录用户未经身份验证时的错误(401)响应。
  • 记录请求的 status 参数,注意该参数是一个枚举(包括可用值)。

内部原理

让我们仔细看看它的内部工作原理。

记录成功的响应

为了确定成功响应是什么样子,Scramble 会推断控制器方法的返回类型。通过分析 ExpenseResource::collection 表达式,推理系统理解这是一个匿名的集合 ExpenseResource ,并分析了后续调用 additional ,它还知道这个集合实例中还有一个额外的数组。基于此,Scramble 可以确定响应是什么样子的。

记录 403 响应

由于调用 authorize 方法,Scramble 知道此方法可能会抛出授权异常。因此,在分析控制器方法后,我们知道了可能抛出的异常列表。由于这些异常被呈现为响应,Scramble 也会记录它们。

这也意味着你可以在控制器中抛出一些自定义异常,只要它们扩展 HttpException ,Scramble 将用正确的状态代码记录它们。

错误响应不仅可以从可能的异常中推断出来,还可以从明确的响应返回中推断出来:

返回 回复 () -> json ([ '信息' => “您无权访问” ], 403 (英文):

记录 401 响应

我们的应用程序的路线注册如下:

使用 照明\支持\立面\路线 ;
路线 :: 中间件 ‘授权:批准’ -> 团体 功能 (){
路线 :: api资源 '开支' , App\Http\Controllers\Api\ExpensesController ::班级 (英文):
});

基于此,Scramble 了解到 auth 中间件,如果用户未经身份验证则返回 401 响应。

记录请求

在这个特定的例子中,Scramble 可以看到对请求中某个方法的调用,这表明有一个具有这种特定类型的参数。

此外,Scramble 还会分析验证调用以及表单请求对象上的规则列表。

对于费用创建端点,我们将编写如下验证代码:

$数据 = $请求 -> 证实 ([
'描述' => [ '细绳' ],
'类别' => [ '必需的' , 规则 :: 枚举 费用类别 ::班级 )],
'数量' => [ '必需的' , ‘整数’ ],
/**
* 交易日期。如果未​​指定,则使用当前日期。
* @format 日期时间
*/
'日期' => [ '日期' ],
]);

在这里,我们添加了 PHPDoc 注释,以手动包含请求参数的相关描述,阐明如果缺少参数 API 的行为。

生成的文档如下所示:

POST /api/expenses 端点的文档

确保文档始终是最新的

现在假设您对端点做了一些更改:您想要添加一些新的费用过滤器,返回其他附加数据,或者向类别枚举添加新的可能状态。

// app/Http/Controllers/Api/ExpensessController.php
民众 功能 指数 要求 $请求)
{
$this -> 授权 'readExpenses' , 费用 ::班级 (英文):
支出 = 费用 :: 询问 ()
-> 什么时候
$请求 -> '类别' ),
fn ($q) => $q -> 在哪里 '类别' ,$request -> 枚举 '类别' , 费用类别 ::班级 )),
+ -> 什么时候
+ $请求 -> 'q' ),
+ fn 建造者 $q) => $q -> 在哪里 数据库 :: 生的 'lower(title)' ), '喜欢' , '%' 力量 :: 降低 请求 -> 得到 'q' )) '%' ),
+
-> 得到 ();
返回 费用资源 :: 收藏 (费用) -> 额外的 ([
'can_create' => 布尔值 )$request -> 用户 () -> '创建费用' , 费用 ::班级 ),
+ 'can_update' => 布尔值 )$request -> 用户 () -> '创建费用' , 费用 ::班级 ),
]);
}
// app/Enums/ExpenseCategory.php
枚举 费用类别 : 细绳
{
案件 旅行 = '旅行' ;
案件 食物 = '食物' ;
+ 案件 实用工具 = “公用事业” ;
}

最终的文档结果如下:

更新的 GET /api/expenses 端点的文档

如您所见,文档与代码库中的所有更改保持同步。而且您只更改了代码库,而没有更改 PHPDoc 注释。

不过,PHPDoc 注释仍然很有用!当您想要为属性或请求参数添加人性化描述时,您仍然可以这样做。或者当您比 Scramble 更了解类型时,您始终可以掌控一切。

演示

这是一个使用 Scramble 进行 API 文档编写的项目的简单演示存储库。

演示文档网站: https://scramble.dedoc.co/demo/scramble#/

演示文档存储库: https://github.com/dedoc/demo-scramble

结论

在本文中,我们仔细研究了 Scramble 以及它如何简化 Laravel 项目中的 API 文档。

传统方法(例如手动编写 PHPDoc 注释或维护 OpenAPI 规范文件)既耗时又容易出错。Scramble 通过使用静态代码分析来自动更新您的文档,从而改变这一现状。

使用 Scramble,您的文档将直接反映您的代码库。当您更改 API 时,Scramble 会相应地更新文档 — 无需额外工作。

这种方法不仅节省时间,而且还能确保您的文档始终准确,减少其过时的可能性。

如果你正在开发 Laravel API 项目,不妨试试 Scramble!访问 https://scramble.dedoc.co 了解更多!

罗曼·利特维年科照片

正在处理 https://scramble.dedoc.co – 现代 Laravel OpenAPI (Swagger) 文档生成器。

归档于:
立方体

Laravel 时事通讯

加入超过 4 万名开发者的行列,不错过任何新的技巧、教程等内容。

图像
Laravel 代码审查

几天内即可获得 Laravel 代码审查方面的专家指导

访问 Laravel 代码审查
Tinkerwell 徽标

廷克威尔

Laravel 开发者必备的代码运行器。可在本地和生产环境中体验 AI、自动补全和即时反馈功能。

廷克威尔
几天内即可获得 Laravel 代码审查徽标的专家指导

几天内即可获得 Laravel 代码审查方面的专家指导

专家级代码审查!两位拥有 10 年以上 Laravel 开发经验的开发者将为您提供清晰、实用的反馈,帮助团队构建更优质的应用程序。

几天内即可获得 Laravel 代码审查方面的专家指导
PhpStorm 标志

PhpStorm

首选的 PHP IDE,对 Laravel 及其生态系统提供广泛的开箱即用支持。

PhpStorm
Laravel Cloud 标志

Laravel 云

轻松创建和管理服务器,并在几秒钟内部署 Laravel 应用程序。

Laravel 云
了解 Softtech 的标志

了解软科技

Acquaint Softtech 提供 AI 就绪的 Laravel 开发人员,48 小时内即可上手,每月费用为 3000 美元,没有冗长的销售流程,并提供 100% 退款保证。

了解软科技
Kirschbaum 标志

樱桃树

提供创新和稳定性,确保您的Web应用程序取得成功。

樱桃树
Shift 标志

转移

还在运行旧版本的 Laravel?立即实现 Laravel 自动升级和代码现代化,让您的应用程序保持最新状态。

转移
鱼叉:新一代时间跟踪和发票标志

Harpoon:新一代时间跟踪和发票系统

新一代时间跟踪和计费软件,帮助您的机构规划和预测盈利的未来。

Harpoon:新一代时间跟踪和发票系统
Lucky Media 标志

幸运传媒

Get Lucky Now——拥有十余年经验的 Laravel 开发理想之选!

幸运传媒
SaaSykit:Laravel SaaS 入门套件徽标

SaaSykit:Laravel SaaS 入门套件

SaaSykit 是一个多租户 Laravel SaaS 入门套件,包含运行现代 SaaS 所需的所有功能,例如支付、美观的结账界面、管理面板、用户仪表盘、身份验证、现成组件、统计数据、博客、文档等等。

SaaSykit:Laravel SaaS 入门套件
MongoDB 徽标

MongoDB

Enhance your PHP applications with the powerful integration of MongoDB and Laravel, empowering developers to build applications with ease and efficiency. Support transactional, search, analytics and mobile use cases while using the familiar Eloquent APIs. Discover how MongoDB's flexible, modern database can transform your Laravel applications.

MongoDB
Debounceable Queued Jobs in Laravel 13.6.0 image

Debounceable Queued Jobs in Laravel 13.6.0

阅读文章
Build Custom Middleware for Query Performance Monitoring and Optimization in Laravel with MongoDB image

Build Custom Middleware for Query Performance Monitoring and Optimization in Laravel with MongoDB

阅读文章
An Opinionated Agent Skill for Building REST APIs in Laravel image

An Opinionated Agent Skill for Building REST APIs in Laravel

阅读文章
使用 SaaSykit 镜像启动您梦想中的 SaaS 应用

使用 SaaSykit 启动您梦寐以求的 SaaS 应用

阅读文章
Generate, Parse, and Convert Documents in PHP with Paperdoc image

Generate, Parse, and Convert Documents in PHP with Paperdoc

阅读文章
Spatie Shares Their Coding Guidelines as AI Skills image

Spatie Shares Their Coding Guidelines as AI Skills

阅读文章