PHP 프레임워크 – CodeIgniter – 7 – API 개발

PHP 프레임워크 - CodeIgniter - 7 - API 개발
PHP 프레임워크 – CodeIgniter – 7 – API 개발

PHP 프레임워크 – CodeIgniter – 7 – API 개발

안녕하세요, 열정적인 개발자 여러분 😊
오늘은 CodeIgniter 프레임워크에서의 API 개발 방법에 대해 알아보는 시간을 가져볼게요!

요즘 대부분의 웹 서비스는 RESTful API 기반으로 데이터를 주고받으며 동작하죠.
프론트엔드와 백엔드가 서로 대화할 수 있도록 해주는 이 API는,
마치 식당 주방과 홀 사이의 주문 전송 시스템처럼 중요한 역할을 합니다.

CodeIgniter는 가볍고 빠른 구조 덕분에 API 서버를 구축할 때도 아주 유용하게 쓰인답니다.
그럼 지금부터 하나씩 차근차근 배워보겠습니다!


CodeIgniter에서 API 개발이란?

API(Application Programming Interface)는 프로그램 간에 데이터를 주고받기 위한 규칙입니다.
보통은 JSON 형식으로 데이터를 전달하고, GET / POST / PUT / DELETE 같은 HTTP 메서드로 동작을 구분하죠.

CodeIgniter에서는 RESTful 방식의 API를 손쉽게 구성할 수 있으며,
라우팅, 컨트롤러, 모델, 응답 처리까지 완벽하게 지원합니다!


1. API 라우팅 구성

CodeIgniter 4에서는 라우터 설정이 app/Config/Routes.php 파일에 있습니다.

예시: API 경로 설정

$routes->group('api', function($routes) {
    $routes->get('users', 'Api\UserController::index');
    $routes->get('users/(:num)', 'Api\UserController::show/$1');
    $routes->post('users', 'Api\UserController::create');
    $routes->put('users/(:num)', 'Api\UserController::update/$1');
    $routes->delete('users/(:num)', 'Api\UserController::delete/$1');
});

🗂️ api/users 와 같은 경로로 접근하면 JSON 응답을 받을 수 있게 되는 거죠!


2. API 전용 컨트롤러 만들기

php spark make:controller Api/UserController

생성된 컨트롤러에서 각각의 요청에 맞는 메서드를 정의해줍니다.

<?php

namespace App\Controllers\Api;
use CodeIgniter\RESTful\ResourceController;

class UserController extends ResourceController
{
    protected $modelName = 'App\Models\UserModel';
    protected $format    = 'json';

    public function index()
    {
        return $this->respond($this->model->findAll());
    }

    public function show($id = null)
    {
        $data = $this->model->find($id);
        return $data ? $this->respond($data) : $this->failNotFound('사용자를 찾을 수 없습니다.');
    }

    public function create()
    {
        $data = $this->request->getJSON(true);
        if ($this->model->insert($data)) {
            return $this->respondCreated($data);
        }
        return $this->failValidationErrors($this->model->errors());
    }

    public function update($id = null)
    {
        $data = $this->request->getJSON(true);
        if ($this->model->update($id, $data)) {
            return $this->respond($data);
        }
        return $this->fail('업데이트 실패');
    }

    public function delete($id = null)
    {
        if ($this->model->delete($id)) {
            return $this->respondDeleted(['id' => $id]);
        }
        return $this->failNotFound('삭제할 사용자가 없습니다.');
    }
}

👨‍🍳 ResourceController를 상속하면 REST 방식에 맞는 기본 구조를 쉽게 가져올 수 있어요.


3. 모델 연결

// app/Models/UserModel.php
namespace App\Models;
use CodeIgniter\Model;

class UserModel extends Model
{
    protected $table      = 'users';
    protected $primaryKey = 'id';
    protected $allowedFields = ['username', 'email', 'password'];
    protected $useTimestamps = true;
    protected $validationRules = [
        'username' => 'required|min_length[3]',
        'email'    => 'required|valid_email|is_unique[users.email]',
    ];
}

API에서 요청된 데이터를 자동 검증 및 저장할 수 있도록 모델을 설정해줍니다.


4. JSON 응답 만들기

CodeIgniter 4에서는 respond(), respondCreated(), fail() 등 다양한 헬퍼 메서드를 제공해서
HTTP 상태코드와 JSON 응답을 깔끔하게 반환할 수 있어요.

예시

return $this->respond([
    'status' => 200,
    'message' => '요청 성공!',
    'data' => $userData
]);

또는 에러 발생 시:

return $this->failValidationErrors($this->model->errors());

5. API 테스트 예시 (Postman 등)

이제 API가 잘 작동하는지 확인해볼 시간입니다!

HTTP 메서드별 요청 예시

메서드 경로 설명
GET /api/users 사용자 목록 조회
GET /api/users/3 특정 사용자 조회
POST /api/users 사용자 생성
PUT /api/users/3 사용자 정보 수정
DELETE /api/users/3 사용자 삭제

📌 Postman, Insomnia, curl 등을 이용해 손쉽게 테스트할 수 있어요!


6. API 인증 적용하기 (보안 강화)

API는 외부에서 접속 가능한 만큼, 보안이 가장 중요해요!
CodeIgniter에서는 JWT(Json Web Token) 기반 인증 또는 자체 API 키 인증 로직을 구현할 수 있어요.

간단한 인증 미들웨어 만들기

// app/Filters/ApiAuth.php
namespace App\Filters;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use CodeIgniter\Filters\FilterInterface;

class ApiAuth implements FilterInterface
{
    public function before(RequestInterface $request, $arguments = null)
    {
        $key = $request->getHeaderLine('X-API-KEY');
        if ($key !== 'my-secret-key') {
            return Services::response()
                ->setJSON(['error' => 'Unauthorized'])
                ->setStatusCode(401);
        }
    }

    public function after(RequestInterface $request, ResponseInterface $response, $arguments = null)
    {
    }
}

그리고 app/Config/Filters.php에 등록해주고, 라우트에 적용하면 됩니다!


7. 응답 구조 표준화 팁

현업에서는 API 응답을 아래처럼 표준화하면 좋습니다:

{
  "status": "success",
  "message": "사용자 등록 완료",
  "data": {
    "id": 5,
    "username": "test"
  }
}
  • 성공 응답: status, message, data 포함
  • 실패 응답: status: error, message, code, errors 포함

주의할 점 정리 ✅

항목 설명
HTTP 상태코드 준수 200(성공), 400(요청오류), 401(권한없음), 404(찾을 수 없음) 등
CSRF 적용 안함 API에서는 보통 CSRF 토큰을 비활성화합니다.
CORS 설정 필요 외부 도메인에서 요청할 경우 CORS 설정이 필요합니다.
유효성 검증 필수 모든 입력값은 검증하고 저장하세요!
민감 정보 필터링 비밀번호, 토큰은 응답에서 제거하세요

마무리하며 😊

CodeIgniter 4는 가볍고 유연하면서도, RESTful API 개발을 위한 강력한 기능들을 기본적으로 제공합니다.
ResourceController, respond(), 유효성 검증, 필터 등
한번 익숙해지면 아주 빠르게 API를 개발할 수 있어요!

직접 간단한 유저 API를 만들어보시고,
그 후 JWT 인증이나 Redis 캐싱 등으로 발전시켜 보세요 🚀

다음 시간엔 CodeIgniter의 세션(Session)과 인증(Auth) 기능을 소개해드릴게요.
오늘도 즐코하시고, 멋진 API 세상에 입문하신 걸 축하드립니다! 🎉💻📡

답글 남기기