2017-06-20 14 views
1

DINGOで作成したAPISがASYNCを実行できるようにしたい。現在のところ、sleepコマンドでAPIを要求しようとすると別のAPIを呼び出すと、スリープ時間を過ぎてリクエストが渡されたときに2番目のAPIが値を返すため、私のAPIは同期しています。これは私がテストに使用するコードです:Dingo APIを使用したLaravel 5.4の非同期

まずAPIルート:

public function checkLongRunning(Request $request){ 
     $data = $request->all(); 
     if($data['check'] == 1){ 
      sleep(5); 
      return response()->json(['error' => 'slept in 5 secs'], 500); 
     }else{ 
      return response()->json(['error' => 'bad request'], 500); 
     } 
    } 

第2のAPIのルート:

public function checkLongRunning2(Request $request){ 
     $data = $request->all(); 
     if($data['check'] == 1){ 
      return response()->json(['error' => 'OK'], 500); 
     }else{ 
      return response()->json(['error' => 'asd'], 500); 
     } 
    } 

私は私のAPIは(Laravel 5.4にDINGOでビルドすることができますとにかくあり)ASYNCを実行します(最初のAPI要求がスリープしているときに別のAPIを要求できます)。

ありがとうございます。

答えて

0

必要な作業(認証など)をすべて完了した直後にリクエストに応答し、応答が返された後でコードを実行できるようにエンドポイントにミドルウェアを添付する必要があります。

例:

public function terminate($request, $response) 
{ 
    sleep(2000) // place your code here. 
} 

ところで "ポストラン" ミドルウェアでapi.php

$api->post('run', function() { 
         return response()->json([ 
          "message" => "running" 
         ], 200); 
        })->middleware("postRun"); 

:あなたはミドルウェアを登録する必要があります。

関連する問題