包括META_QUERY过滤器的REST API请求

时间:2016-08-26 作者:shanebp

我正在使用WP REST API v.2创建一个web服务。在请求自定义帖子类型时,是否可以包括meta\\u查询过滤器之类的内容?

例如,如果我使用WP_Query, 我可以这样做:

$args = array(
    \'post_type\'         => \'proposal\',
    \'posts_per_page\'    => -1,
    \'meta_query\'    => array(
        array(
            \'key\'       => \'deadline\',
            \'value\'     => current_time( \'m/d/Y\' ),
            \'compare\'   => \'>=\',
        )
    )
);

$proposals_query = new WP_Query( $args );
是否可以在REST请求中完成相同的事情?示例目标是让服务知道客户端想要的响应只包括满足meta\\u查询条件的帖子。我想我可以在请求中发送一个变量,并使用该变量在自定义端点中构建meta\\u查询。。。?所以我想知道是否有一些推荐的方法可以继续。

1 个回复
SO网友:Mark Kaplun

也许不完全是你想要的答案,但它来了。。。。

在wordpress core中实现的RESTAPI是对API设计方式的嘲弄,使用得越少越好。显然,如果不使用能够完全满足您需要的核心API,那将是愚蠢的,但对于其他任何事情,您都应该编写自己的API。

rest API被设计为执行内部API的远程调用,而不是执行非常特定的操作。这导致了两大问题

信息泄露。API返回的信息比您需要的多得多,出于隐私和安全考虑,它返回的一些信息根本不应该返回。如果我知道作者ID和你的WP版本和插件是什么,我可能会在你的网站上策划一次攻击。

非最佳数据结构可能会导致您在服务器端进行两次DB查询,这将导致您执行两次http请求,这将花费更多的时间并增加服务器负载。你可以看到(我只是希望他们修复了它),因为它不属于帖子的DB结构,而是属于附件中的一个,所以必须执行额外的请求来获取帖子的缩略图。

您的问题提示进一步扩展问题,不仅用户会知道您使用的帖子类型,还知道您拥有哪些元数据及其格式。

您应该做的是编写自己的端点和API,只接受它需要的内容,并返回用户实际需要的内容。

顺便说一句,永远不要让任何人查询你的所有帖子,这只是对该网站进行简单DOS攻击的邀请。