用于使用内部 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();
}

A类

<?php 
class A{
    public function x(){
       API_A::getInstance()->x();
    }
    public function Z(){
       API_A::getInstance()->Z();
    }
}

B类

<?php 
class B{
    public function x(){
       API_B::getInstance()->x();
    }
    public function Z(){
       API_B::getInstance()->Z();
    }
}

接口类:

B类

<?php 
class API_B{
    public function x(){
       // CODE HERE
    }
    public function Z(){
       // CODE HERE
    }
}

在此类问题中,最好的方法是在控制器中使用准系统代码。这意味着在控制器部分,您将包括

  • 清理用户输入,可以在本地或通过导入功能进行。
  • 将合法输入传递给导入的函数,该函数是
  • 将内部函数的输出格式化为 JSON (etc) 并输出。

现在,问题出现了在哪里保留内部功能。它可能是模型的一部分,但我不喜欢这样,因为我倾向于使用 gii 一次又一次地重新生成模型。

一个好方法是创建组件,我通常最终会为每个 API 控制器创建一个组件,有时甚至是跨多个控制器的共享组件,具体取决于应用程序大小。

下面是控制器操作代码示例

public function actionProcess1(){
     $input = appcomponentsvalidator::sanitize(Yii::$app->request->post(),"model");
     $output = appcomponentsprocessor::process1($input['var1'],$input['var2']);
     appcomponentsformatter::getJson($output);
}

相关内容

最新更新