【问题标题】:RESTful API complex queriesRESTful API 复杂查询
【发布时间】:2016-09-07 02:17:29
【问题描述】:

我有一个简单的目的地 API。它是使用 Express 构建的,并使用 MySQL 数据库进行续集。 它有城市、国家和地区。城市属于国家,国家属于地区。

现在,我通常必须执行复杂的查找操作。例如:

获取/城市

{
  where: {
    name: {'$like': 'bue%'}
  },
  include: [{model: Country, where: {region_id: 1}}]
}

有了这个,我试图获取名称以“bue”开头的所有城市,但只有其国家/地区的 region_id 为 1。 如果我指定要返回的字段,这可能会向前迈出一步。模型有一些我可能不需要的文本字段,所以上面的查询变成:

{
  where: {
    name: {'$like': 'bue%'}
  },
  attributes: ['id', 'name'],
  include: [{
    model: Country, 
    attributes: ['id', 'name'],
    where: {region_id: 1}
  }]
}

这已经很复杂了。如果我想包含国家/地区的区域并在那里添加一些过滤器,请使用图片。

所以,我的问题是:我该如何传递这个复杂的查询? 现在我正在使用带有编码 json 的 url 参数。所以我有类似的东西:

where: {name: {'$like': 'bue%'}} => Becomes:

/cities?where=%7Bname%3A%20%7B%27%24like%27%3A%20%27bue%25%27%7D%7D

您可以看到,这会导致一个非常难处理的丑陋 URL。如果我的查询很复杂,那么 URL 就会变成怪物。如果我的 where 参数为 OR / AND 和复杂的条件,它会变得非常庞大和混乱。

无论如何,这就是问题所在。我应该保持原样吗?有没有更合适的方法来做到这一点。 一些例子将不胜感激。

【问题讨论】:

    标签: mysql json api rest


    【解决方案1】:

    一种“标准”解决方案是发布复杂查询(查询在 HTTP 正文中),让服务器将其存储在某处并返回引用存储查询的新 URL。之后,客户端可以在新的查询 URL 上发出 GET 以获取结果。

    【讨论】:

    • 这看起来比简单地在查询参数中发送编码的 json 更加牵强。
    猜你喜欢
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2014-01-10
    相关资源
    最近更新 更多