【发布时间】:2015-12-31 16:31:46
【问题描述】:
我正在创建用于从移动客户端 Android 和 iOS 消费(这次)的 API。主要应用是一种电子商店。
我有 news 端点,让我们考虑例如主 url 是 http://consumer.com/api/v0/
目前我有这样的端点来过滤新闻/news?actual=1&moderation=1 ....
GET 参数的简单数组,但我对此有一些疑问。坏事(我认为是这样)是过滤器参数(actual,moderation)与数据库中的列名相同。
- 公开真实的列名是个坏主意吗?
- 我该如何解决这个问题?我有一个想法是引入一些中间件(无论如何都是可能的,但我使用 lumen 很有可能)会将一些假名称例如
filter_actual和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)的字段在news 表(company_id)中存储公司ID。
但首先对我来说它看起来很丑,因为它是获取请求中相当复杂的查询,但对我来说主要的不好的一面是我需要确切地知道表名,表列,现在这不是问题,因为此API仅用于移动客户端通信,不会公开开放,但我还是想做可靠的API
- 像我之前描述的那样是个坏主意吗?
- 如何组织我的 API 使其灵活(API 的更改应尽可能减少对前端的影响)
请更高级的 API 开发人员提出对我来说最好的选择。
谢谢。
【问题讨论】: