You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hasura GraphQL使用动态变量做字符串搜索转REST接口问题求助

解决方案

1. 修正GraphQL查询模板

你需要把模糊匹配的%拼接逻辑、空值兼容逻辑直接写到查询内,不要在调用URL里处理,修正后的查询如下:

query MyQuery(
  $category_title: String = null,
  $search_title: String = null,
  $offset: Int = 0,
  $limit: Int = 10
) {
  products(
    order_by: {created_at: desc},
    where: {
      _and: [
        # 分类过滤:参数为空时自动跳过该条件
        {
          _or: [
            { category_title: { _ilike: "%" || $category_title || "%" } },
            { $category_title: { _is_null: true } }
          ]
        },
        # 搜索过滤:参数为空时自动跳过该条件,同时匹配标题+描述
        {
          _or: [
            { title: { _ilike: "%" || $search_title || "%" } },
            { description: { _ilike: "%" || $search_title || "%" } },
            { $search_title: { _is_null: true } }
          ]
        }
      ]
    },
    offset: $offset,
    limit: $limit
  ) {
    id
    available
    category_title
    description
    title
    sku
    images(where: {related_type: {_eq: "products"}}) {
      id
      file {
        id
        url
      }
    }
    variant_object: components(where: {field: {_eq: "variants"}}) {
      variant {
        id
        quantity
        sku
        title
        price: components(where: {field: {_eq: "price"}}) {
          money {
            amount
            currency
            id
            precision
          }
        }
      }
    }
  }
}

这里做了3处核心调整:

  • 给所有变量设置了默认值null,参数未传时自动生效
  • 用"%" || $变量 || "%"直接在查询内完成模糊匹配符拼接,无需调用方处理
  • 每个过滤条件都加了变量是null则跳过的逻辑,实现空值兼容

2. 配置REST端点

不要用路径参数传搜索值,路径参数无法友好传递空值,直接用查询参数配置端点即可:

  1. 端点路径设置为/api/rest/products
  2. 在Hasura的REST端点配置页,会自动识别你查询里的4个变量,不需要手动绑定路径参数,保持默认配置即可

3. 正确调用方式

直接传原始参数值即可,不需要加%也不需要写变量占位符:

  • 全量查询(不限制分类、不搜索关键词):https://xxxxx.hasura.app/api/rest/products?offset=0&limit=10
  • 仅搜索关键词为“耳机”:https://xxxxx.hasura.app/api/rest/products?search_title=耳机&offset=0&limit=10
  • 仅筛选分类为“数码配件”:https://xxxxx.hasura.app/api/rest/products?category_title=数码配件&offset=0&limit=10
  • 同时筛选分类+搜索关键词:https://xxxxx.hasura.app/api/rest/products?category_title=数码配件&search_title=耳机&offset=0&limit=10

错误原因说明

你之前的写法有两个核心问题:

  1. 把%和变量占位符$category_title直接写到了调用URL的参数值里,Hasura无法识别这种混合写法,会直接把整个字符串当成查询值,要么匹配不到结果,要么因为特殊字符解析失败报500错误
  2. 路径参数传递空值会导致URL格式错误,无法被正常解析

内容的提问来源于stack exchange,提问作者Ako Si

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:45:06