如何使用guzzlehttp创建Hub(集中式API)?

时间:2017-01-03 09:07:32

标签: php laravel laravel-routing guzzle guzzlehttp

我正在为不同的网站创建API。但是在直接向网站发送请求之前,它将通过中间层服务器,即中央服务器,然后中央服务器将请求传递给各自的网站。表示所有请求都将转到中央服务器,然后中央服务器将与各个站点通信,请求数据将按原样传递。所有网站都是在php laravel上开发的,架构几乎相同。我找到了Guzzlehttp请求处理,如果有任何其他方式来满足要求,请告诉我,

对于laravel路由我需要为所有路由调用相同的函数 目前我有以下路线

Route::get('users', 'QuestsController@getUsers');
Route::post('lists', 'QuestsController@postLists');
Route::post('add-user', 'QuestsController@postAddUser');
Route::post('update-status', 'QuestsController@postUpdateStatus');
Route::post('delete', 'QuestsController@postDelete');

而不是调用控制器的不同方法,我想为所有路由调用相同的方法,如下面的示例

Route::get('users', 'QuestsController@central');
Route::get('add-user', 'QuestsController@central');
Route::post('delete', 'QuestsController@central');

请帮我解决。

非常感谢。

2 个答案:

答案 0 :(得分:1)

假设你想要一种方法来解决问题"将所有请求转换为一个控制器方法,你可以这样做:

Route::get('{url}', 'QuestsController@centralGet')->where('url', '.*');
Route::post('{url}', 'QuestsController@centralPost')->where('url', '.*');

现在您有两个控制器方法,它们都采用1(额外)参数,您可以使用它来进一步识别正确的响应。 控制器方法看起来像:

public function centralGet($url, Request $request){
    ...
}

public function centralPost($url, Request $request){
    ...
}

答案 1 :(得分:0)

我认为您还可以使用API​​网关https://www.nginx.com/blog/building-microservices-using-an-api-gateway/。正如Daan所写,你需要一条路线来解决所有服务的单一入口点。

然后,您可以构建服务解析程序并从感兴趣的服务获取数据。你也可以在这里缓存响应