STAGE 8 · Lv.44
커스텀 엔드포인트 만들기
register_rest_route()로 커스텀 REST API 엔드포인트를 만들고, 권한 콜백, 요청/응답 처리, 버전 관리를 배웁니다.
커스텀 엔드포인트가 필요한 이유
기본 API의 한계
WordPress의 기본 REST API는 글, 페이지, 댓글, 사용자 등 표준 리소스를 다루기에 충분합니다. 하지만 실제 프로젝트에서는 다음과 같은 상황에서 커스텀 엔드포인트가 필요합니다:
1. 커스텀 데이터 처리: 기본 API가 제공하지 않는 데이터를 반환해야 할 때. 예를 들어, 여러 포스트 타입의 데이터를 하나의 응답으로 결합하거나, 커스텀 메타 데이터를 특정 형식으로 반환해야 할 때.
2. 비즈니스 로직 처리: 단순한 CRUD 이상의 복잡한 비즈니스 로직이 필요할 때. 예를 들어, 주문 처리, 결제 확인, 포인트 적립 등의 작업.
3. 외부 서비스 통합: 외부 서비스에서 데이터를 받거나 보내기 위한 전용 엔드포인트가 필요할 때. 웹훅 수신, 결제 게이트웨이 콜백 등.
4. 성능 최적화: 기본 API의 응답이 너무 크거나 불필요한 데이터를 포함할 때, 필요한 데이터만 반환하는 경량 엔드포인트를 만들 수 있습니다.
5. 모바일 앱 전용 API: 모바일 앱에 맞춤화된 데이터 구조를 반환하는 전용 엔드포인트.
register_rest_route() 기초
함수 구조
register_rest_route()는 WordPress REST API에 새 엔드포인트를 등록하는 핵심 함수입니다. rest_api_init 액션 훅 안에서 호출해야 합니다.
// register_rest_route() 기본 구조
register_rest_route(
$namespace, // 네임스페이스 (예: 'my-plugin/v1')
$route, // 경로 (예: '/posts')
$args // 설정 배열
);
// 최종 URL: /wp-json/{namespace}/{route}
// 예: /wp-json/my-plugin/v1/posts
가장 간단한 커스텀 엔드포인트
먼저 가장 기본적인 형태의 커스텀 엔드포인트를 만들어보겠습니다.
// functions.php 또는 커스텀 플러그인에 추가
add_action('rest_api_init', function() {
// 간단한 GET 엔드포인트
register_rest_route('my-site/v1', '/hello', [
'methods' => 'GET',
'callback' => function() {
return [
'message' => 'Hello, WordPress REST API!',
'time' => current_time('mysql'),
'site' => get_bloginfo('name')
];
},
'permission_callback' => '__return_true'
]);
});
// 테스트: GET /wp-json/my-site/v1/hello
// 응답: {"message":"Hello...","time":"...","site":"..."}
네임스페이스(Namespace)
엔드포인트를 그룹화하는 접두사입니다. 보통 "플러그인명/버전" 형식으로 만듭니다. 예: "my-plugin/v1". 네임스페이스를 사용하면 다른 플러그인의 엔드포인트와 충돌을 방지하고, API 버전 관리가 가능해집니다.
콜백(Callback)
엔드포인트가 호출되었을 때 실행되는 함수입니다. WP_REST_Request 객체를 인자로 받으며, 배열, WP_REST_Response, 또는 WP_Error를 반환해야 합니다.
권한 콜백(Permission Callback)
요청자가 이 엔드포인트에 접근할 권한이 있는지 확인하는 함수입니다. true를 반환하면 접근 허용, false나 WP_Error를 반환하면 거부됩니다. 보안을 위해 반드시 설정해야 합니다.
🔒
여기까지는 미리보기입니다
커스텀 엔드포인트 만들기
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.