친절한 우리 고모

친절한 고모의 친절한 이야기

  • 2025. 4. 24.

    by. 친절한 고모

    목차

      🔗 워드프레스 REST API란?

      워드프레스는 기본적으로 REST API를 제공합니다.
      이는 외부 애플리케이션(React, Vue, 앱 등)과의 데이터 통신 인터페이스로,
      JSON 형식으로 데이터를 주고받을 수 있게 해줍니다.

      위와 같이 /wp-json 하위에 엔드포인트를 호출하면,
      워드프레스의 게시글 데이터 등을 외부에서 호출할 수 있습니다.


      🧠 기본 개념 요약

      구성 요소설명
      wp-json 모든 REST API의 루트
      wp/v2 기본 API 버전 (워드프레스 코어에서 제공)
      posts, pages, users 각각의 데이터 유형 (엔드포인트)
      응답 형식 JSON 객체
      인증 기본은 비공개 데이터 제한 → JWT, OAuth 등 사용 가능

      📦 REST API 커스터마이징이 필요한 이유

      기본 API만으로는 아래가 어렵습니다:

      • 특정 조건의 데이터만 불러오기
      • 커스텀 포스트 타입(CPT) 사용 시 별도 출력
      • 필드 숨기기/추가하기
      • 외부 프론트엔드와 맞춤 통신 필요

      👉 그래서 필요한 것이 바로 Custom REST API Endpoint입니다.


      ✅ 커스텀 REST API 엔드포인트 만들기 (기본형)

      1. functions.php 또는 전용 플러그인에 삽입

      php
      복사편집
      add_action('rest_api_init', function () { register_rest_route('custom/v1', '/hello/', array( 'methods' => 'GET', 'callback' => 'custom_hello_world', )); }); function custom_hello_world() { return ['message' => '안녕하세요! 워드프레스 API입니다']; }

      📌 호출 URL:


      🧩 커스텀 포스트 타입 데이터 출력 예시

      php
      복사편집
      register_rest_route('custom/v1', '/projects/', array( 'methods' => 'GET', 'callback' => 'get_project_posts', )); function get_project_posts($request) { $posts = get_posts(array( 'post_type' => 'project', 'numberposts' => 5, )); $data = []; foreach ($posts as $post) { $data[] = array( 'id' => $post->ID, 'title' => get_the_title($post), 'link' => get_permalink($post), 'excerpt' => get_the_excerpt($post), ); } return rest_ensure_response($data); }

      🔐 보안 이슈: 인증 없이 데이터 노출 위험

      기본적으로 비공개 정보, 사용자 정보, 커스텀 필드 값
      비로그인 사용자에게 노출되지 않도록 조치 필요.

      인증 방법 2가지

      방식특징
      JWT 인증 (JSON Web Token) 프런트에서 토큰 발급 → 요청 시 Authorization 헤더로 전달
      Nonce 인증 워드프레스 로그인 사용자의 Ajax 요청에 활용
      (ex: wp_create_nonce('wp_rest'))  

      🔄 REST API로 데이터 추가/수정하기

      php
      복사편집
      register_rest_route('custom/v1', '/submit/', array( 'methods' => 'POST', 'callback' => 'submit_custom_post', 'permission_callback' => function () { return current_user_can('edit_posts'); } )); function submit_custom_post($request) { $params = $request->get_json_params(); $title = sanitize_text_field($params['title']); $post_id = wp_insert_post(array( 'post_title' => $title, 'post_status' => 'publish', 'post_type' => 'project', )); return ['status' => 'success', 'post_id' => $post_id]; }

      REST API는 단순 조회뿐 아니라 데이터 생성/수정/삭제까지 모두 처리 가능합니다.


      💡 응답 커스터마이징 팁

      REST API 응답을 커스터마이징하려면 register_rest_field()를 사용합니다.

      php
      복사편집
      register_rest_field('post', 'subtitle', array( 'get_callback' => function($post_arr) { return get_post_meta($post_arr['id'], 'subtitle', true); }, 'schema' => null, ));

      📌 이제 /wp-json/wp/v2/posts에서 subtitle 필드가 추가로 보입니다.


      ✅ REST API 활용 체크리스트

      항목완료 여부
      커스텀 엔드포인트 등록 ✅ / ❌
      REST 응답 필터링/추가 ✅ / ❌
      인증 방식 구성 (JWT/Nonce) ✅ / ❌
      외부 앱/API 연동 테스트 완료 ✅ / ❌
      권한 제어 및 보안 점검 ✅ / ❌

      🔗 워드프레스 REST API란?