Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php API(REST)筛选表名、复杂查询_Php_Android_Api_Rest_Http - Fatal编程技术网

Php API(REST)筛选表名、复杂查询

Php API(REST)筛选表名、复杂查询,php,android,api,rest,http,Php,Android,Api,Rest,Http,我正在为这次使用Android和iOS的移动客户端创建API。主要应用是一种电子商店 我有新闻端点,让我们考虑一下主要URL是http://consumer.com/api/v0/ 目前,我有这样的端点来过滤新闻/新闻?实际值=1和适度值=1 GET参数的简单数组,但我对此有一些疑问。我认为这样做的一个缺点是,过滤器参数实际、适度与数据库中的列名相同 公开真实的列名是个坏主意吗? 我怎样才能解决这个问题?我有一个想法是引入一些中间件,这是可能的,但我正在使用lumen it,它很有可能将一些假名

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

我有新闻端点,让我们考虑一下主要URL是http://consumer.com/api/v0/

目前,我有这样的端点来过滤新闻/新闻?实际值=1和适度值=1

GET参数的简单数组,但我对此有一些疑问。我认为这样做的一个缺点是,过滤器参数实际、适度与数据库中的列名相同

公开真实的列名是个坏主意吗? 我怎样才能解决这个问题?我有一个想法是引入一些中间件,这是可能的,但我正在使用lumen it,它很有可能将一些假名(例如filter_actual和filter_mooderation)转换为真实的表名,这不会阻止我的应用程序,只需再添加一层中间件即可。或者有另一种方法可以做到这一点。 <>但主要问题是,如果我需要执行复杂的查询,请考虑下一个例子。 表news有列company_id,company表有列blocked,此列描述公司是否被阻止

我需要获取未被阻止的公司的所有新闻,我已经执行了类似于此的伪查询SELECT*FROM news WHERE company_id IN SELECT id FROM company WHERE blocked=0的操作,我还没有检查,但我希望您有一个想法

如何为此类查询创建端点筛选器,现在,我引入了其他选项,比如非阻塞的公司,然后将其与其他过滤器/新闻一起传递?实际值=1&适度=1&非阻塞的公司=1,然后检查此参数是否与其他人一起传递,因此在代码中,它很快就会像许多特定于每个复杂查询的if语句

我曾经考虑过这样的查询/news?actual=1&moderation=1&blocked[companys:company\u id]=0我认为这很清楚。我使用来自其他表公司的字段作为新闻表company_id中的一列,该列存储公司的id

但它首先对我来说很难看,因为它在get请求中是一个非常复杂的查询,但对我来说最坏的一面是,我需要确切地知道表名、表列,现在这不是问题,因为这个API只用于移动客户端通信,不会公开打开,但我还是想制作可靠的API

这是我以前描述的坏主意吗? 如何灵活地组织API?API中的更改应尽可能少地影响前端 请,更高级的API开发人员,在我的情况下,建议什么是最好的选择

谢谢

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

这主意不错。这将有利于开发人员了解到底发生了什么。我会给出正确的名称,而不是直接的列名。亚马逊和谷歌的许多API都在做同样的事情

我怎样才能解决这个问题?我有一个想法是引入一些中间件,这是可能的,但我正在使用lumen it,它很有可能将一些假名(例如filter_actual和filter_mooderation)转换为真实的表名,这不会阻止我的应用程序,只需再添加一层中间件即可。或者有另一种方法可以做到这一点

很多时候,开发人员不喜欢在Get响应中发送正文,但若你们觉得它会更复杂,会破坏应用程序。我建议你这样做。在你打电话之前,这里有详细的讨论


您可以添加许多验证,使API更强大,并处理不同的请求场景。

谢谢您的回答,如何组合来自不同表的筛选器以形成复杂查询,可以使用/news吗?实际值=1&moderation=1&blocked[公司:公司id]=0,我不想从GET发出POST请求。GET参数足以实现我的目标。此外,使用GET请求发送正文比使用长查询字符串更难看。顺便说一句,它不会像示例+-2参数中那样长。实际公开真实列名是个坏主意,有效负载和模型应该分开。google或amazon直接公开他们的模型这一事实并不是争论的焦点,因为他们是大型组织,可以更改API,他们制定了规则。所有这些都是关于团队决策和您希望如何做的:。在这里,我们遵循同样的原则,所有的安全测试团队从未提交过任何bug。在写这篇评论之前,我在Jira搜索了几分钟。