RESTful API复杂查询

时间:2016-05-11 15:09:04

标签: mysql json api rest

我有一个简单的目的地的宁静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 params。所以我有类似的东西:

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且复杂的条件,它会变得非常大而且很混乱。

无论如何,这就是问题所在。我应该保持原样。有什么更合适的方式来做这件事。 一些例子将不胜感激。

1 个答案:

答案 0 :(得分:0)

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