Slim 框架:调用内部 API REST

Slim Framework : Call internal API REST

我已经在我的项目上创建了 API REST 集合,这些集合将在内部(在同一个 PHP 项目中)和外部(从其他项目)调用

我的问题是:使用内部 API REST 的最佳方式是什么?

我创建了一个函数以这种方式模拟调用:

        // init mock 
        $env = Environment::mock([
            'REQUEST_METHOD'     => 'GET',
            'REQUEST_URI'        => $path,
            'QUERY_STRING'       => $urlParams,
            'HTTP_AUTHORIZATION' => 'Bearer '.$token
            ]);
        $req = Request::createFromEnvironment($env);

        // Instantiate CandidateRoute
        $app = (new $class)->get();
        $app->getContainer()['request'] = $req;
        // Run slim inst
        ob_flush();
        // Run Slim
        $response = $app->run(true);

这是可行的,但它最终仍然是一个 HTTP 调用...

提前致谢!

编辑:我认为这里的问题是架构。如果您将业务登录名放入 "controllers" 中,则很难重用此代码。相反,您可以将业务逻辑放入服务中 类 并在不同的客户端(如控制器、CLI 或单元测试)中重新使用该服务。

基于 Slim 文档: http://www.slimframework.com/docs/v3/cookbook/environment.html

Mock Environment objects are only useful when writing unit tests.

这排除了在生产环境中使用 mock,这意味着我将不得不使用 cURL 使用内部 APIs。我保留了用于 PHPUnit 测试的函数。

我决定添加一个 callApi() 函数来发送 GET/POST/PUT cURL 请求,就像 API 是外部的一样,因为我找不到更好的解决方案... 我在使用 GET 时仍然遇到 414 Request-URI Too Long 的问题,但那将是另一个主题。