2017-02-20 25 views
0

让我们假设我有两个静止服务:在底层调用不同的超薄框架URL/REST API?

1)一个用于认证目的只有 - >这有/登录端点

2)第二个用于其他目的 - >这也有一个/登录端点,但我想打电话给服务1的/登录端点。

样品端点:

1)服务#1 POST http://service1.com/login(请求身上有 '电子邮件' & '通行证')

2)服务#2 POST http://service2.com/login(应该叫服务#1 /登录传递完整的请求对象,引擎盖下)

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

这种结构可能吗?

如果不是最好的,我可以为此做些什么?只是简单的重定向?

注: - 这两个服务使用超薄框架

回答

1

您可以使用狂饮来代理整个Request对象既苗条3实现(通过修改URI)和狂饮实现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(); 
+0

由于它的正常工作与一个小的修改'$响应 - > getBody() - >写($ responseFromRemote-> getBody());' –