2017-01-03 2 views
2

Я создаю API для разных сайтов. но прежде чем передавать запрос на сайт dirctly, он будет проходить через сервер среднего уровня, то есть центральный сервер, а затем центральный сервер будет передаваться по запросу на соответствующий веб-сайт. означает, что все запросы будут отправляться на центральный сервер, тогда центральный сервер будет связываться с соответствующими сайтами, и данные запроса будут проходить, как есть. Все веб-сайты разработаны на php laravel, архитектура почти такая же. Я нашел Guzzlehttp для обработки запроса, если есть какой-либо другой способ, чтобы удовлетворить требования, пожалуйста, дайте мне знать,Как я могу использовать guzzlehttp для создания концентратора (централизованного API)?

также для маршрутизации Laravel мне нужно позвонить тому же функции для всех маршрутов В настоящее время я имею следующие маршруты

Route::get('users', '[email protected]'); 
Route::post('lists', '[email protected]'); 
Route::post('add-user', '[email protected]'); 
Route::post('update-status', '[email protected]'); 
Route::post('delete', '[email protected]'); 

вместо вызова различных методов управления, я хочу назвать тот же метод для всех маршрутов, как следующий пример

Route::get('users', '[email protected]'); 
Route::get('add-user', '[email protected]'); 
Route::post('delete', '[email protected]'); 

пожалуйста, помогите мне для решения.

большое спасибо.

+0

Мне непонятно, какие у вас проблемы. Вы указываете, что хотите использовать одни и те же методы контроллера для разных запросов, и вы предоставляете код, который заставит его работать. В чем проблема? –

+0

@DaanMeijer Я думаю, что он ожидает какой-то прокси-сервер, который выполняет некоторые работы и перенаправляет на разные серверы для ответа –

+0

, вы можете проверить маршрутизацию поддоменов в laravel, а 'middlewares' можно использовать для этого, если его внутри одного приложения –

ответ

1

Предположив вы хотите способ «узким местом» все запросы в методе один контроллер, вы можете сделать что-то вроде этого:

Route::get('{url}', '[email protected]')->where('url', '.*'); 
Route::post('{url}', '[email protected]')->where('url', '.*'); 

Теперь у вас есть два метода контроллера, который и принимают (дополнительный) параметр 1, который вы можете использовать для дальнейшего определения правильного ответа. методы контроллера будет выглядеть примерно так:

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

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

спасибо за ответ, я тоже пробовал этот способ, но здесь я не могу применить промежуточное программное обеспечение для проверки маршрута, он будет принимать любой маршрут, либо он действителен, либо нет. Я хочу отклонить маршруты, которых не существует другой способ для этого: Маршрут :: любой ('{url}', 'RequestController @ redirect') -> где ('url', '([Az \ d - \/_] +). ');? –

+0

Ну, вы можете бросить «Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException» при доступе к маршруту, который не дает никаких результатов. –

+0

Я думаю, что я не совсем понимаю, в чем проблема. Вы хотите применить фильтрацию маршрута или нет? Вы хотите, чтобы каждый URL-адрес попадал в вашу функцию узких мест, или вы хотите указать, какой URL-адрес должен быть там? –

0

Я думаю, что кроме того, вы могли бы хотеть использовать шлюз https://www.nginx.com/blog/building-microservices-using-an-api-gateway/ API. Как писал Даан, вам нужен один маршрут, который будет разрешать все точки доступа.

Затем вы можете создать служебный преобразователь и получить данные из заинтересованной службы. Вы также можете кэшировать ответ здесь.

+0

Нет, я не могу использовать стороннюю api –

+0

Нет. Это не об использовании стороннего API. Его концепция шлюза. Насколько я вижу, вы создаете API Gateway. Это слой, который извлекает весь запрос и собирает информацию из разных служб. Вы можете использовать его как дорожную карту для сервисов и как слой кэширования для ответов всех запросов. –

+1

уверен, что я возьму от него некоторое представление, спасибо –

Смежные вопросы