在引擎盖下调用不同的瘦框架URL / REST API?

时间:2017-02-20 09:26:24

标签: php rest slim

假设我有两个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实现的

1 个答案:

答案 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();