OctoberCMS에서 웹 API 구현

TLTR


  • 자체 플러그인에 구현합니다.
  • Backend\Classes\Controller를 확장하여 컨트롤러를 구현합니다.
  • Plugin.php와 같은 디렉토리에 routes.php를 작성한다.

  • 개요



    여기에서는 RESTful이 아닌 Web API의 구현을 설명한다.
    RESTful API의 구현에는 OctoberCMS RESTful 플러그인를 사용하면 좋다.
    또, 뷰 템플릿으로부터 Ajax로 호출하는 엔드포인트를 갖고 싶은 경우는, OctoberCMS의 Ajax 핸들러 로서 컴퍼넌트에 구현하는 것이 표준적인 방법이다.

    배경



    일부러 별도로 Web API를 구현하는 경우는 DB에 보관한 데이터(리소스)를 작성, 취득, 변경, 삭제하는 것이 아니라, 예를 들면 이미지 파일을 생성하여 <img>src로 지정하고 싶다. 경우 등.
    RESTful 플러그인은 어디까지나 RESTful용이므로, 모델 클래스를 통한 DB 데이터의 CRUD에만 대응하고 있기 때문에, 이런 경우에는 적합하지 않다.
    또, Web API의 구현은 간단하기 때문에, 일단 파악해 두는 것만으로도 이해가 깊어져 좋다.

    구현 방법



    자체 플러그인의 적절한 디렉토리에 컨트롤러 클래스를 만듭니다.
    디렉토리는 어디서나 좋지만, 장래에 RESTful 플러그인 를 사용할 가능성을 생각하면, 이것에 맞추어 플러그 인 루트에 http 디렉토리를 작성하는 것이 좋을지도.



    컨트롤러는 Backend\Classes\Controller를 확장하여 구현한다. 보다 기본적인 Laravel의 컨트롤러 클래스를 사용하는 것보다, 이쪽이 프로젝트의 설정등을 계승해 주기 때문에 훨씬 편하다.
    <?php namespace Cocci\Custom\Http;
    
    use Backend\Classes\Controller;
    
    class Images extends Controller
    {
        public function hoge()
        {
            return response()->json([
                'name' => 'pikanji',
                'state' => 'Cebu'
            ]);
        }
    }
    

    이 예제는 단순히 JSON 형식으로 데이터를 반환합니다.

    그런 다음 플러그인 루트에 routes.php 파일을 만들어 API 경로와 컨트롤러를 연결합니다.


    <?php
    
    Route::get('images', 'Cocci\Custom\Http\Images@hoge');
    

    이상으로 /images 엔드 포인트의 완성.

    라우팅에 대해서는 여기 OctoberCMS 문서에도 상세하게 쓰여 있다.

    참고로 RESTful 플러그인이 하고 있듯이 API 경로에 접두사를 붙여 그룹화하면 엔드포인트가 늘어날 때 깔끔하게 정리된다.
    <?php
    
    Route::group(['prefix' => 'api/v1'], function () {
        Route::get('images', 'Cocci\Custom\Http\Images@hoge');
    });
    

    이 예에서는 /api/v1/images 라는 엔드포인트가 된다.

    좋은 웹페이지 즐겨찾기