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 调用...
任何其他内部消费方式API REST ?
通过 CURL 调用比模拟更好吗?
可以在同一个项目中对 API REST 进行多次 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 的问题,但那将是另一个主题。
我已经在我的项目上创建了 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 调用比模拟更好吗?
可以在同一个项目中对 API REST 进行多次 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 的问题,但那将是另一个主题。