在后台调用不同的 slim 框架 URL/REST API?
Call different slim framework URL/REST API under the hood?
假设我有两个 REST 服务:
1) 一个仅用于身份验证目的 -> 这有 /login 端点
2) 第二个用于其他目的 -> 这也有一个 /login 端点,但我想在后台调用服务 1 的 /login 端点。
示例端点:
1) 服务#1 POST http://service1.com/login (请求正文有 'email' & 'pass')
2) 服务 # 2 POST http://service2.com/login(应该通过传递完整的请求对象来调用服务 # 1 的 /login,在后台)
理想情况下,最终用户根本不会知道服务#1。这是要求。
这样的结构可行吗?
如果不是,我能为此做些什么?只是简单的重定向?
注意:- 两项服务均使用 Slim Framework 实现
您可以使用 Guzzle 来代理整个 Request 对象(通过修改 Uri),因为 Slim 3 和 Guzzle 都实现了 PSR-7。
示例:
<?php
require_once "../vendor/autoload.php";
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
use GuzzleHttp\Client as GuzzleClient;
// Create and configure Slim app
$config = ['settings' => [
'addContentLengthHeader' => false,
'displayErrorDetails' => true,
]];
$app = new App($config);
$app->post('/login', function (Request $request, Response $response) {
$guzzleClient = new GuzzleClient();
$uri = $request->getUri();
$uri = $uri->withHost('domain2.com');
$requestProxy = $request->withUri($uri);
$responseFromRemote = $guzzleClient->send($requestProxy);
return $responseFromRemote;
});
// Run app
$app->run();
假设我有两个 REST 服务:
1) 一个仅用于身份验证目的 -> 这有 /login 端点
2) 第二个用于其他目的 -> 这也有一个 /login 端点,但我想在后台调用服务 1 的 /login 端点。
示例端点:
1) 服务#1 POST http://service1.com/login (请求正文有 'email' & 'pass')
2) 服务 # 2 POST http://service2.com/login(应该通过传递完整的请求对象来调用服务 # 1 的 /login,在后台)
理想情况下,最终用户根本不会知道服务#1。这是要求。
这样的结构可行吗?
如果不是,我能为此做些什么?只是简单的重定向?
注意:- 两项服务均使用 Slim Framework 实现
您可以使用 Guzzle 来代理整个 Request 对象(通过修改 Uri),因为 Slim 3 和 Guzzle 都实现了 PSR-7。
示例:
<?php
require_once "../vendor/autoload.php";
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
use GuzzleHttp\Client as GuzzleClient;
// Create and configure Slim app
$config = ['settings' => [
'addContentLengthHeader' => false,
'displayErrorDetails' => true,
]];
$app = new App($config);
$app->post('/login', function (Request $request, Response $response) {
$guzzleClient = new GuzzleClient();
$uri = $request->getUri();
$uri = $uri->withHost('domain2.com');
$requestProxy = $request->withUri($uri);
$responseFromRemote = $guzzleClient->send($requestProxy);
return $responseFromRemote;
});
// Run app
$app->run();