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.
Source
function rest_do_request( $request ) {
$request = rest_ensure_request( $request );
return rest_get_server()->dispatch( $request );
}
Changelog
| Version | Description |
|---|---|
| 4.4.0 | Introduced. |
Skip to note 2 content
Ryan McCue
rest_do_requestcan 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 );