【问题标题】:Call different slim framework URL/REST API under the hood?在后台调用不同的苗条框架 URL/REST API?
【发布时间】:2017-02-27 06:16:01
【问题描述】:

假设我有两个 REST 服务:

1) 一个仅用于身份验证 -> 这具有 /login 端点

2) 第二个用于其他目的 -> 这也有一个 /login 端点,但我想在后台调用服务 1 的 /login 端点。

示例端点:

1) 服务#1 POST http://service1.com/login(请求正文包含“电子邮件”和“通过”)

2) 服务#2 POST http://service2.com/login(应该通过传递完整的请求对象调用服务#1 的 /login,在后台)

理想情况下,最终用户根本不会知道服务 #1。这是要求。

这种结构可能吗?

如果不是我能做的最好的事情是什么?只是简单的重定向?

注意:- 这两个服务都是使用 Slim 框架实现的

【问题讨论】:

    标签: php rest slim


    【解决方案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();
    

    【讨论】:

    • 感谢它通过一个小的修改工作正常$response-&gt;getBody()-&gt;write($responseFromRemote-&gt;getBody());
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多