Coder Social home page Coder Social logo

hgthecode / apidoc-php Goto Github PK

View Code? Open in Web Editor NEW
156.0 156.0 18.0 63.9 MB

基于PHP的注解生成API文档,兼容Laravel、ThinkPHP、Hyperf、Webman等框架;在线调试、Markdown文档、多应用/多版本、Mock数据、授权访问、接口生成器、代码生成器等众多实用功能,快来体验吧!

Home Page: https://docs.apidoc.icu

License: MIT License

PHP 100.00%

apidoc-php's People

Contributors

hgthecode avatar iayoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

apidoc-php's Issues

Apidoc\Header 的 name 字段缺失

image

Apidoc\Header 的 name 字段好像没有,导致编辑器有个错误提示(但能够正常使用)

应该把 vendor/hg/apidoc/src/annotation/Header.php 构造函数的 $value 改成 $name 就可以了

Fatal error: Cannot override final method

报错信息

Fatal error: Cannot override final method Doctrine\Common\Annotations\Annotation::__construct() in \vendor\hg\apidoc\src\annotation\Field.php on line 20

  • PHP 8.2.1
  • Windows
  • hg/apidoc v5.0.3
  • ThinkPHP 6.0

希望增加返回示例

首先非常感谢辛苦地付出
现在感觉非常完美了 就是差一个返回示例没有 类似postman的
image

配置文件中的数据库配置不生效

在TP6的config/apidoc.php文件配置了数据库的选配信息,但是并没有生效,实际用的还是config/database.php的内容

另外模板语法麻烦加上ucfirst的支持,不想直接改vendor的代码

可以支持下webman框架下使用表前缀,ref参数引用模型数据表所有字段,支持查询没带表前缀的错误。 * @Apidoc\Returned("list", type="array", desc="列表数据", ref="app\model\User")

Next Illuminate\Database\QueryException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'call' at line 1 (SQL: SHOW FULL COLUMNS FROM call) in D:\www\xzzh\xzzh_manages\vendor\illuminate\database\Connection.php:712
Stack trace:
#0 D:\www\xzzh\xzzh_manages\vendor\illuminate\database\Connection.php(672): Illuminate\Database\Connection->runQueryCallback('SHOW FULL COLUM...', Array, Object(Closure))
#1 D:\www\xzzh\xzzh_manages\vendor\illuminate\database\Connection.php(376): Illuminate\Database\Connection->run('SHOW FULL COLUM...', Array, Object(Closure))
#2 D:\www\xzzh\xzzh_manages\vendor\illuminate\database\Capsule\Manager.php(200): Illuminate\Database\Connection->select('SHOW FULL COLUM...')
#3 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\middleware\WebmanMiddleware.php(46): Illuminate\Database\Capsule\Manager::__callStatic('select', Array)
#4 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\providers\BaseService.php(111): hg\apidoc\middleware\WebmanMiddleware::databaseQuery('SHOW FULL COLUM...')
#5 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseModel.php(196): hg\apidoc\middleware\WebmanMiddleware->hg\apidoc\providers{closure}('SHOW FULL COLUM...')
#6 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseModel.php(69): hg\apidoc\parses\ParseModel::getTableDocument(Object(app\common\model\Call), Array)
#7 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseModel.php(37): hg\apidoc\parses\ParseModel::parseModelTable(Object(app\common\model\Call), 'app\common\mode...', '')
#8 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseApiDetail.php(452): hg\apidoc\parses\ParseModel->renderModel('app\common\mode...')
#9 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseApiDetail.php(747): hg\apidoc\parses\ParseApiDetail->renderRef('app\common\mode...', true)
#10 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseApiDetail.php(597): hg\apidoc\parses\ParseApiDetail->handleParamAndReturned(Array, Object(hg\apidoc\annotation\Returned), 'returned', true, 'controller')
#11 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseApiDetail.php(254): hg\apidoc\parses\ParseApiDetail->parseAnnotation(Object(ReflectionMethod), true, 'controller')
#12 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\parses\ParseApiDetail.php(84): hg\apidoc\parses\ParseApiDetail->parseApiMethod(Object(ReflectionClass), Object(ReflectionMethod))
#13 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\Controller.php(158): hg\apidoc\parses\ParseApiDetail->renderApiDetail('api', 'app\api\v3\cont...', 'lists')
#14 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(304): hg\apidoc\Controller->getApiDetail(Object(support\Request))
#15 D:\www\xzzh\xzzh_manages\vendor\hg\apidoc\src\middleware\WebmanMiddleware.php(25): Webman\App::Webman{closure}(Object(support\Request))
#16 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(299): hg\apidoc\middleware\WebmanMiddleware->process(Object(support\Request), Object(Closure))
#17 D:\www\xzzh\xzzh_manages\vendor\webman\log\src\Middleware.php(58): Webman\App::Webman{closure}(Object(support\Request))
#18 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(299): Webman\Log\Middleware->process(Object(support\Request), Object(Closure))
#19 D:\www\xzzh\xzzh_manages\vendor\webman\cors\src\CORS.php(12): Webman\App::Webman{closure}(Object(support\Request))
#20 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(299): Webman\Cors\CORS->process(Object(support\Request), Object(Closure))
#21 D:\www\xzzh\xzzh_manages\app\common\middleware\AccessControl.php(32): Webman\App::Webman{closure}(Object(support\Request))
#22 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(299): app\common\middleware\AccessControl->process(Object(support\Request), Object(Closure))
#23 D:\www\xzzh\xzzh_manages\app\common\middleware\ApiDocServiceProvider.php(39): Webman\App::Webman{closure}(Object(support\Request))
#24 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(299): app\common\middleware\ApiDocServiceProvider->process(Object(support\Request), Object(Closure))
#25 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(515): Webman\App::Webman{closure}(Object(support\Request))
#26 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\App.php(128): Webman\App::findRoute(Object(Workerman\Connection\TcpConnection), '/apidoc/apiDeta...', 'POST/apidoc/api...', Object(support\Request))
#27 D:\www\xzzh\xzzh_manages\vendor\workerman\workerman\Connection\TcpConnection.php(638): Webman\App->onMessage(Object(Workerman\Connection\TcpConnection), Object(support\Request))
#28 D:\www\xzzh\xzzh_manages\vendor\workerman\workerman\Events\Select.php(311): Workerman\Connection\TcpConnection->baseRead(Resource id #320)
#29 D:\www\xzzh\xzzh_manages\vendor\workerman\workerman\Worker.php(2457): Workerman\Events\Select->loop()
#30 D:\www\xzzh\xzzh_manages\vendor\workerman\workerman\Worker.php(1443): Workerman\Worker->run()
#31 D:\www\xzzh\xzzh_manages\vendor\workerman\workerman\Worker.php(1386): Workerman\Worker::forkWorkersForWindows()
#32 D:\www\xzzh\xzzh_manages\vendor\workerman\workerman\Worker.php(559): Workerman\Worker::forkWorkers()
#33 D:\www\xzzh\xzzh_manages\vendor\workerman\webman-framework\src\support\App.php(124): Workerman\Worker::runAll()
#34 D:\www\xzzh\xzzh_manages\start.php(4): support\App::run()
#35 {main}

[修复]无法生成缓存,php8.0提示 变量不存在,

src/Controller.php
第:230行-234行

$pathArr   = explode("@", urldecode($item['menuKey']));
                                        $classPath = $pathArr[0];
                                        $method = $pathArr[1];
                                        $apiDetail = (new ParseApiDetail($config))->renderApiDetail($appKey,$classPath,$method);

应改为:
$apiDetail = (new ParseApiDetail($config))->renderApiDetail($appKey,urldecode($item['menuKey']));

导出没有成功,没有显示新的按钮,给个官方正式的导出的吧

// (选配)接口分享功能
'share'=>[
// 是否开启接口分享功能
'enable'=>true,
// (选配)自定义接口分享操作,每个配置为一个按钮操作
'actions'=>[
[
// 操作名称
'name'=>'下载json',
// 点击时触发的方法
'click'=>function($shareData,$apiData){
// 这里面自定义实现你要的功能,此处仅简单的保存一个json文件并下载
$path = "test.json";
$jsonFile = fopen(public_path().$path, "w") or die("Unable to open file!");
$txt = json_encode($apiData);
fwrite($jsonFile, $txt);
fclose($jsonFile);
// 返回js给前端执行,内置了downloadFile方法来执行文件下载
return 'downloadFile("/'.$path.'","'.$shareData['name'].'");';
}
]
]
],

bug提交

使用搜索框出来的点击进去就会报错
7LWYLGVT7LX%G8I0VJ3F3RQ
157Z6WO4$O5S@}OE(C23ZXO

麻烦支持下data下可以被直接指向table,而不是必须存在key然后指向table

        'responses' => [
            // 成功响应体
            'success' => [
                ['name' => 'code', 'desc' => '业务代码', 'type' => 'int', 'require' => 1],
                ['name' => 'message', 'desc' => '业务信息', 'type' => 'string', 'require' => 1],
                //参数同上 headers;main=true来指定接口Returned参数挂载节点
                ['name' => 'data', 'desc' => '业务数据', 'main' => true, 'type' => 'object', 'require' => 1],
            ],

Apidoc\Returned这个name参数可以不填,反正要table直接放在data上,而不是data.data来获取到table

    #[
        Apidoc\Title("详情"),
        Apidoc\Method("GET"),
        Apidoc\Tag("已完成"),
        Apidoc\Param(name: "id", type: "integer", require: true, default: "", desc: "详情id"),
        Apidoc\Returned("",type:"array",table:"line_material",desc:"详情", replaceGlobal: true),

    ]

调试中body参数不全

在文档中定义的请求参数Body,在调试标签没有全部显示出来,少了lng和lat,其他接口也有类似情况。是哪里需要配置吗?
image
image

期待不断更新

一直在使用yapi,但越发觉得很多局限性,一直想参考swagger做个便捷的文档系统(好像Java的knife),作者实现了,支持

在 Webman-framework v1.4.9 里报错。

image

ErrorException: Calling static trait method hg\apidoc\providers\CommonService::registerApidocRoutes is deprecated, it should only be called on a class using the trait in /Users/andyzu/Desktop/webserver/test_api/config/plugin/hg/apidoc/route.php:5

希望对 配置 route.controller_suffix 配置作兼容

如果开启了thinkphp的 配置:
配置说明

// 开启控制器后缀
'controller_suffix'     => true,

对应文件 /app/api/controller/IndexController 自动适配的地址就变成了 /api/indexController 而不是 /api/index

所以希望可以通过实时读取配置,或者在配置文件中主动配置的方式来兼容这种后缀模式。

导出json,文件内容为{"code":500,"msg":"方法不存在","data":[]}

我是直接粘贴的手册中的配置

// (选配)接口分享功能
'share'=>[
    // 是否开启接口分享功能
    'enable'=>true,
    // (选配)自定义接口分享操作,每个配置为一个按钮操作
    'actions'=>[
        [
            // 操作名称
            'name'=>'下载json',
            // 点击时触发的方法
            'click'=>function($shareData,$apiData){
                // 这里面自定义实现你要的功能,此处仅简单的保存一个json文件并下载
                $path = "test.json";
                $jsonFile = fopen(public_path().$path, "w") or die("Unable to open file!");
                $txt = json_encode($apiData);
                fwrite($jsonFile, $txt);
                fclose($jsonFile);
                // 返回js给前端执行,内置了downloadFile方法来执行文件下载
                return 'downloadFile("/'.$path.'","'.$shareData['name'].'");';
            }
        ]
    ]
],

启用密码访问报错

======== 环境 ========
使用框架:laravel9.26.1
PHP版本:8.0.2
ApiDoc版本:5.2

======== 复现步骤 ========

  1. 打开 config/apidoc.php 找到 auth 配置项将 enable 设置为 true
  2. 访问 域名/apidoc 即出现 500 错误,提示:不存在Token

======== 截图========
image

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.