簡體   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