在后台调用不同的 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();