본문 바로가기
Framework/Laravel Framework

[Laravel] api.php 와 web.php의 차이점?

by 원동호 2021. 7. 8.
반응형

구성 : Laravel Framework 8.46

 

라라벨 routes 디렉토리의 라우터 기능을 하는 파일이 두가지 있다.(api.php , web.php)

 

1. web.php 주석을 보면 아래와 같다.

| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!

web 경로를 등록 할 수 있고 RouteServiceProvider에 의해 로드되며
web 미들웨어 그룹을 포함 한다고 한다.

 

2. api.php 주석을 보면 아래와 같다.

| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!

API 경로를 등록 할 수 있고 RouteServiceProvider에 의해로드되며
api 미들웨어 그룹이 할당된다고 한다.

정리하면 web.php 파일은 web 경로를 등록하고 api.php 파일은 API 경로를 등록하면 된다고 한다.

 

주석에서 언급한 RouteServiceProvider을 살펴 보겠다.

※ ServiceProvider에 대한 상세한 내용은 아래 document에 잘 설명되어있으니 생략하겠다.

https://laravel.kr/docs/8.x/providers

 

 

app\Providers\RouteServiceProvider.php

 public function boot() {
        $this->configureRateLimiting();
		
        $this->routes(function () {
            // URL 요청시 prefix로 api가 포함되면 middleware api를 거치게 되고
            // 경로는 routes/api.php 파일을 참조한다고 한다.
            Route::prefix('api')
                ->middleware('api')
                ->namespace($this->namespace)
                ->group(base_path('routes/api.php'));
	    // 그렇지 않은 URL 요청들은 middleware web을 거치게 되고
            // 경로는 routes/web.php 파일을 참조한다고 한다.
            Route::middleware('web')
                ->namespace($this->namespace)
                ->group(base_path('routes/web.php'));
        });
 }

 

다음은 위 middleware가 정의되어있는 파일을 확인해 보겠다.

 

app\Http\Kernel.php

.
.
.

	protected $middlewareGroups = [
    	// web middleware는 쿠키, 세션 인증, csrf, 모델 바인딩을 클래스를 포함한다.  
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            // \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            // api middleware는 모델 바인딩 클래스를 포함한다.  
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];
.
.
.

 

위 내용을 정리해보면

 

web.php 

web session(Stateful), CSRF보호 및 쿠키 암호화 Middleware가 포함되기 때문에 Front단(view) 요청을 작성한다.

 

api.php

Stateless한 요청을 작성하되 추가로 API 토큰을 구성해주면 될것 같다.

 

여타 프레임워크도 그렇듯이 구성하는 방법은 자유롭게 자신이 정의한 규칙이나 프레임워크에서 기본적으로 정의해준 규칙을 따라 유지보수가 편한 방법으로 좋은 코드를 짜는게 중요한것 같다.

 

 

반응형

댓글