Предположим, у меня есть две службы REST:
1) только для аутентификации -> Это имеет / конечную точку входа
2) секунда для других целей -> У этого также есть конечная точка / login, но я хочу вызвать конечную точку службы 1 / login под капотом.
Образцы конечных точек:
1) Сервис № 1 ПОСТ http://service1.com/login (В теле запроса есть «электронная почта» & ‘проходить’)
2) Служба № 2 ПОСТ http://service2.com/login (следует вызвать службу # 1’s / 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();
Других решений пока нет …