Программное решение для использования внутреннего API и использования внешнего API, если не было

Я создаю приложение с API, API является отдельным модулем в фреймворке Yii.

Мне нужен способ получить доступ к API непосредственно в приложении и одновременно использовать его как внутренний API; если модуль не существует в приложении, я хочу вызвать службу на сервере и получить ответ без дублирования кода.

У меня есть решение, но оно мне не нравится, потому что код дублирован. Вот мое решение.

Контроллер класса A

<?php

class controllerA{

public function actionIndex(){

$a = new A();
$a->x();

$b = new B();
$b->x();

$c = new C();
$c->x();

}

Класс А

<?php

class A{

public function x(){
API_A::getInstance()->x();
}

public function Z(){
API_A::getInstance()->Z();
}

}

Класс б

<?php

class B{

public function x(){
API_B::getInstance()->x();
}

public function Z(){
API_B::getInstance()->Z();
}

}

Классы API:

Класс б

<?php

class API_B{

public function x(){
// CODE HERE
}

public function Z(){
// CODE HERE
}

}

0

Решение

Наилучший подход к решению подобных проблем — иметь в контроллере код barebone. Это означает, что в части контроллера, вы будете включать

  • Санация пользовательского ввода, может сделать это локально или через импортированную функцию.
  • передать законный ввод импортируемой функции, которая является частью
  • отформатировать вывод внутренней функции в json (и т. д.) и вывести.

Теперь возникает вопрос, где сохранить внутренние функции. Это может быть частью модели, но я не предпочитаю этого, потому что я склонен регенерировать модели снова и снова, используя gii.

Хорошим способом является создание компонентов, обычно я делаю один компонент на контроллер API или иногда даже общий компонент для нескольких контроллеров в зависимости от размера приложения.

Ниже приведен пример кода действия контроллера

public function actionProcess1(){
$input = \app\components\validator::sanitize(Yii::$app->request->post(),"model");
$output = \app\components\processor::process1($input['var1'],$input['var2']);
\app\components\formatter::getJson($output);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector