我尝试使用swagger和laravel自动记录我们的RESTful API。目标是在laravel控制器中保持swagger注释,然后swagger解析注释并生成相关的.json / .php文件。理想情况下,我希望laravel项目能够提供swagger文件,以便将所有内容保存在同一个引擎盖下并保持同步。
为了实现这一目标,我在laravel项目的根目录( public 所在的目录)中创建了一个 docs 目录。然后,我将以下路由添加到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大师,这是服务这些招摇文件的最佳方式吗?我尝试将 docs 目录放在 public 中,但这会导致重定向循环。
另一种实现此目的的方法是在我的Web服务器配置中创建一个直接指向这些swagger文件的虚拟主机,但此时我不想进行额外配置。
答案 0 :(得分:8)
我写了一个swaggervel,一个Laravel包,它使用swagger-php自动生成你的swagger json,用redgeoff的代码提供它,然后用swagger-ui显示它。
只需在composer.json中添加以下行:
" jlapp / swaggervel":" dev-master"
或者你可以在Git上获得它:https://github.com/slampenny/Swaggervel.git
答案 1 :(得分:0)
我现在正在研究这个问题,我已经解决了重定向循环但不像我想的那样优雅。
只需在.htaccess
目录中添加public/docs/
文件即可:
<IfModule mod_rewrite.c>
RewriteEngine On
</IfModule>
您无需键入index.php即可访问该文件。如果我想出一种更优雅的文档生成方式,我会更新。