【问题标题】:Slim Framework : Call internal API RESTSlim 框架:调用内部 API REST
【发布时间】:2020-03-20 13:24:00
【问题描述】:

我在我的项目上创建了 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 调用......

  • 还有其他方式使用内部 API REST 吗?

  • 通过 CURL 调用而不是 mocking 更好吗?

  • 是否可以对同一项目中的 API REST 进行多次 HTTP 调用? (我猜没有)

提前致谢!

【问题讨论】:

  • 我不认为你在这里做一个真正的 HTTP 调用......这是一个模拟的,不是吗?
  • 是的,但我读到我们应该只在测试中使用模拟,而不是在生产中。这就是我尝试使用 Curl 的原因...
  • 我记得为什么我首先选择使用 mock:对于 GET curl,我得到一个“414 Request-URI Too Long”。使用模拟时,相同的查询返回 200 OK。我无法更改 apache 参数,也无法将 GET 转换为 POST,所以我完全被 curl 阻止了...... :(
  • 我认为在这里使用模拟请求非常有意义。应该也便宜。你在哪里读的不好?
  • stackoverflow.com/a/1211795/7926959 stackoverflow.com/q/367308/7926959 它说模拟仅用于测试而不用于生产。如果您查找“不要在生产中模拟”,那么网上还有其他主题。所以是的,仍然不知道如何使用这个内部 API...

标签: php rest api slim internals


【解决方案1】:

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

模拟环境对象仅在编写单元测试时有用。

这排除了在生产环境中使用模拟,这意味着我必须使用 cURL 来使用内部 API。我为 PHPUnit 测试保留了我的函数。

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      • 1970-01-01
      相关资源
      最近更新 更多