函数文档

rest_do_request()

💡 云策文档标注

概述

rest_do_request() 是 WordPress REST API 的核心函数,用于内部执行 REST 请求并返回响应对象。它主要将请求路由通过 WP_REST_Server 处理,适用于开发者进行内部 API 调用。

关键要点

  • 函数接受一个 WP_REST_Request 对象或字符串作为必需参数,返回 WP_REST_Response 对象。
  • 内部实现先通过 rest_ensure_request() 确保请求参数为请求对象,然后通过 rest_get_server()->dispatch() 分发处理。
  • 常用于路由内部请求,例如在预加载数据、注册远程模式等场景中。
  • 自 WordPress 4.4.0 版本引入,是 REST API 基础设施的一部分。

代码示例

$request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
$response = rest_do_request( $request );

if ( $response->is_error() ) {
    // Convert to a WP_Error object.
    $error = $response->as_error();
    $message = $response->get_error_message();
    $error_data = $response->get_error_data();
    $status = isset( $error_data['status'] ) ? $error_data['status'] : 500;
    wp_die( printf( 'An error occurred: %s (%d)', $message, $error_data ) );
}

$data = $response->get_data();
$headers = $response->get_headers();
echo "Success! Here's the data:";
var_dump( $data );

注意事项

  • 使用前需先创建 WP_REST_Request 对象,指定请求方法和端点路径。
  • 响应对象可能包含错误,应检查 is_error() 方法并适当处理错误情况。
  • 函数依赖于 rest_get_server() 和 rest_ensure_request() 等辅助函数,确保 REST 服务器实例和请求一致性。

📄 原文内容

Do a REST request.

Description

Used primarily to route internal requests through WP_REST_Server.

Parameters

$requestWP_REST_Request|stringrequired
Request.

Return

WP_REST_Response REST response.

Source

function rest_do_request( $request ) {
	$request = rest_ensure_request( $request );
	return rest_get_server()->dispatch( $request );
}

Changelog

Version Description
4.4.0 Introduced.

User Contributed Notes

  1. Skip to note 2 content

    rest_do_request can be used to internally send a REST API request and return the response object for it. You need to create the Request object first.

    $request = new WP_REST_Request( 'GET', '/wp/v2/posts' );
    $response = rest_do_request( $request );
    
    if ( $response->is_error() ) {
    	// Convert to a WP_Error object.
    	$error = $response->as_error();
    	$message = $response->get_error_message();
    	$error_data = $response->get_error_data();
    	$status = isset( $error_data['status'] ) ? $error_data['status'] : 500;
    	wp_die( printf( '<p>An error occurred: %s (%d)</p>', $message, $error_data ) );
    }
    
    $data = $response->get_data();
    $headers = $response->get_headers();
    echo "<p>Success! Here's the data:</p>";
    var_dump( $data );