Спрятать метод Рестлера от Swagger-UI

Используя Restler 3.0.0-RC6, который внутренне упаковывает swagger-ui, у меня есть метод API, определенный так:

<?php

namespace v1:

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

А потом все мои классы, которые я включаю через Рестлера addAPIClass расширить этот класс PostgreSQL. Это означает, что при запуске swagger каждый API-интерфейс показывает функцию fetchArray. Я бы хотел, чтобы этот метод не появлялся в документации по сваггерам, так как он не является частью API. Другие "вещи" на веб-сайте также используют класс, поэтому я не могу изменить модификатор из открытого.

Какой правильный синтаксис скрывает этот метод от веб-страницы Swagger-UI?

2 ответа

Решение

Есть два способа добиться этого,

Одним из них является отметка fetchArray метод как частный с @access private комментарий. Это удалит fetchArray из всех URL-адресов API, сохраняя доступность 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();
  }
}
Другие вопросы по тегам