2017-11-15 1 views
1

私はLaravel 5.3で現在動作しているルートのセットを持っています(ルートかweb.phpのどちらかです)。例えばLaravel 5:既存のweb.phpをapi.php(RESTFUL API)に変換する

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


Route::get('/post-aaron', '[email protected]'); 
Route::post('/post-aaron', '[email protected]'); 
Route::get('/aarons-posted', '[email protected]'); 
Route::get('/aaron-board', '[email protected]'); 
Route::get('/edit-aaron/{id}', '[email protected]'); 
Route::get('/edit-aaron', '[email protected]'); 

}); 

は、私は、異なるプラットフォーム間でのスケーリングのためのRESTfulなAPIを作りたいです。既存のweb.phpをapi.phpに変換するにはどうすればよいですか?

+0

あなたの 'web'ルートはHTMLを正しく返しますか?そして、この解消されたデータをJSON APIに変換する1-answerソリューションが必要ですか? –

答えて

0

これは、コントローラのコードとロジックによって異なります。ほとんどの場合、あなたのコントローラーは視界を退屈させています。たとえば、return view('aaron-board')です。 しかし、RESTfulなAPIには、return response()->json(['data' => 'users'])のようなJSON応答が必要です。

従来のWebアプリケーションを最初から計画していない場合は、それをapiに変換するのは簡単な作業ではありません。しかし、それは実行可能です。

アプリケーションの規模に応じて、APIリクエストを処理する専用のコントローラを用意したり、アプリケーションが小さい場合は現在の/同じコントローラで処理させることができます。もう一つの問題はルーティングです。ミドルウェアwebは、APIリクエストに問題を引き起こします。

ここで私は出発点として何をしますか。 Webアプリケーションの通常のリクエストと同様に、私のコントローラをAPIリクエストに応答するように調整します。

たとえば、我々は次のルートを持っているとしましょう:

// web.php 

Route::get('/users', '[email protected]'); 

そして、Googleのインデックス方法:

public function index(Request $request) 
{ 
    $users = App\User::paginate(); 

    return view('users.index', compact('users'); 
} 

私たちは、基本的に来て、要求場合JSONレスポンスを返すようにindex方法を変更することができます次のようなAPIリクエストです:

public function index(Request $request) 
{ 
    $users = App\User::paginate(); 

    if ($request->wantsJson()) { 

     return response()->json(['data' => $users]);  

    } 

    return view('users.index', compact('users'); 
} 

今すぐ私たちは同じルートをapi.phpファイルに複製します。 (返されます

  • www.example.com/api/usersを(ビューを返します)

    • www.example.com/users:

      // api.php 
      
      Route::get('/users', '[email protected]'); 
      

      これが私たちのアプリケーション二つの経路を与えますJSONレスポンス)JSONレスポンスを取得するためのAPI要求を適切なヘッダーを設定することが重要

    I'is。すなわちAccept: application/json。 CORSの設定にも注意してください。

    web.phpファイルのルートにwebミドルウェアを追加しています。これは問題ありませんが、不要です。ミドルウェアはすでにRouteServiceProviderによって追加されており、方法mapWebRoutesthis fileにチェックしてください。 mapApiRoutes()は、api.phpファイルに定義されているすべてのルートにapiミドルウェアを追加することもわかります。

  • 関連する問題