💻 쇼핑몰 자동화 & 웹 개발 가이드

[PHP API] REST API란? PHP로 구현하는 실전 예제

rhandy 2025. 4. 24. 07:10
728x90

프론트엔드와 백엔드의 연결 고리, REST API를 PHP로 직접 만들어봅니다!

안녕하세요! REST API라는 단어, 개발자라면 한 번쯤은 들어보셨을 거예요. 저도 처음에는 “API? 그거 JSON 주고받는 거 아냐?” 정도로만 알았는데, 실제로 구현해보니 개념부터 설계, 보안까지 꽤 탄탄한 구조가 필요하더라고요. 특히 PHP로 REST API를 만들면 프레임워크 없이도 라우팅, 요청 분기, JSON 응답 등을 직접 구현할 수 있어서 공부하는 데 큰 도움이 됩니다. 이번 글에서는 REST API의 기본 개념을 정리하고, 순수 PHP로 GET, POST, PUT, DELETE 요청을 처리하는 실전 예제까지 단계적으로 안내해드릴게요. 초보자분들도 걱정 없이 따라오실 수 있도록 구성했으니, 편하게 읽어주세요!

1. REST API의 기본 개념

REST는 Representational State Transfer의 약자로, HTTP 프로토콜을 기반으로 자원을 주고받는 아키텍처 스타일입니다. REST API는 웹의 기본 원칙을 따르며, 서버와 클라이언트가 독립적으로 작동하도록 설계됩니다. API 요청은 URL 경로, HTTP 메서드, 헤더, 바디 등으로 구성되고, 일반적으로 JSON 형태로 응답합니다.

REST API의 핵심은 다음과 같습니다:

  • Stateless: 서버는 이전 요청의 상태를 기억하지 않음
  • URI로 자원 표현: /users, /products처럼 명확한 경로 구조
  • HTTP 메서드: GET, POST, PUT, DELETE 등을 사용한 동작 구분

2. 엔드포인트 설계와 리소스 구조

REST API에서는 리소스(데이터)를 엔드포인트(URI)로 구분합니다. 리소스는 명사로 표현하고, 동작은 HTTP 메서드로 구분하는 게 RESTful 설계의 핵심이에요.

HTTP 메서드 URI 예시 설명
GET /users 사용자 목록 조회
GET /users/5 5번 사용자 정보 조회
POST /users 새 사용자 생성
PUT /users/5 5번 사용자 정보 수정
DELETE /users/5 5번 사용자 삭제
728x90

3. PHP로 메서드(GET/POST/PUT/DELETE) 처리

PHP에서는 $_SERVER['REQUEST_METHOD']을 통해 클라이언트의 요청 메서드를 감지할 수 있습니다. 이를 활용하면 RESTful API를 간단히 구현할 수 있죠.

  • GET: $_GET 또는 쿼리스트링 파싱
  • POST: $_POST 또는 php://input
  • PUT/DELETE: php://input으로 직접 파싱
$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
  case 'GET':
    echo json_encode(["method" => "GET"]);
    break;
  case 'POST':
    echo json_encode(["method" => "POST"]);
    break;
  case 'PUT':
    parse_str(file_get_contents("php://input"), $_PUT);
    echo json_encode(["method" => "PUT", "data" => $_PUT]);
    break;
  case 'DELETE':
    echo json_encode(["method" => "DELETE"]);
    break;
}

4. JSON 응답과 상태 코드 반환

REST API는 데이터만 주고받는 구조이기 때문에 HTML이 아닌 JSON 포맷으로 응답을 주는 것이 일반적입니다. PHP에서 JSON 응답을 반환하려면 header()json_encode()를 함께 사용합니다.

// JSON 응답 헤더
header('Content-Type: application/json; charset=utf-8');

// 응답 데이터
$data = [
  'status' => 'success',
  'user' => ['id' => 1, 'name' => '홍길동']
];

echo json_encode($data, JSON_UNESCAPED_UNICODE);

또한 HTTP 응답 상태 코드도 꼭 함께 반환해줘야 클라이언트가 요청 결과를 판단할 수 있어요.

상태 코드 설명
200 OK 정상 처리
201 Created 새 리소스 생성 완료
400 Bad Request 잘못된 요청 (파라미터 누락 등)
404 Not Found 해당 리소스를 찾을 수 없음
500 Internal Server Error 서버 내부 오류
// 예: 오류 상황
http_response_code(400);
echo json_encode(['error' => '필수 항목이 누락되었습니다.']);

 

 

PHP is_file() 함수로 파일 확인하기

PHP에서 파일을 다룰 때, 특정 경로가 정상적인 파일인지 확인해야 하는 경우가 많습니다.예를 들어, 파일이 존재하는지 검사하거나, 업로드된 파일이 실제 파일인지 확인하는 작업을 수행할 때

rhandykim.tistory.com

5. 실전 예제: 사용자 정보 CRUD 구현

이제 간단한 사용자 데이터를 대상으로 CRUD API를 구현해보겠습니다. 파일 기반의 임시 DB를 사용하며, 실전에서는 DB 연동으로 확장하면 됩니다.

  • GET /users → 사용자 목록 반환
  • POST /users → 새 사용자 추가
  • PUT /users/{id} → 사용자 정보 수정
  • DELETE /users/{id} → 사용자 삭제
// GET 예시
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
  $users = json_decode(file_get_contents('users.json'), true);
  echo json_encode($users);
}

// POST 예시
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $input = json_decode(file_get_contents('php://input'), true);
  $users = json_decode(file_get_contents('users.json'), true);
  $input['id'] = time(); // 간단한 ID 생성
  $users[] = $input;
  file_put_contents('users.json', json_encode($users, JSON_UNESCAPED_UNICODE));
  echo json_encode(['status' => 'created', 'user' => $input]);
}

PUT과 DELETE는 php://input을 통해 데이터를 수신하고, $_SERVER['REQUEST_URI']로 URL 파라미터를 파싱해 처리합니다.

6. REST API 구현 시 주의할 점 요약

  • JSON 응답 시 Content-Type 헤더 반드시 지정
  • PUT/DELETE는 php://input으로 데이터 수신
  • URI는 명사 중심으로 설계하고, 메서드로 동작 구분
  • 에러 상황에 따라 http_response_code() 설정
  • 실제 서비스에선 DB 연동 및 인증/보안 로직 필수

REST API는 단순한 데이터 송수신 도구가 아니라, 클라이언트와 서버를 독립적으로 설계할 수 있는 강력한 개발 방식입니다. 연습해보면서 익숙해지면 API 개발이 정말 재밌어져요!

 

 

PHP trim() 함수로 공백 제거하기

PHP에서 문자열을 다룰 때, 앞뒤의 불필요한 공백이나 특정 문자를 제거해야 하는 경우가 많습니다.예를 들어, 사용자 입력값을 정리하거나, 데이터베이스에서 가져온 값을 정리할 때 유용합니

rhandykim.tistory.com

Q REST API는 꼭 JSON으로만 응답해야 하나요?

꼭 그렇진 않지만, JSON은 다양한 플랫폼에서 쉽게 파싱되고 가볍기 때문에 대부분의 REST API가 JSON 포맷을 기본으로 사용합니다. XML을 사용하는 경우도 있지만 드물어요.

A 꼭은 아니지만 JSON이 표준처럼 쓰이고 있어요!
Q PHP에서 PUT이나 DELETE 요청은 왜 $_POST로 못 받나요?

PHP는 GET과 POST는 자동으로 superglobal 변수에 담아주지만, PUT이나 DELETE는 php://input 스트림을 직접 읽어야 합니다. 그래서 별도 처리 로직이 필요해요.

A PUT/DELETE는 직접 php://input으로 받아야 해요!
Q REST API는 웹페이지처럼 주소창에 입력하면 동작하나요?

일부 GET 요청은 주소창에서도 확인 가능하지만, POST, PUT, DELETE 등은 브라우저에서 직접 테스트하기 어렵기 때문에 Postman, curl 같은 도구를 사용해야 해요.

A GET만 주소창 가능, 나머진 테스트 툴을 써야 해요!
Q JSON 응답 시 한글이 깨지는 이유는 뭘까요?

json_encode()JSON_UNESCAPED_UNICODE 옵션을 주지 않으면 한글이 유니코드로 인코딩됩니다. 옵션을 반드시 포함하고, UTF-8로 저장된 파일이어야 해요.

A JSON_UNESCAPED_UNICODE 꼭 써주세요!
Q 실전에서는 파일이 아니라 DB를 써야 하지 않나요?

맞습니다! 예제에서는 파일을 사용했지만, 실제 운영에서는 MySQL, MariaDB, PostgreSQL 등의 데이터베이스를 사용해 사용자 데이터를 관리하는 것이 일반적이에요.

A 예제는 파일로, 실무는 데이터베이스로 구현하세요!

 

REST API를 처음 접했을 때, 그냥 URL에 /api 붙여서 JSON 주면 되는 줄 알았어요. 그런데 GET, POST, PUT, DELETE 같은 메서드 구분부터, 상태 코드, 응답 포맷까지 신경 써야 할 게 많더라고요. 저도 작은 프로젝트에서 사용자 CRUD API를 직접 만들면서, 클라이언트와 서버가 데이터를 주고받는 흐름을 몸소 느낄 수 있었어요. 특히 Postman으로 테스트하면서 결과가 딱딱 떨어질 때의 쾌감은 아직도 기억나네요. 😄 이번 글에서 설명한 내용을 토대로 여러분도 작은 API를 직접 만들어보세요. 파일로 시작하더라도, 결국 DB로 확장하고, 인증도 붙이고, 구조화도 할 수 있게 됩니다. 결국엔 진짜 서비스로 이어지는 멋진 여정의 출발점이 될 거예요!

728x90