PHP

코드이그나이터 3 REST api 라이브러리 문제들

마리오64 2020. 12. 31. 00:33

코드이그나이터3에서 기본적인 URL라우팅 구조는 다음과 같습니다.

폴더/컨트롤러 클래스이름/함수이름

이런구조인데요

ci3 에서 restful api를 지원하는 라이브러리들은 저기 함수를 변형하여

login_post() / login_get() 이런식으로 함수이름 뒤에 http메서드를 넣습니다.

이제 api를 만들어보면

api폴더하위에 Reservation 컨트롤러에서 이런일이 생기죠

class Reservation extends RestController
{
    public function __construct()
    {
        parent::__construct();
        $this->load->library('ReservationService');
        $this->load->library('session');
    }

    //예약확인
    public function reservation_get()
    {
        $data = [
            'checkIn' => $this->post('checkIn'),
            'checkOut' => $this->post('checkOut')
        ];

        $info = $this->reservationservice->checkReservation($data['checkIn'], $data['checkOut']);
        if ($info === null) {
            return $this->response("msg:fail", 404);
        }
        return $this->response($info, 200);
    }

 

예약조회를 하려고 get요청을 하면 url이 api/reservation(컨트롤러이름)/reservation

하.. reservation이 중복되네요...

api/reservation/book   ??   해당하는 다른이름을 찾거나 <- 이것도 좀...

api/reservation/get ,  api/reservation/check     ?! 이건 동사를 넣게되니 restful api의 규칙에 어긋나죠

 

보통의 웹 프레임워크들 같으면 api/reservation 이렇게 깔끔하게 끝났죠.

스프링이나 슬림, 라라벨등

이런거 볼때마다 자꾸 스프링생각 나는군요

 

결론 rest api를 프레임워크단에서 지원하는 코드이그나이터 4나 다른 프레임워크를 쓰는게 좋겠습니다.

그리고 코드이그나이터 3은 네임스페이스지원이 안됩니다. PHP 5.2시절부터 시작된 호환성때문인거 같네요

클래스를 로딩할때 무조건 프레임워크의 load()함수로 불러오게 되어있네요.

현대적인 PHP 개발 방법론과 맞지않습니다.

 

Yii나 라라벨, 심포니등 설계잘된 프레임워크 많죠.

 

레딧의 여러 사용자의견을 봐도 위와 같은 이유로 코드이그나이터를 배우는것을 추천하지 않습니다.

https://www.reddit.com/r/PHP/comments/8mh6cu/why_is_code_igniter_not_recommended/

 

Why is Code Igniter not recommended?

I have been checking out Code Igniter recently and it seems incredibly easy to get an idea going very quickly with little work. I have primarily...

www.reddit.com