繁体   English   中英

API(REST)过滤表名称,复杂查询

[英]API (REST) Filtering table names, complex queries

我正在创建API(以供这次使用)从移动客户端Android和iOS使用。 主要应用是一种电子商店。

我有news端点,例如考虑主网址为http://consumer.com/api/v0/

目前,我有这样的端点来过滤新闻/news?actual=1&moderation=1 ....

GET参数的简单数组,但是对此我有一些疑问。 不好的事情(我认为是)是过滤器参数( actual,moderation )与数据库中的列名相同。

  1. 公开真实的列名是个坏主意吗?
  2. 我该如何解决这个问题? 我有一个主意是要介绍一些中间件(无论如何是有可能的,但是我使用lumen的可能性很大),它将把一些假名(例如filter_actualfilter_mooderation转换为真实的表名,这现在不会filter_mooderation我的应用程序,只需添加一层(中间件的功能)。 或有另一种方法可以做到这一点。

但是主要的问题是,如果我需要执行复杂的查询,请考虑下一个示例。

表格newscompany_idcompany表格的列blocked ,此列描述了公司是否被阻止。

我需要获取未被阻止的公司的所有新闻,我已经执行了类似以下的伪查询: SELECT * FROM news WHERE company_id IN (SELECT id FROM companies WHERE blocked=0) (我尚未检查,但希望您能理念)

如何为这种类型的查询设计端点过滤器,现在我介绍了其他选项,例如non_blocked_companies ,然后与其他过滤器/news?actual=1&moderation=1&non_blocked_companies=1一起传递,然后检查此参数是否与其他参数一起传递,因此在代码中很快就会看起来像很多针对每个复杂查询的if语句。

我曾考虑过类似/news?actual=1&moderation=1&blocked[companies:company_id]=0我认为这很清楚。 我使用其他表( companies )中的字段来存储公司ID的news表( company_id )中的一列。

但是首先对我来说这很丑陋,因为它在get请求中是一个非常复杂的查询,但是对我而言,主要的不利方面是我需要确切地知道表名,表列,现在这不是问题,因为此API是仅用于移动客户端通信,不会在公共场合开放,但我还是想制作可靠的API

  1. 如我之前描述的,这是个坏主意吗?
  2. 如何组织API以保持灵活性(API的更改应尽可能少地影响前端)

请更高级的API开发人员,就我的情况提出最佳选择。

谢谢。

公开真实的列名是个坏主意吗?

是不错的主意。 对于开发人员来说,了解确切发生的事情将是一件好事。 我会给专有名称而不是直接的列名称。 来自亚马逊和谷歌的许多API都在做同样的事情。

我该如何解决这个问题? 我有一个主意是要介绍一些中间件(无论如何是有可能的,但是我使用lumen的可能性很大),它将把一些假名(例如filter_actual和filter_mooderation)转换为真实的表名,这现在不会停止我的应用程序,只需添加一层(中间件的功能)。 或有另一种方法可以做到这一点。

很多时候,开发人员不喜欢在Get响应中发送正文,但是如果您觉得它会更复杂并破坏应用程序。 我建议这样做。 这是在使用请求正文进行调用HTTP GET之前的详细讨论

您可以添加许多验证以增强API的强度并处理不同的请求方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM