一个人应该如何从laravel中服务swagger



我尝试使用swagger与laravel来自动记录我们的RESTful API。我们的目标是将swagger注释保存在laravel控制器中,然后让swagger解析这些注释并生成相关的.json/.php文件。理想情况下,我希望由laravel项目提供swagger文件,以便所有内容保持在相同的引子下并同步。

为了完成这个任务,我在laravel项目的根目录中创建了一个docs目录(与public所在的目录相同)。然后,我在routes.php中添加了以下路由:
Route::get('docs/{page?}', function($page='index.php') {
    header('Access-Control-Allow-Origin: *');
    $parts = pathinfo($page);
    $path = $_SERVER["DOCUMENT_ROOT"] . "/../docs/$page";
    if ($parts['extension'] === 'php') {
        require($path);
    } else {
        return file_get_contents($path);
    }
});

使用这种方法,我就可以将我的swagger-ui网站指向http://mydomain/docs,剩下的就是魔术了。

对于所有的laravel大师来说,这是提供这些swagger文件的最佳方式吗?我尝试将docs目录放在public中,但这会导致重定向循环。另一种方法是在我的web服务器配置中创建一个虚拟主机,直接指向这些swagger文件,但在这一点上,我宁愿不做这个额外的配置

我为Laravel编写了一个名为swaggervel的包,它使用swagger-php自动生成你的swagger json,并将其与redgeoff的代码一起提供,然后使用swagger-ui显示。

只需在composer.json中的require中添加以下行:

" jlapp/swaggervel":"dev-master"

或者你可以在Git上获取:https://github.com/slampenny/Swaggervel.git

我现在正在解决这个问题,我已经解决了重定向循环,但没有像我想的那样优雅。

只需在public/docs/目录中添加一个.htaccess文件,如下所示:

<IfModule mod_rewrite.c>
    RewriteEngine On
</IfModule>

,您将能够访问该文件,而无需键入index.php。如果我想出一种更优雅的生成文档的方法,我会更新的。

相关内容

  • 没有找到相关文章

最新更新