ThinkPHP5使用Swagger-php接口文档

简介: ThinkPHP5使用Swagger-php接口文档

git

环境:Centos7.1

参考了网上的一些教程,过程有点曲折。参考教程地址:www.cnblogs.com/lyh940/p/70…

开始操作:

1、用composer安装Swagger。

机器上装的有宝塔面板,为了省事儿,直接用面板的shell执行安装Swagger的命令,

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

我这边执行之后,结果出现以下提示:

All settings correct for using Composer
The HOME or COMPOSER_HOME environment variable must be set for composer to run correctly

正常情况下,应当提示:

All settings correct for using Composer
download……

看到跟环境变量有关,就检查了环境变量,发现查看环境变量的结果不正确。然后想到,也许不能使用宝塔面板的shell。于是登录服务器,发现提示结果正常了。


composer安装之后,发现全局命令无法使用。


composer update

composer require zircote/swagger-php

composer global require zircote/swagger-php

每次执行composer命令,都会提示命令参数。意思是我输入的命令不对。


但是我明明进行了全局安装。也就是执行了前面的mv命令。进入到usr/local/bin/目录,发现文件也是在的。这就奇怪了。


使用composer -v命令,查看软件的版本。发现是v0.2.x,版本好像不太对,查看了一下composer网站上的版本,发现当前官网上写的是Latest: v1.8.0


难道有个软件使用的命令跟composer重名?


上面提示执行这个命令,提示命令参数,于是我就用它提示的参数composer --help,查看帮助。发现给出的帮助里面,有个网址,访问那个网址,发现是区块链账本项目介绍。原来是同事在这个服务器测试区块链项目,装的东西,冲突了。


想到能否给命令设置别名,于是将/usr/local/bin/composer改名为composer1。执行

composer1 install

提示权限被拒绝。难道是没有权限?但是我明明使用的root账号。还是去查看了composer1文件的权限,发现root有读写权限,但没有执行权限,于是添加上执行权限,执行

composer1 install

执行成功。

2、下载swagger-ui

用cd命令进入到存放静态文件的目录,例如public目录。执行下面命令:

git clone https://github.com/swagger-api/swagger-ui.git

注意:上面的命令,下载的是当前最新版本3.0,但是3.0有个已知的问题,不支持中文。如果想支持中文,需要指定版本。

git clone --branch v2.2.10 https://github.com/swagger-api/swagger-ui.git

3、安装swagger-php后端

进入tp框架找到根目录下,打开composer.json找到require项,添加一行,然后使用更新命令。

"zircote/swagger-php": "*"

注意,每行用逗号分隔,不要忘了。

或者执行命令:

composer require "zircote/swagger-php"

注意:这个命令默认下载的是当前最新的版本,也就是3.x。我到git上查了一下,想要跟swagger-ui的2.x版本配合使用,需要使用swagger-php 2.x版本。指定版本:

composer require "zircote/swagger-php:2.0.13"

4、生成swagger.json文件

教程上,让执行下面命令(实际执行的命令,要根据你那边的目录来确定)

php E:/WampServer/WWW/tpSwagger/tp5/vendor/zircote/swagger-php/bin/swagger E:/WampServer/WWW/tpSwagger/tp5/vendor/zircote/swagger-php/Examples -o E:/WampServer/WWW/tpSwagger/tp5/swaggerApi/swagger.json

第1个路径是你安装成功后组件的路径;


第2个路径是你想要生成这个目录下所有用swagger方式注释的php文件,把所有注释生成api文档;


第3个路径是你存放生成swagger.json的路径。


可能是我这边默认安装的是新版的swagger(查看版本是3.0),提示找不到swagger


我到bin这个目录,发现没有swagger文件,但是有一个openapi文件。


于是就把bin/swagger改为bin/openapi,再次执行。


结果虽然报了很多警告,但是确实生成了json文件。


5、swagger-ui加载生成的json文件


进入到swagger-ui的下载目录,找到dist目录,打开里面的index.html文件,修改文件引用的.json文件的路径为你的json文件的路径(就是上面生成的那个swagger.json)


如果json文件的目录设置不对,则会提示Failed to load API definition.


6、快速更新文档

<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function index(){
        $path = 'D:/WampServer/WWW/tpSwagger/tp5/application'; //你想要哪个文件夹下面的注释生成对应的API文档
        $swagger = \OpenApi\scan($path);
        // header('Content-Type: application/json');
        // echo $swagger;
        $swagger_json_path = 'D:/WampServer/WWW/tpSwagger/tp5/swaggerApi/swagger.json';
        $res = file_put_contents($swagger_json_path, $swagger);
        if ($res == true) {
           $this->redirect('http://localhost/tpSwagger/swagger-ui/dist/index.html');
        }
    }
}

我这边在使用Swagger方法的时候,不能用这个\OpenApi\scan(path);提示找不到方法,需要用Swaggerscan(path);提示找不到方法,需要用\\Swagger\\scan(path);Swaggerscan(path);


扫描的结果是对象,如果要写入文件,需要转换为字符串。另外在写入文件的时候,遇到权限问题。我最后没有使用file_put_contents函数

$path = APP_PATH.'portal/test'; //你想要哪个文件夹下面的注释生成对应的API文档
        $swagger = \Swagger\scan($path);
        // header('Content-Type: application/json');
        // echo $swagger;
        $swagger_json_path = ROOT_PATH.'public/swaggerApi/swagger.json';
        // 检测模板目录
        $dir = dirname($swagger_json_path);
        if (!is_dir($dir)) {
            mkdir($dir, 0755, true);
        }
        $myfile = fopen($swagger_json_path, "w") or die("Unable to open file!");
        $swagger=json_encode($swagger, true);
        fwrite($myfile, $swagger);
        fclose($myfile);



目录
相关文章
|
2月前
|
API
23_Swagger接口文档
23_Swagger接口文档
30 0
|
2月前
|
前端开发 应用服务中间件 nginx
使用swagger和knife4j生成的接口文档在浏览器中输入地址后报404错误
使用swagger和knife4j生成的接口文档在浏览器中输入地址后报404错误
155 0
|
10月前
|
运维 前端开发 JavaScript
Swagger生成接口文档
Swagger生成接口文档
126 0
|
11月前
|
前端开发 数据可视化 Java
Swagger 接口文档 | knife4j 增强方案
Swagger 接口文档 | knife4j 增强方案
152 0
Swagger 接口文档 | knife4j 增强方案
|
12月前
|
安全 数据可视化 Java
Swagger 自动生成 Api 文档:简化接口文档编写
自动生成 API 文档的好处不言而喻,它可以提供给你的团队或者外部协作者,方便 API 使用者准确地调用到你的 API。为了降低手动编写文档带来的错误,很多 API 开发者会偏向于寻找一些好的方法来自动生成 API 文档。
Swagger 自动生成 Api 文档:简化接口文档编写
|
12月前
|
存储 SQL Java
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(上)
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(上)
73 1
|
11月前
|
JSON Java API
SpringBoot集成Swagger2自动生成API接口文档
SpringBoot集成Swagger2自动生成API接口文档
120 0
|
12月前
|
前端开发 数据可视化 安全
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(下)
Spring Boot + vue-element 开发个人博客项目实战教程(十、调试、密码加密和Swagger接口文档)(下)
134 0
|
SpringCloudAlibaba 前端开发 Java
SpringCloud Alibaba微服务实战十一 - Swagger接口文档聚合
SpringCloud Alibaba微服务实战十一 - Swagger接口文档聚合
515 0
|
Java Maven
Java:SpringBoot整合Knife4j(Swagger)提供接口文档
Java:SpringBoot整合Knife4j(Swagger)提供接口文档
137 0
Java:SpringBoot整合Knife4j(Swagger)提供接口文档