웹 애플리케이션을 개발하면서 가장 많이 접하게 되는 기술 중 하나가 바로 REST API입니다. REST API는 클라이언트와 서버 간의 통신을 용이하게 해주며, 다양한 플랫폼에서 정보를 주고받는 데 필수적입니다. 이번 글에서는 PHP와 MySQL을 사용하여 REST API를 구축하는 방법을 단계별로 설명하겠습니다.

환경 설정

우선 PHP와 MySQL이 설치된 환경을 준비해야 합니다. 로컬 개발 환경을 위해 XAMPP, MAMP 또는 LAMP 스택을 사용할 수 있습니다. XAMPP를 사용하는 예를 들어 보겠습니다.

  1. XAMPP 다운로드하여 설치합니다.
  2. XAMPP Control Panel을 실행하고 Apache와 MySQL 서비스를 시작합니다.
  3. 웹 브라우저에서 http://localhost/phpmyadmin에 접속하여 데이터베이스를 생성합니다. 데이터베이스 이름은 api_db로 하겠습니다.
  4. CREATE DATABASE api_db;
    USE api_db;
    
    CREATE TABLE users (
        id INT(11) AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        email VARCHAR(50) NOT NULL UNIQUE
    );

    프로젝트 구조 설정

    프로젝트의 구조를 설정합니다. 예를 들어 다음과 같은 폴더 구조를 만들어보세요.

    /api_project
        /config
            config.php
        /public
            index.php
        /src
            User.php

    데이터베이스 연결

    config.php 파일을 config 폴더에 생성하여 데이터베이스 연결을 구성합니다.
    <?php
    $host = 'localhost';
    $db   = 'api_db';
    $user = 'root';
    $pass = '';
    
    try {
        $pdo = new PDO("mysql:host=$host;dbname=$db", $user, $pass);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
    }
    ?>

    사용자 모델 생성

    User.php 파일을 src 폴더에 생성하고, 사용자 정보를 처리할 클래스를 작성합니다.
    <?php
    class User {
        private $pdo;
    
        public function __construct($pdo) {
            $this->pdo = $pdo;
        }
    
        public function createUser($name, $email) {
            $stmt = $this->pdo->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
            return $stmt->execute([$name, $email]);
        }
    
        public function getAllUsers() {
            $stmt = $this->pdo->query("SELECT  FROM users");
            return $stmt->fetchAll(PDO::FETCH_ASSOC);
        }
    
        public function getUser($id) {
            $stmt = $this->pdo->prepare("SELECT  FROM users WHERE id = ?");
            $stmt->execute([$id]);
            return $stmt->fetch(PDO::FETCH_ASSOC);
        }
    }
    ?>

    REST API 엔드포인트 구현

    index.php 파일에 REST API의 엔드포인트를 구현합니다. 이 예제에서는 사용자의 생성 및 조회 기능을 제공합니다.
    <?php
    header('Content-Type: application/json');
    require '../config/config.php';
    require '../src/User.php';
    
    $userModel = new User($pdo);
    
    $requestMethod = $_SERVER["REQUEST_METHOD"];
    
    switch ($requestMethod) {
        case 'POST':
            $data = json_decode(file_get_contents("php://input"), true);
            $name = $data['name'];
            $email = $data['email'];
            $result = $userModel->createUser($name, $email);
            echo json_encode(['success' => $result]);
            break;
    
        case 'GET':
            if (isset($_GET['id'])) {
                $user = $userModel->getUser($_GET['id']);
                echo json_encode($user);
            } else {
                $users = $userModel->getAllUsers();
                echo json_encode($users);
            }
            break;
    
        default:
            echo json_encode(['error' => 'Invalid request method']);
            break;
    }
    ?>

    테스트하기

    API를 테스트하는 방법은 Postman이나 cURL을 사용할 수 있습니다. 여기서는 Postman을 이용한 간단한 테스트 방법을 소개합니다.

  5. 사용자 생성 (POST)
  6. - URL: http://localhost/api_project/public/index.php - Method: POST - Body: JSON 형식

         {
             "name": "John Doe",
             "email": "[email protected]"
         }
  7. 모든 사용자 조회 (GET)
  8. - URL: http://localhost/api_project/public/index.php - Method: GET

  9. 특정 사용자 조회 (GET)
- URL: http://localhost/api_project/public/index.php?id=1

- Method: GET

마무리

이번 글에서는 PHP와 MySQL을 활용하여 간단한 REST API를 구축하는 과정을 살펴보았습니다. 기본적인 사용자 생성 및 조회 기능을 구현했으며, 이를 통해 기본적인 API 설계를 이해할 수 있었기를 바랍니다. REST API는 다양한 클라이언트와의 통신을 가능하게 해주는 중요한 요소입니다. 향후 더 복잡한 기능, 예를 들어 업데이트 및 삭제 작업을 추가하는 것도 고려해보세요. API 보안 및 인증에 대한 내용도 중요하므로, 다음 단계로 나아가기 위해 관련 자료를 찾아보는 것을 추천합니다.