Giter Club home page Giter Club logo

apidog's People

Contributors

daodao97 avatar daydaygo avatar ice-leng avatar jobinli avatar kangk2 avatar limingxinleo avatar lybc avatar pandaliu-1111 avatar sy-records avatar tw2066 avatar v8oo00 avatar xingxingso 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  avatar  avatar

apidog's Issues

required的判定

public function setRequire()
{
$this->required = strpos($this->rule, 'required') !== false;
return $this;
}

此处的 required 判定是否加上 | 符号比较好?因为像 required_if 之类的规则,会在 swagger-ui 前端就被拦截提交,不好做测试。不知 swagger 是否能实现这种关联检测的判定。

关于自定义错误提示

如果想对参数某一规则做地定义错误描述,是否只能通过callback的方式来检验?如 required 规则,我希望只提示说 参数错误 而不提示具体的字段名称。

怎样配置结果示例 example

源码里面,将 example 设置成了 字段 type 。。。可是需要在接口文档里显示示例数据,应该肿么写 ApiResponse?
image

image

request header 请求首字符大写问题

在demo中,对于传入的header注解:@Header(key="token|接口访问凭证", rule="required")。当进行header规则验证的时候,会将该key的首字符大写。
ValidationApi.php:128
$real_headers[implode('-', array_map('ucfirst', explode('-', $key)))] = $val;
因此注解中@Header(key="token|接口访问凭证", rule="required") 如果首字母是小写的,会报错:
[ERROR] 接口访问凭证 字段是必须的[69] in /var/workspace/hyperf-skeleton/vendor/daodao97/apidog/src/Middleware/ApiValidationMiddleware.php.
原因是token首字母是小写,所以找不到。
综上:
在注解header中,key的首字母必须大写。demo中是小写的。

枚举问题

你好大佬,目前想使用你得插件,遇到个问题,在@ApiResponse如何定义枚举型啊

  • "role": { "enum": "1|2|3", "type": "string","description": "角色" },是这样写嘛

翻译问题

错误提示信息怎么要做多语言,怎么实现啊

[BUG]生成的文档没有内容,但接口可以访问

// 当你有多个 http server 时, 可以在输出文件的名称中增加 {server} 字面变量
// 比如 /public/swagger/swagger_{server}.json

开启多服务时必须配置成 /public/swagger/swagger_{server}.json。每个服务会生成一次wagger.json,如果是/public/swagger/swagger.json,最后一次服务会覆盖掉之前的。

自定义server name,无法生该控制器的API文档

/**
 * @ApiServer(name="admin")
 * @ApiController(prefix="admin/passport", tag="授权登录", server="admin")
 * @Middleware(CorsMiddleware::class)
 */

测试,路由是生效的,但没有生成该控制器的API文档

看了一下代码,应该是只是生成了 http 的文档:
$router = $container->get(DispatcherFactory::class)->getRouter('http');

改成这样就可以了,希望修复一下:

        /*$router = $container->get(DispatcherFactory::class)->getRouter('http');
        $data = $router->getData();*/
        $servers = $config->get('server.servers');
        if (count($servers) > 1 && !Str::contains($output, '{server}')) {
            $logger->warning('You have multiple serve, but your apidog.output_file not contains {server} var');
        }
        foreach ($servers as $server) {
            $router = $container->get(DispatcherFactory::class)->getRouter($server['name']);
            $data = $router->getData();
            $swagger = new SwaggerJson($server['name']);

            $ignore = $config->get('apidog.ignore', function ($controller, $action) {
                return false;
            });

            array_walk_recursive($data, function ($item) use ($swagger, $ignore) {
                if ($item instanceof Handler && !($item->callback instanceof \Closure)) {
                    [$controller, $action] = $this->prepareHandler($item->callback);
                    (!$ignore($controller, $action)) && $swagger->addPath($controller, $action);
                }
            });

            $swagger->save();
        }

关于 php bin/hyperf.php apidog:ui 执行的时候,直接提示 Uncaught ReflectionException: Method index does not exist报错

PHP Fatal error: Uncaught ReflectionException: Method index does not exist in /home/vagrant/hyperf-test/vendor/hyperf/di/src/ReflectionManager.php:45
Stack trace:
#0 /home/vagrant/hyperf-test/vendor/hyperf/di/src/ReflectionManager.php(45): ReflectionClass->getMethod()
#1 /home/vagrant/hyperf-test/vendor/daodao97/apidog/src/ApiAnnotation.php(22): Hyperf\Di\ReflectionManager::reflectMethod()
#2 /home/vagrant/hyperf-test/vendor/daodao97/apidog/src/Swagger/SwaggerJson.php(76): Hyperf\Apidog\ApiAnnotation::methodMetadata()
#3 /home/vagrant/hyperf-test/vendor/daodao97/apidog/src/BootAppConfListener.php(63): Hyperf\Apidog\Swagger\SwaggerJson->addPath()
#4 [internal function]: Hyperf\Apidog\BootAppConfListener->Hyperf\Apidog{closure}()
#5 /home/vagrant/hyperf-test/vendor/daodao97/apidog/src/BootAppConfListener.php(65): array_walk_recursive()
#6 /home/vagrant/hyperf-test/vendor/hyperf/event/src/EventDispatcher.php(48): Hyperf\Apidog\BootAppConfListener->process()
#7 /home/vagrant/hyperf-test/vendor/hyperf/framework/src/ApplicationFac in /home/vagrant/hyperf-test/vendor/hyperf/di/src/ReflectionManager.php on line 45

@Header的bug

@Header(key="Authorization|接口访问凭证", rule="required")
在有传Authorization的情况,依然会提示。原因是getHeaders会把得到key是小写

        if ($header_rules) {
            $headers = $request->getHeaders();
            $headers = array_map(function ($item) {
                return $item[0];
            }, $headers);
            [
                $data,
                $error,
            ] = $this->check($header_rules, $headers, $controllerInstance);
            if ($data === null) {
                return [
                    $field_error_code => $error_code,
                    $field_error_message => implode(PHP_EOL, $error),
                ];
            }
        }

使用apidog时为什么我的路由会冲突?

一开始这个问题其实并不严重 但是当我需要使用中间件来通过token 验证用户时 发现了这个问题
`
/**

  • @postapi(path="/refresh_token", description="刷新token")
  • @ApiResponse(code="200", description="请求成功", schema={
  • "qid":"5fe97d21bae1a-B129B32C-82F054E3",
  • "code":200,
  • "data":{
  • "token|token":"",
    
  • "exp|过期时间": 7200,
    
  • },
  • "msg":"操作成功",
  • "_": 1609137441
  • })
    */
    public function refresh_token(){

}

Router::post('/refresh_token', 'App\Controller\UserController@refreshToken', ['middleware' => $middleware]);
`

代码如上

错误信息:
PHP Fatal error: Uncaught FastRoute\BadRouteException: Cannot register two routes matching "/refresh_token" for method "POST" in /home/www/apitest.qiduo.net/vendor/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php:86

文档外网访问

UICommand -> handle->host=>127.0.0.1 文档启动外网无法访问 修改为0.0.0.0时 外网能访问 但是文档页面访问的0.0.0.0:9939/swagger.json 需要页面手动将0.0.0.0改成访问地址才能正常访问

Api参数校验中间件只对server名称为http的有效

    public function __construct(ContainerInterface $container, HttpResponse $response, RequestInterface $request, ValidationApi $validation)
    {
        $this->container = $container;
        $this->response = $response;
        $this->request = $request;
        $this->validationApi = $validation;
        parent::__construct($container, 'http');
    }

请问可以对 ApiResponse 下schema 里面的值进行描述的么?

/**
* @postapi(path="login", description="添加一个用户")
* @Header(key="token|接口访问凭证", rule="required")
* @formdata(key="username|用户名或者手机号", rule="required")
* @formdata(key="password|密码", rule="required")
* @ApiResponse(code="-1", description="参数错误")
* @ApiResponse(code="0", description="成功", schema={"id":1})
*/

请问可以对 ApiResponse 下schema 里面的值进行描述的么?谢谢

当前支持注解路由吗?

swagger是生成是有路由地址的,但是postman请求返回not found、
需要在config/routes.php 添加相同的路由 才可以请求

怎么自定义验证规则?

根据hyper文档写得自定义验证规则添加,识别不了
BadMethodCallException:Method Hyperf\Validation\Validator::validateFoo does not exist.(236) in /www/wwwroot/hyperf/vendor/hyperf/validation/src/Validator.php

[bug]关于注解路由的问题。

1.ApiController中定义prefix不生效,只有在path中定义绝对路径才可以,比如定义path="/token",可以通过xxx.com/path访问,但是定义path="token",xxx.com/prefix/path,无法访问。
2.不同的prefix定义相同的path会提示路由重复,具体如图。
621585623458_ pic_hd

无法更新swagger.json

环境:php7.4,hyperf 2.0.11 ,daodao97/apidog 1.5.17

按照部署文档:

1、有多个servers ,在apidog.php配置了

1640167224(1)

2、整个项目的注解就只用了部署文档的DemoController:

1640167363(1)

顺便提一句:DemoController 没有引用完全,缺失

  • use Hyperf\Apidog\Annotation\ApiDefinitions;
  • use Hyperf\Apidog\Annotation\ApiDefinition;

3、php bin/hyperf.php start 时,有生成 swagger_http.json文件,但无更多内容(路由,参数等信息)

1640167474(1)

请问这是为什么,谢谢!

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.