Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

api or web Laravel 5.3

I have a question that might sound silly to you so please forgive me.

I am not sure when do I use the routes/api.php file.

If I want to delete a record from a datatable with ajax, do I need to create a separate controller and put the route in api.php or can I use the same controller I use for everything else and put the route in web.php?

like image 455
Sigal Zahavi Avatar asked Sep 10 '16 09:09

Sigal Zahavi


People also ask

What is the difference between API and web in Laravel?

In a Laravel application, you will define your “web” routes in routes/web. php and your “API” routes in routes/api. php. Web routes are those that will be visited by your end users; API routes are those for your API, if you have one.

Does Laravel have an API?

Introduction. By default, Laravel ships with a simple solution to API authentication via a random token assigned to each user of your application. In your config/auth. php configuration file, an api guard is already defined and utilizes a token driver.

Is Laravel REST API?

Laravel 9 is a full-stack web application framework with a robust and visually appealing design that is easy to use to create tradiotional web applications and modern web applications that expose REST APIs that could be consumed by front-end applications such as Angular, React or Vue. js.

Why we use API php in Laravel?

routes/api. php file is used when you want to make a Restful API . It means that you are developing the front end of your project with something else(for example: angular) and you want to develope your back end using Laravel. In that case your all routes will go in routes/api.


2 Answers

I'm not sure if you read the Laravel documentation or how much familiar you are with Laravel, but in Laravel 5.3 you have web routes and api routes in separate files.

You use api routes only for registering your api (ie if you are building a rest api service), and all routes placed there will be prefixed by default with /api. So ie if you define a route /user inside the api file, it will be automatically prefixed with /api, so your end point would be www.yourapplication.com/api/user.

If you are not building a rest api service or anything similar dont use this file at all, use the web file for defining all of your application routes.

Also consider visiting Laracast website, as they have a nice introduction to new changes in Laravel 5.3 including web and api routes. Hope this helps you.

like image 200
bernadd Avatar answered Oct 19 '22 21:10

bernadd


All that routes placed in api.php will be prefixed by /api, which was also mentioned by bernadd, there are other differences: in this link(https://mattstauffer.co/blog/routing-changes-in-laravel-5-3) you can find the difference between api and web in laravel code:

in App\Providers\RouteServiceProvider:

public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        //
    }

    protected function mapApiRoutes()
    {
        Route::group([
            'middleware' => ['api', 'auth:api'],
            'namespace' => $this->namespace,
            'prefix' => 'api',
        ], function ($router) {
            require base_path('routes/api.php');
        });
    }

    protected function mapWebRoutes()
    {
        Route::group([
            'namespace' => $this->namespace, 'middleware' => 'web',
        ], function ($router) {
            require base_path('routes/web.php');
        });
    }

in App\Http\Kernel.php in "protected $middlewareGroups" you can see this:

 '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,
        ],

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

And: in config\auth.php : In this file's Comments you can clearly find out the difference between default "auth"('guard' => 'web') vs "auth:api"

like image 9
Amirhossein72 Avatar answered Oct 19 '22 19:10

Amirhossein72