函数文档

rest_ensure_response()

💡 云策文档标注

概述

rest_ensure_response() 是 WordPress REST API 中的一个核心函数,用于确保响应对象的一致性。它检查输入参数并返回适当的 WP_REST_Response 或 WP_Error 实例,简化了 REST 响应处理。

关键要点

  • 函数接受一个参数 $response,类型可以是 WP_REST_Response、WP_Error、WP_HTTP_Response 或任意混合类型,用于检查并确保响应对象。
  • 返回类型为 WP_REST_Response 或 WP_Error:如果输入是 WP_Error,则直接返回;如果是 WP_REST_Response 实例,则返回原实例;否则创建新的 WP_REST_Response 实例。
  • 该函数在 WordPress 4.4.0 版本中引入,广泛用于 REST API 控制器中,如 prepare_item_for_response 方法,以确保响应格式统一。

代码示例

function rest_ensure_response( $response ) {
    if ( is_wp_error( $response ) ) {
        return $response;
    }

    if ( $response instanceof WP_REST_Response ) {
        return $response;
    }

    /*
     * While WP_HTTP_Response is the base class of WP_REST_Response, it doesn't provide
     * all the required methods used in WP_REST_Server::dispatch().
     */
    if ( $response instanceof WP_HTTP_Response ) {
        return new WP_REST_Response(
            $response->get_data(),
            $response->get_status(),
            $response->get_headers()
        );
    }

    return new WP_REST_Response( $response );
}

注意事项

开发者在使用此函数时,应检查返回值是否为 WP_Error,以正确处理错误响应。此外,虽然 WP_HTTP_Response 是 WP_REST_Response 的基类,但可能缺少某些必要方法,因此函数会将其转换为 WP_REST_Response 实例。


📄 原文内容

Ensures a REST response is a response object (for consistency).

Description

This implements WP_REST_Response, allowing usage of set_status/header/etc without needing to double-check the object. Will also allow WP_Error to indicate error responses, so users should immediately check for this value.

Parameters

$responseWP_REST_Response|WP_Error|WP_HTTP_Response|mixedrequired
Response to check.

Return

WP_REST_Response|WP_Error If response generated an error, WP_Error, if response is already an instance, WP_REST_Response, otherwise returns a new WP_REST_Response instance.

Source

function rest_ensure_response( $response ) {
	if ( is_wp_error( $response ) ) {
		return $response;
	}

	if ( $response instanceof WP_REST_Response ) {
		return $response;
	}

	/*
	 * While WP_HTTP_Response is the base class of WP_REST_Response, it doesn't provide
	 * all the required methods used in WP_REST_Server::dispatch().
	 */
	if ( $response instanceof WP_HTTP_Response ) {
		return new WP_REST_Response(
			$response->get_data(),
			$response->get_status(),
			$response->get_headers()
		);
	}

	return new WP_REST_Response( $response );
}

Changelog

Version Description
4.4.0 Introduced.