带有有条件要求的参数的自定义REST API POST终结点

时间:2020-09-26 作者:Toby Osborne

我花了6个小时试图弄明白这一点,我很可能是个哑巴。

我正在尝试创建一个POST端点,该端点具有基于另一个参数的值所需的参数。

register_rest_route(
        \'thing/v1\',
        \'/thingy/(?P<foo>\\d+)\',
        array(
            \'methods\'  => \'POST\',
            \'callback\' => array( $this, \'create_something\' ),
            \'args\'     => array(
                \'foo\' => array(
                    \'required\' => true,
                    \'type\'     => \'integer\',
                ),
                \'bar\' => array(
                    \'required\' => true, // make this false if foo = 3
                    \'type\'     => \'integer\',
                ),
            ),
        )
    );
我尝试了一些方法,包括:

将回调设置为所需值。(它没有进入函数,所以我想它不喜欢回调)我在内核中寻找一个过滤器或挂钩,它可以让我动态地更改所需的值(肯定有点黑客),但我找不到任何东西。

我只是想问一下,万一我遗漏了一些明显的东西。

谢谢

1 个回复
SO网友:Ján Janočko

这就是我如何使用validate回调解决类似问题的方法-这是代码的一部分,其中bar 参数定义为:

\'bar\' => array(
     \'default\' => FALSE,
     \'validate_callback\' => function($param, $request, $key) {
         if ($request[\'foo\'] == 3)
             return ($param !== FALSE);
         return FALSE;
     }
),
Thedefault 参数导致调用validate回调,即使请求参数bar 未提供。然后,在“仅当满足条件时才验证回调”中,检查参数是否具有非默认值。

相关推荐

安装和卸载WP-REST-API插件后API返回空白响应

WordPress/WooCommerce API在我的网站上被破坏:http://example.com/wp-json/wp/v2/posts 和http://example.com/wp-json/wc/v2/products 两者都返回空白响应。运行Python请求response = requests.get(\'http://<mysite>.com/wp-json/wp/v2/posts\', auth=HTTPBasicAuth(*auth)) 给出的响应(在调试器中