PHP拆分YAPI导出的swagjson文件

项目采用了Yapi做为文档管理工具,可是由于之前没有划分好模块,结果文档都写到一起了,导致查看文档不方便。

研究Yapi,发现不能移动分组,而且只能导出项目下的所有接口,于是导出文件,研究后发现文档里的文件夹是使用tag来表示的,于是想到可以把按照tag,导出成单个json文件,然后新建项目,再导入生产的json文件。

处理json的话,还是PHP方便,代码如下:

用法 php yapi.php /path/yourjsonfile /path/output/ ,注意导出目录最后得有'/'

    <?php
    
    
    function buildCommon($json)
    {
        $common = [
            'swagger' => $json['swagger'],
            'info' => $json['info'],
            'basePath' => $json['basePath'],
            'tags' => [],
            'schemes' => $json['schemes'],
            'paths' => [],
        ];
        return $common;
    }
    
    function buildContent($json, $common, $outDir)
    {
        $paths = array_keys($json['paths']);
        $orignTags = $json['tags'];
        foreach ($orignTags as $tIndex => $tag) {
            $result = $common;
            foreach ($paths as $pIndex => $path) {
                if (isset($json['paths'][$path]['post'])) {
                    $tags = $json['paths'][$path]['post']['tags'];
                } else {
                    $tags = $json['paths'][$path]['get']['tags'];
                }
    
                if (in_array($tag['name'], $tags)) {
                    $result['paths'][$path] =  $json['paths'][$path];
                }
            }
            file_put_contents($outDir.$tag['name'].'.json',json_encode($result,JSON_UNESCAPED_UNICODE));
        }
    
    }
    
    function main($param)
    {
        if (count($param) != 3) {
            die("param error, example: sw.php input.json outputdir");
        }
        $content = file_get_contents($param[1]);
        $json = json_decode($content, true);
        if (!$json) {
            die('input.json wrong');
        }
    
        $common = buildCommon($json);
        buildContent($json, $common, $param[2]);
    }
    
    
    main($argv);
posted @ 2020-02-17 15:50  半山th  阅读(490)  评论(0编辑  收藏  举报