【问题标题】:How to negate a filter with JSONAPI requests in Drupal?如何在 Drupal 中使用 JSONAPI 请求否定过滤器?
【发布时间】:2020-07-10 04:11:22
【问题描述】:

我正在尝试构建一个查询,该查询返回路径不包含字符串的所有项目。

我可以轻松构建一个返回路径包含字符串的项目:

GET /url?filter[path][CONTAINS]=string

但是我怎样才能否定那个过滤器呢?

【问题讨论】:

  • 你的api实现JSON:API specification了吗?您的过滤策略是否遵循特定规范?或者您是否要求支持否定的过滤策略,您可能想要实施?
  • 是的,api 实现了 JSON:API 规范(我使用 Drupal 及其 JSONAPI 模块作为后端)。所以是的,我正在尝试找出一种支持否定的过滤策略。

标签: drupal json-api


【解决方案1】:

JSON:API specification 本身与所使用的过滤策略无关。它所做的只是建议使用查询参数filter 进行过滤:

过滤

filter 查询参数保留用于过滤数据。服务器和客户端应该使用此键进行过滤操作。

注意:JSON:API 与服务器支持的策略无关。 filter 查询参数可用作任意数量的过滤策略的基础。

https://jsonapi.org/format/#fetching-filtering

但是您在评论中提到您正在使用 Drupal 的 JSON:API。那个实现了一个明确指定的过滤策略。

Drupal 使用的过滤策略是围绕条件构建的,可以使用 ORAND 进行分组和组合。

条件是字段路径、运算符和值的组合。 It's documentation 列出了以下受支持的运算符:

  • '='(等于)
  • '<>'(不等于),
  • '>'(大于)
  • '>='(大于或等于)
  • '<'(小于)
  • '<='(小于或等于)
  • 'STARTS_WITH'
  • 'CONTAINS'
  • 'ENDS_WITH'
  • 'IN'
  • 'NOT IN'
  • 'BETWEEN'
  • 'NOT BETWEEN'
  • 'IS NULL'
  • 'IS NOT NULL'

对于大多数运营商来说,它支持他们的取反部分——比如'in''not in''IS NULL''IS NOT NULL''<''>='。但是一些运算符没有否定对应物:'CONTAINS''STARTS_WITH'''ENDS_WITH'。我想这是因为在支持的数据库上使用 'NOT CONTAINS' 运算符进行搜索可能非常昂贵。

由于文档也没有提到否定一个条件或一组条件的可能性,我认为 Drupal 的过滤策略不支持您的特定用例。

【讨论】:

    猜你喜欢
    • 2019-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2014-09-19
    相关资源
    最近更新 更多