IMCAT.DEV
로그인 가입
PHP 중급 네트워크

PHP RESTful API 기초

PHP RESTful API 기초 — 중급

RESTful API 기초

1. 도입 (왜 배워야 하는가)

RESTful API는 현대 웹 애플리케이션의 핵심 요소 중 하나로, 클라이언트와 서버 간의 데이터 교환을 간편하게 해줍니다. 특히, 모바일 애플리케이션, 웹 서비스, IoT 기기 등 다양한 플랫폼에서 RESTful API를 사용하여 서로 다른 시스템이 원활하게 소통할 수 있도록 합니다.

이러한 API를 모른다면, 웹 애플리케이션의 기능을 확장하거나 외부 서비스와의 통합이 어려워질 수 있습니다. 예를 들어, 결제 시스템이나 소셜 미디어 로그인 기능을 추가하고 싶을 때 RESTful API를 이해하지 못하면 개발이 지연되거나 불가능해질 수 있습니다.

2. 핵심 개념 설명

REST (Representational State Transfer)

REST는 클라이언트와 서버 간의 통신 방식을 정의하는 아키텍처 스타일입니다. HTTP 프로토콜을 기반으로 하며, 자원(데이터)을 URI(Uniform Resource Identifier)를 통해 표현합니다.

HTTP 메서드

  • GET: 서버에서 데이터를 조회할 때 사용합니다.
  • POST: 서버에 새로운 데이터를 생성할 때 사용합니다.
  • PUT: 서버의 데이터를 수정할 때 사용합니다.
  • DELETE: 서버의 데이터를 삭제할 때 사용합니다.
  • 메서드설명예시
    GET데이터 조회/api/products
    POST데이터 생성/api/products (새로운 상품 추가)
    PUT데이터 수정/api/products/1 (ID가 1인 상품 수정)
    DELETE데이터 삭제/api/products/1 (ID가 1인 상품 삭제)

    3. 기본 코드 예제

    아래는 PHP에서 RESTful API를 구현하는 기본적인 예제입니다.

    // api.php
    header("Content-Type: application/json; charset=UTF-8");
    
    $requestMethod = $_SERVER['REQUEST_METHOD'];
    
    switch ($requestMethod) {
        case 'GET':
            // 데이터를 조회하는 부분
            echo json_encode(["message" => "데이터를 조회했습니다."]);
            break;
        case 'POST':
            // 데이터를 생성하는 부분
            echo json_encode(["message" => "데이터를 추가했습니다."]);
            break;
        case 'PUT':
            // 데이터를 수정하는 부분
            echo json_encode(["message" => "데이터를 수정했습니다."]);
            break;
        case 'DELETE':
            // 데이터를 삭제하는 부분
            echo json_encode(["message" => "데이터를 삭제했습니다."]);
            break;
        default:
            echo json_encode(["message" => "지원하지 않는 메서드입니다."]);
            break;
    }

    실행 결과

  • GET 요청: {"message":"데이터를 조회했습니다."}
  • POST 요청: {"message":"데이터를 추가했습니다."}
  • PUT 요청: {"message":"데이터를 수정했습니다."}
  • DELETE 요청: {"message":"데이터를 삭제했습니다."}
  • 지원하지 않는 메서드: {"message":"지원하지 않는 메서드입니다."}
  • 코드 한 줄씩 동작 설명

    1. header("Content-Type: application/json; charset=UTF-8");: 응답의 콘텐츠 타입을 JSON으로 설정합니다.
    2. $_SERVER['REQUEST_METHOD'];: 현재 요청된 HTTP 메서드를 가져옵니다.
    3. switch ($requestMethod): 요청된 메서드에 따라 동작을 분기합니다.
    4. 각 case 블록에서 해당 메서드에 맞는 작업을 수행하고 JSON 형식으로 응답합니다.
    5. 4. 실전 활용 예제

      예제 1: 쇼핑몰에서 장바구니 기능 구현

      쇼핑몰에서는 사용자가 상품을 장바구니에 담는 기능이 중요합니다. 이를 위해 POST 메서드를 사용하여 장바구니에 상품을 추가하고, GET 메서드로 장바구니 내용을 조회할 수 있습니다.

      // cart.php
      if ($_SERVER['REQUEST_METHOD']  'POST') {
          // 장바구니에 상품 추가 로직
          echo json_encode(["message" => "장바구니에 상품을 추가했습니다."]);
      } elseif ($_SERVER['REQUEST_METHOD']  'GET') {
          // 장바구니 조회 로직
          echo json_encode(["cart" => ["상품1", "상품2"]]);
      }

      예제 2: 사용자 프로필 업데이트

      사용자가 자신의 프로필을 수정할 때 PUT 메서드를 사용하여 서버에 데이터를 전송합니다.

      // profile.php
      if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
          // 프로필 수정 로직
          echo json_encode(["message" => "프로필이 수정되었습니다."]);
      }

      5. 흔한 실수와 주의사항

      실수 1: 잘못된 HTTP 메서드 사용

    6. 잘못된 코드:
    7. // GET 메서드로 데이터를 수정하려고 하는 경우
      if ($_SERVER['REQUEST_METHOD'] == 'GET') {
          // 수정 로직
      }
    8. 올바른 코드:
    9. // PUT 메서드로 수정해야 함
      if ($_SERVER['REQUEST_METHOD'] == 'PUT') {
          // 수정 로직
      }

      실수 2: JSON 데이터 처리 미비

    10. 잘못된 코드:
    11. // POST 요청 시 클라이언트가 보낸 JSON 데이터 처리 없음
      if ($_SERVER['REQUEST_METHOD'] == 'POST') {
          echo json_encode(["message" => "데이터를 추가했습니다."]);
      }
    12. 올바른 코드:
    13. if ($_SERVER['REQUEST_METHOD'] == 'POST') {
          $data = json_decode(file_get_contents("php://input"), true);
          // $data를 사용하여 추가 로직 수행
      }

      6. 정리

    14. RESTful API는 웹 애플리케이션에서 클라이언트와 서버 간의 데이터 교환을 간편하게 해줍니다.
    15. HTTP 메서드(GET, POST, PUT, DELETE)를 통해 다양한 작업을 수행할 수 있습니다.
    16. API를 구현할 때는 요청 메서드에 맞는 처리를 정확히 해야 합니다.
    17. JSON 데이터 처리를 적절히 해야 클라이언트와의 통신이 원활해집니다.
    18. 다음에 학습하면 좋은 주제:

    19. JSON과 XML 데이터 처리
    20. OAuth 인증 및 권한 부여
    21. API 버전 관리 방법