你的问题是:
register_rest_route( plugin_dir_url(__DIR__).\'my-project/api/v1/form\', \'/action\', array(
具体来说,这是可能的:
http://my-domain.local/wp-content/plugins/my-project/api/v1/form
这是极不寻常的,与文档、手册和教程中的内容背道而驰。
REST API端点位于REST API上,REST API位于rest_url()
. 他们住在yoursite.com/wp-json
. 端点不是完整的URL路径,也不是与主API断开连接的独立API。
相反,您需要根据名称空间和端点定义端点名称,并访问RESTAPI发现机制中描述的正确URL。
如果我们使用此选项:
register_rest_route( plugin_dir_url(__DIR__).\'my-project/api/v1/form\', \'/action\', array(
那么我们可以预期:
example.com/wp-json/wp-content/plugins/my-project/api/v1/form/action
该URL相当长,存在许多问题:
- The first parameter is a namespace, not a URL无法正确区分API的v1和v2,因为
/form
组件已放入第一个参数,而不是第二个参数。第一个参数是名称空间,第二个参数是路由/action
是/action
, 它不能换成GET
或POST
回调函数也存在问题:
function api_method($data) {
var_dump($data);
端点需要返回其数据,它不能将其直接输出为
var_dump
否则返回的数据是无效的JSON。
最后,methods参数不正确:
\'methods\' => \'GET, POST\',
methods
不采用逗号分隔的列表,也没有文档建议这样做。相反,请使用REST API提供的预定义值,例如
WP_REST_Server::READABLE
或
WP_REST_Server::ALLMETHODS
, 这些都在手册和官方文件中提到
register_rest_route
.
更好的注册途径是:
register_rest_route( \'my-project/form/v1\', \'/action\', array(
给我们:
example.com/wp-json/my-project/form/v1/action
注意我是如何删除插件URL和多余的
/api
片段(很明显,它已经是一个API了)