Fan
Fan

Reputation: 1180

Building a call API project with laravel

I would like to build a call API laravel project, separate the front-end and back-end, but how?
All the API are writing in the routes/api.php, but the job that return a view still live in routes/web.php , is that normal ? if not, what should I do ?
The code like ...

routes/web.php:

Route::get('/book/{id}',function(){ return view('book.show')->with('id',$id) ;});

show.blade.php:

...
$(function(){
    $.ajax{
        url: 'api/book/{{ $id }}',
        ....
    }
});
...

routes/api.php:

//return the book data that id = {id}    
Route::get('/book/{id}','BookController@show'); 

Upvotes: 0

Views: 566

Answers (2)

Simon Davies
Simon Davies

Reputation: 3686

As @angad-dubey mentioned its good practise to separate them out so that the web deals with the front end and the api routes for ... Api calls.

I tend to separate mine further by adding an admin.php within the routes folder, so that my backend routes are also separated, Thus you don't have one file with a long list of routes to search through, and this way as shown above you can append different middleware to them and not to the others, which could cause issues in the long term

Upvotes: 0

Angad Dubey
Angad Dubey

Reputation: 5452

You are using it correctly.

One of the benefits of separating web and api routes is you have more granular control over applying middlewares.

Take a look at app/Kernel.php file:

/**
 * The application's route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

Upvotes: 1

Related Questions