假设我有两个REST服务:
1)仅用于验证目的 - >这有/ login endpoint
2)其他目的的第二个 - >这也有一个/ login端点,但我想在引擎盖下调用服务1的/登录端点。
示例端点:
1)服务#1 POST http://service1.com/login(请求正文'电子邮件'&'传递')
2)服务#2 POST http://service2.com/login(应通过传递完整的请求对象来调用服务#1' s / login)
理想情况下,最终用户根本不了解服务#1。这是要求。
这种结构可能吗?
如果不是我能做的最好的事情呢?只是简单的重定向?
注意: - 这两项服务都是使用Slim Framework实现的
答案 0 :(得分:1)
你可以使用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();