REST:如何处理REST_NO_ROUTE错误?

时间:2019-03-21 作者:gordie

我正在使用REST api,在执行一些REST请求时,有时会得到我想要的,有时会得到rest_ensure_response() :

{
    "code": "rest_no_route",
    "data": {
        "status": 404
    },
    "message": "No route was found matching the URL and request method"
}
。。。但是如何处理该响应,因为它是作为简单的JSON对象(或数组)返回的。这不是我可以检查的WP\\U错误对象。

我实际上是这样做的:

function api_request($url){

    $request = wp_remote_get($url);
    if (is_wp_error($request)) return $request;

    $response = wp_remote_retrieve_body( $request );
    if (is_wp_error($response)) return $response;

    $response = json_decode($response, true);

    //handle errors ?
    if ( $code = wpsstm_get_array_value(\'code\',$response) ){
        $message = wpsstm_get_array_value(\'message\',$response);
        $data = wpsstm_get_array_value(\'data\',$response);
        $error = new WP_Error($code,$message,$data );

        $this->debug_log($error,\'query API error\');

        return $error;
    }

    return $response;

}
谢谢!

1 个回复
SO网友:gordie

我在抄本中找到了一些有趣的函数。这就是我最终的做法:

function api_request($api_url = null, $params=null,$method = \'GET\'){

    if (!$api_url){
        return new WP_Error(\'no_api_url\',"Missing API URL");
    }

    //Create request
    $request = WP_REST_Request::from_url( $api_url );

    //Method
    $request->set_method( $method );

    //params
    switch($method){
        case \'GET\':
            $request->set_query_params($params);
        break;
        case \'POST\':
            $request->set_body_params($params);
        break;
    }

    //Get response
    $response = rest_do_request( $request );

    if ( $response->is_error() ) {
        return $response->as_error();
    }

    //Get datas
    $datas = $response->get_data();

    return $datas;

}

相关推荐

古登堡使用wp-json数据并在前端反映内容

我有一个自定义gutenberg块,它在编辑时通过wp json动态获取自定义post数据。如何为前台保存数据?这是我的自定义组件(preview.js) 我在编辑方法中包括const { __ } = wp.i18n const { Component } = wp.element export default class Preview extends Component { state = { teachers: false