繁体   English   中英

从swagger-ui隐藏Restler方法

[英]Hide Restler method from swagger-ui

使用内部打包swagger-ui的Restler 3.0.0-RC6,我定义了一个API方法,如下所示:

<?php

namespace v1:

class PostgreSQL {
    public function fetchArray($sql, $args = null) {

然后,我通过Restler的addAPIClass包含的所有类都对该PostgreSQL类进行了扩展。 这意味着在运行时,每个单独的API都会显示一个fetchArray函数。 我不想让该方法没有出现在招摇的文档中,因为它实际上不是API的一部分。 网站上的其他“事物”也使用该类,因此我不能从公共更改修饰符。

从swagger-ui的网页中隐藏该方法的正确语法是什么?

有两种方法可以实现此目的,

一种是使用@access private注释将fetchArray方法标记为私有。 这将从所有API网址中删除fetchArray ,同时使fetchArray仍可被PHP访问

您遇到的问题是,您不想将PostgreSQL修改为由作曲家维护的框架的一部分。 而不是直接从基类扩展它,而是使用一个中间类,该中间类添加注释,然后扩展该类,如下所示

class Base {
    public function fetchArray(){
        return array();
    }
}

class Intermediary extends Base {
    /**
     * @access private
     */
    public function fetchArray(){
        return array();
    }
}

class MyApi extends Intermediary { //instead of extends Base
    //other api methods here
    //see in the explorer to note that fetchArray is no longer listed
}

另一种方法是使用

use Luracast\Restler\Explorer;
Explorer::$excludedPaths = array('myapi/fetcharray','another/fetcharray');

您不应从数据层类扩展API层类。 只需使用数据层类。

class DataLayer
{
  public function fetchArray()
  {
    return array();
  }
}

class ApiLayer
{
  private $dl;

  function __construct()
  {
    $this->dl = new DataLayer();
  }

  public function getAll()
  {
    return $this->dl->fetchArray();
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM