今天在写wordpress的接口,然后碰到个奇怪的问题,怎么访问都提示 rest_no_route 的错误,然后就一直跟踪代码,终于找到原因所在。
报错信息
{ "code": "rest_no_route", "message": "未找到匹配URL和请求方式的路由。", "data": { "status": 404 } }
原因分析
register_rest_route( string $namespace, string $route, array $args = array(), bool $override = false )
$namespace 访问url地址第一段
$route 访问具体的地址,包括参数
$args 复合参数,必须要有,否则会报错
$args 必须要包括 methods、callback、permission_callback 三个字段
methods 指明是 GET 还是 POST 或者其他HTTP请求,可以使用字符串,也可以使用 WordPress 定义的常量:
WP_REST_Server::READABLE = ‘GET’
WP_REST_Server::EDITABLE = ‘POST, PUT, PATCH’
WP_REST_Server::DELETABLE = ‘DELETE’
WP_REST_Server::ALLMETHODS = ‘GET, POST, PUT, PATCH, DELETE’
callback 和 permission_callback 分别是回调函数,和权限检查回调函数。实际中有时不提供 permission_callback 也不会报错,有时却会报Waring警告,具体原因未知。如果,不需要权限控制,可以简单地指定为 ‘__return_true’。
实例演示
add_action('rest_api_init', function () { register_rest_route('foo', '/foo', array( 'methods' => 'GET', 'callback' => function () { return 'ffzhuti.com'; }, 'permission_callback' => '__return_true', )); });
上面是具体的用法,报错的原因呢,没有传 methods,默认的是 GET 方式,但是我一直在用 POST 提交,所以报错了,改正一下提交方式即可。
说白了,还是对这个用法不是那么熟悉,否则也不会有问题,多做主题吧。
评论抢沙发