Swagger php - 过滤公共/私有API而不分割代码

时间:2016-12-09 11:09:42

标签: php swagger swagger-php

我正在考虑使用Zircote Swagger PHP来记录API。我还没有完全熟悉它,因为我在尝试使用它之前一直试图回答这个问题。

我想要两套不同的文档。一个doc页面将包含我们所有的API,另一个将仅包含那些应公开记录的API。

我发现this answer或多或少地给了我正在寻找的结果。但是,他们建议的解决方案要求我重构我现有的代码,因为我们的公共和私有API的实现还没有按照答案的建议分开。

有没有办法在注释中标记单个API,并在生成文档时过滤这些标记?

1 个答案:

答案 0 :(得分:1)

It is not implemented yet, but I believe a PR would be welcomed.

For the time being you can post-process generated docs, e.g. piping it thru a single-liner:

swagger /path/to/project | php -r '$s = json_decode(file_get_contents("php://stdin"),true);array_walk($s["paths"],function(&$p){$p=array_filter($p,function($m){return count(array_intersect(["tag1","tag2"],$m["tags"]))==0;});});file_put_contents("php://stdout",json_encode($s,192));' > public.json

Formatting for readability:

$s = json_decode(file_get_contents("php://stdin"), true);
array_walk(
    $s["paths"],
    function (&$path) {
        $path = array_filter(
            $path,
            function ($method) {
                return count(array_intersect(["tag1", "tag2"], $method["tags"])) == 0;
            }
        );
    }
);
file_put_contents("php://stdout", json_encode($s, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));

Where tag1 and tag2 are tags to exclude.