首页
/ 在Scribe文档工具中实现OpenAPI标签分组功能

在Scribe文档工具中实现OpenAPI标签分组功能

2025-07-05 07:39:46作者:钟日瑜

背景介绍

Scribe是一个流行的API文档生成工具,它能够自动从Laravel应用中生成美观的API文档。在实际项目中,随着API数量的增加,合理的分组和分类变得尤为重要。OpenAPI规范支持通过标签(tags)和标签组(tagGroups)来组织API端点,这可以显著提升文档的可读性和导航体验。

需求分析

许多开发者希望在Scribe生成的OpenAPI文档中实现多级导航功能,类似于Elements主题提供的体验。具体来说,需要实现以下功能:

  1. 为API端点添加子组(subgroup)信息
  2. 在生成的OpenAPI规范中包含x-tagGroups扩展字段
  3. 保持与现有Scribe功能的兼容性

技术实现方案

自定义OpenAPI规范写入器

通过继承Scribe的OpenAPISpecWriter类,我们可以自定义OpenAPI规范的生成逻辑。核心思路是:

  1. 从端点元数据中提取子组信息
  2. 构建标签列表
  3. 组织标签组结构
  4. 将自定义内容合并到标准OpenAPI规范中

关键代码实现

class CustomOpenAPISpecWriter extends OpenAPISpecWriter
{
    public function generateSpecContent(array $groupedEndpoints): array
    {
        // 准备标签列表
        $tags = [];
        foreach ($groupedEndpoints as $group) {
            foreach ($group['endpoints'] as $endpoint) {
                $subgroup = $endpoint['metadata']['subgroup'];
                if (!in_array($subgroup, $tags)) {
                    $tags[] = $subgroup;
                }
            }
        }

        // 准备标签组结构
        $tagGroups = [];
        foreach ($groupedEndpoints as $group) {
            $groupTags = [];
            foreach ($group['endpoints'] as $endpoint) {
                $subgroup = $endpoint['metadata']['subgroup'];
                if (!in_array($subgroup, $groupTags)) {
                    $groupTags[] = $subgroup;
                }
            }
            $tagGroups[] = [
                'name' => $group['name'],
                'tags' => $groupTags,
            ];
        }

        return array_merge([
            // 标准OpenAPI字段
            'openapi' => self::SPEC_VERSION,
            'info' => [...],
            'servers' => [...],
            'paths' => $this->generatePathsSpec($groupedEndpoints),
            
            // 自定义标签相关字段
            'tags' => array_map(function ($tag) {
                return [
                    'name' => $tag,
                    'description' => 'Description for '.$tag,
                ];
            }, $tags),
            'x-tagGroups' => $tagGroups,
        ], $this->generateSecurityPartialSpec());
    }
}

注册自定义写入器

在Laravel服务提供者中注册自定义写入器:

$this->app->bind(OpenAPISpecWriter::class, CustomOpenAPISpecWriter::class);

实现效果

通过这种实现方式,生成的OpenAPI文档将包含:

  1. 详细的标签定义
  2. 分层次组织的标签组结构
  3. 完整的API端点信息

这使得生成的文档在支持x-tagGroups的查看器(如Scalar)中能够显示多级导航菜单,大大提升了API文档的可用性。

最佳实践建议

  1. 为每个子组提供有意义的描述信息
  2. 保持分组层次不超过3级以确保可读性
  3. 考虑在API端点元数据中添加分组信息的验证逻辑
  4. 为自定义写入器添加单元测试确保稳定性

总结

通过扩展Scribe的OpenAPI规范生成逻辑,我们成功实现了API文档的多级分组功能。这种方案不仅保持了与现有Scribe功能的兼容性,还显著提升了生成文档的组织结构和用户体验。这种自定义方法展示了Scribe框架良好的扩展性,开发者可以根据项目需求灵活调整文档生成逻辑。

对于需要更复杂文档组织的项目,还可以考虑进一步扩展这个方案,例如支持动态分组、基于权限的文档过滤等功能,这些都可以通过类似的自定义写入器方式实现。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
168
2.05 K
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
92
599
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
199
279
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
954
563
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Python
78
71
Git4ResearchGit4Research
Git4Research旨在构建一个开放、包容、协作的研究社区,让更多人能够参与到开放研究中,共同推动知识的进步。
HTML
25
4
leetcodeleetcode
🔥LeetCode solutions in any programming language | 多种编程语言实现 LeetCode、《剑指 Offer(第 2 版)》、《程序员面试金典(第 6 版)》题解
Java
60
17
apintoapinto
基于golang开发的网关。具有各种插件,可以自行扩展,即插即用。此外,它可以快速帮助企业管理API服务,提高API服务的稳定性和安全性。
Go
22
0