[英]API (REST) Filtering table names, complex queries
我正在创建API(以供这次使用)从移动客户端Android和iOS使用。 主要应用是一种电子商店。
我有news
端点,例如考虑主网址为http://consumer.com/api/v0/
目前,我有这样的端点来过滤新闻/news?actual=1&moderation=1 ....
GET
参数的简单数组,但是对此我有一些疑问。 不好的事情(我认为是)是过滤器参数( actual,moderation
)与数据库中的列名相同。
filter_actual
和filter_mooderation
转换为真实的表名,这现在不会filter_mooderation
我的应用程序,只需添加一层(中间件的功能)。 或有另一种方法可以做到这一点。 但是主要的问题是,如果我需要执行复杂的查询,请考虑下一个示例。
表格news
列company_id
, company
表格的列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
请更高级的API开发人员,就我的情况提出最佳选择。
谢谢。
公开真实的列名是个坏主意吗?
是不错的主意。 对于开发人员来说,了解确切发生的事情将是一件好事。 我会给专有名称而不是直接的列名称。 来自亚马逊和谷歌的许多API都在做同样的事情。
我该如何解决这个问题? 我有一个主意是要介绍一些中间件(无论如何是有可能的,但是我使用lumen的可能性很大),它将把一些假名(例如filter_actual和filter_mooderation)转换为真实的表名,这现在不会停止我的应用程序,只需添加一层(中间件的功能)。 或有另一种方法可以做到这一点。
很多时候,开发人员不喜欢在Get响应中发送正文,但是如果您觉得它会更复杂并破坏应用程序。 我建议这样做。 这是在使用请求正文进行调用HTTP GET之前的详细讨论
您可以添加许多验证以增强API的强度并处理不同的请求方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.