首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的自定义API端点不能工作?

为什么我的自定义API端点不能工作?
EN

WordPress Development用户
提问于 2019-04-10 14:30:12
回答 1查看 15.4K关注 0票数 5

我尝试将这段代码包括在我的插件php文件中以及functions.php中。(最后,我希望它在插件的php文件中,但我还不确定是否可能,这可能是另一个问题的主题。)

这是一个非常基本的方法,就目前而言,我只是想得到一些内容的回应。

在这两种情况下,我得到了404响应。

代码语言:javascript
运行
复制
add_action( 'rest_api_init', function () {
  register_rest_route( plugin_dir_url(__DIR__).'my-project/api/v1/form', '/action', array(
    'methods' => 'GET, POST',
    'callback' => 'api_method',
  ) );
});

function api_method($data) {
    var_dump($data);
    return 'API method end.';
}

我尝试访问URL(在brower中或使用AJAX)

  • http://my-domain.local/wp-content/plugins/my-project/api/v1/form
  • http://my-domain.local/wp-content/plugins/my-project/api/v1/form/
  • http://my-domain.local/wp-content/plugins/my-project/api/v1/form/get
  • http://my-domain.local/wp-content/plugins/my-project/api/v1/form/get/

我想我漏掉了什么。

EN

回答 1

WordPress Development用户

发布于 2019-04-10 15:19:18

你的问题是:

代码语言:javascript
运行
复制
register_rest_route( plugin_dir_url(__DIR__).'my-project/api/v1/form', '/action', array(

具体而言,这是可能的:

代码语言:javascript
运行
复制
http://my-domain.local/wp-content/plugins/my-project/api/v1/form

这是非常不寻常的,而且与文档、手册和教程中的内容背道而驰。

REST端点位于REST中,REST位于rest_url()返回的URL中。他们住在yoursite.com/wp-json。端点不是完整的URL路径,也不是与主API断开的独立API。

相反,您需要根据名称空间和端点定义端点名称,并访问REST的发现机制中描述的正确URL。

如果我们用这个:

代码语言:javascript
运行
复制
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第一个参数是名称空间,而不是URL
  • 由于将v1组件放置在第一个参数中,而不是在第二个参数中,因此无法正确地将API的/form与v2分离开来。第一个参数是命名空间,第二个参数是路由。
  • /action/action,它不会被替换为GETPOST

回调函数也有问题:

代码语言:javascript
运行
复制
function api_method($data) {
    var_dump($data);

端点需要返回其数据,不能像var_dump那样直接输出数据,否则返回的数据是无效的JSON。

最后,方法参数不正确:

代码语言:javascript
运行
复制
'methods' => 'GET, POST',

methods不使用逗号分隔列表,也没有文档建议这样做。相反,使用REST提供的预定义值,如WP_REST_Server::READABLEWP_REST_Server::ALLMETHODS,这些都在手册和register_rest_route的正式文档中提到。

一个更好的登记途径是:

代码语言:javascript
运行
复制
    register_rest_route( 'my-project/form/v1', '/action', array(

给予我们:

example.com/wp-json/my-project/form/v1/action

注意我是如何删除插件URL和冗余的/api片段的(很明显,它已经是一个API了)

票数 4
EN
页面原文内容由WordPress Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://wordpress.stackexchange.com/questions/333999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档