wp-rest-api은(는) 무엇을 하나요?
WordPress REST API 엔드포인트/라우트를 구축, 확장 또는 디버깅할 때 사용: register_rest_route, WP_REST_Controller/컨트롤러 클래스, 스키마/인수 검증, permission_callback/인증, 응답 구조화, register_rest_field/register_meta, 또는 show_in_rest를 통한 CPT/분류 노출.
주요 사용 사례
- 커스텀 REST 라우트 등록:
register_rest_route()함수를 사용하여 새로운 엔드포인트를 추가합니다. - WP_REST_Controller 확장:
WP_REST_Controller클래스를 상속하여 표준 CRUD 동작을 구현합니다. - 스키마 및 인수 검증:
schema및args배열을 정의하여 요청 데이터의 유효성을 검증합니다. - 권한 콜백 구현:
permission_callback을 사용하여 현재 사용자의 액세스 권한을 확인합니다. - 응답 구조화:
WP_REST_Response객체를 사용하여 표준화된 응답 형식을 반환합니다. - 필드 및 메타 등록:
register_rest_field()또는register_meta()를 사용하여 기존 엔드포인트에 추가 데이터를 노출합니다. - CPT/분류 노출:
register_post_type()또는register_taxonomy()호출 시show_in_rest인수를true로 설정합니다.
사용 방법
- 플러그인 또는 테마의
functions.php파일에서rest_api_init액션에 콜백 함수를 연결합니다. - 콜백 함수 내에서
register_rest_route()를 호출하여 라우트를 정의합니다. - 필요에 따라
WP_REST_Controller를 확장하는 별도의 컨트롤러 클래스를 생성합니다. - 각 라우트에 대해
methods,callback,permission_callback,args를 지정합니다. WP_REST_Response를 반환하거나WP_Error를 반환하여 오류를 처리합니다.
예제 코드
add_action('rest_api_init', function () {
register_rest_route('myplugin/v1', '/items/(?P<id>\d+)', array(
'methods' => 'GET',
'callback' => 'myplugin_get_item',
'permission_callback' => function () {
return current_user_can('edit_posts');
},
'args' => array(
'id' => array(
'validate_callback' => function($param, $request, $key) {
return is_numeric($param);
}
),
),
));
});
function myplugin_get_item($request) {
$item_id = $request['id'];
$item = get_post($item_id);
if (!$item) {
return new WP_Error('not_found', '아이템을 찾을 수 없습니다.', array('status' => 404));
}
$response = new WP_REST_Response($item);
$response->set_status(200);
return $response;
}
디버깅 팁
WP_DEBUG및WP_DEBUG_LOG를 활성화하여 REST API 요청 중 발생하는 오류를 기록합니다.curl또는 Postman과 같은 도구를 사용하여 엔드포인트를 테스트합니다.register_rest_route()호출 시namespace에 슬래시(/)가 포함되지 않도록 주의합니다.permission_callback에서true를 반환하는 것은 현재 사용자에게 권한이 있음을 의미하며,false또는WP_Error는 거부를 의미합니다.- 응답 데이터를
WP_REST_Response로 래핑하여 일관된 구조(data,headers,status)를 유지합니다.