Используя Restler 3.0.0-RC6, который внутренне упаковывает swagger-ui, у меня есть метод API, определенный так:
<?php
namespace v1:
class PostgreSQL {
public function fetchArray($sql, $args = null) {
А потом все мои классы, которые я включаю через Рестлера addAPIClass
расширить этот класс PostgreSQL. Это означает, что при запуске swagger каждый API-интерфейс показывает функцию fetchArray. Я хотел бы иметь этот метод не появляются в документации Swagger, поскольку это на самом деле не является частью API. Другие «вещи» на веб-сайте также используют класс, поэтому я не могу изменить модификатор из открытого.
Каков правильный синтаксис, чтобы скрыть этот метод от веб-страницы swagger-ui?
Есть два способа добиться этого,
Одним из них является отметка 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();
}
}