2016-11-28 4 views
2

Im создание API в Laravel 5.3. В моем routes/api.php файле у меня есть 3 конечных точек:Перенаправление маршрута в Ларавел 5.3

Route::post('/notify/v1/notifications', 'Api\Notify\v1\[email protected]'); 

Route::post('/notify/v1/alerts', 'Api\Notify\v1\[email protected]'); 

Route::post('/notify/v1/incidents', 'Api\Notify\v1\[email protected]'); 

Некоторые услуги будут называть эти маршруты непосредственно, однако, когда приходит запрос от некоторых услуг, входные данные должны быть обработаны, прежде чем он может поразить эти конечные точки.

Например, если запрос поступает из JIRA, мне необходимо обработать входные данные до того, как они попадут в эти конечные точки.

Im думая, что самый простой способ сделать это будет иметь 4-ую конечную точку, как показано ниже:

Route::post('/notify/v1/jira', 'Api\Notify\v1\[email protected]'); 

Идея заключалась в том, чтобы поразить /notify/v1/jira конечную точку, имеют процессу formatJiraPost метод ввода, а затем вперед просьба указать /notify/v1/notifications (/alerts, /incidents).

Как я могу указать конечную точку /notify/v1/jira направить запрос на конечную точку /notify/v1/notifications?

Вы видите лучший способ сделать это?

+2

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

+0

Согласитесь с @TheFallen. Использование промежуточного программного обеспечения для проверки «Требования к предварительной обработке» может быть вашим лучшим вариантом. Хотя, одна вещь, которую следует учитывать, заключается в том, чтобы обернуть все 3 конечных точки внутри промежуточного программного обеспечения, чтобы добавить некоторые издержки времени выполнения. Из-за «проверки всех запросов», чтобы увидеть, нужна ли им предварительная обработка. – scottevans93

ответ

2

В зависимости от того, как ваше приложение будет работать, вы всегда можете указать свои услуги, указывающие на /notify/v1/jira, а затем выполнить обработку, как вы предлагали.

Другая альтернатива заключается в том, что служба JIRA указывает на те же маршруты, что и все другие службы, но использует Before middleware group для предварительной обработки ваших данных. Что-то вроде

Route::group(['middleware' => ['verifyService']], function() { 

    Route::post('/notify/v1/notifications', 'Api\Notify\v1\[email protected]'); 

    Route::post('/notify/v1/alerts', 'Api\Notify\v1\[email protected]'); 

    Route::post('/notify/v1/incidents', 'Api\Notify\v1\[email protected]'); 

}); 

Вы можете проверить свое промежуточное программное обеспечение.

<?php 

namespace App\Http\Middleware; 

use Closure; 

class verifyService 
{ 

    public function handle($request, Closure $next) 
    { 
     //You could use switch/break case structure 
     if (isJIRA($request)) { 

      //Do some processing, it could be outsourced to another class 
      //$JiraPost = new formatJiraPost($request); 

      //Keep the requesting going to the routes with processed data 
      return $next($request); 
     } 

     //You could add extra logic to check for more services. 

     return $next($request); 
    } 

    protected function isJIRA(Request $request){ 
     //Logic to check if it is JIRA. 
    } 
}