2014-04-12 13 views
0

我想使用MySQL在Android上制作应用程序。是否有必要为应用程序开发使用基于HTTP的客户端/服务器通信?

我是新来的,所以我第一次看到很多其他的应用程序设计。我发现一件事是,如果他们必须使用数据库,他们经常使用RESTful设计,为客户端/服务器端通信定义一些HTTP协议的API。然后,有很多事情要做,比如:将资源映射到url,发送/接收doGet,doPost,..请求。

但我不明白。这是一个应用程序开发,而不是Web开发。为什么他们必须像网络一样制作应用程序?如果我不想使用phoneGap,HTML5,那种基于HTML的开发,我想写一个本地应用程序。我仍然希望在我的代码中分离客户端和服务器端,我的服务器端可以与MySQL通信,并且我的客户端将其显示给用户,并且它们全部用java编写。因为他们都是java,所以我有一个本地的想法:

“为什么我不直接从我的客户端调用我的服务器端代码?”

由于它全部在应用程序上运行,因此没有必要将其映射到用户访问的url中。但正如我所观察到的,大多数人不这样做。所以我想知道他们为什么不按我想的方式制作他们的应用程序?是否涉及安全?还是为了减少调试难度?还是为了以后扩展到其他平台如iOS?

我想知道他们为什么选择基于HTTP的客户端/服务器通信。

+0

HTTP更安全。如果您直接使用MySQL,攻击者可以轻松确定如何访问您的数据库,然后按照他们的意愿进行操作。通过在中间包含一个Web应用程序,您可以过滤允许的操作以保持数据库的安全和有效。 – mah

+0

如果您选择SQLite,您可以在本地拥有数据库,并且不执行任何http调用。我相信Android没有对MySQL的本地支持,因此http是一种常见的传输方式。 –

回答

0

这不仅仅是安全问题,因为无论哪种方式,您都会设置外部Socket到目的地,但也因为您的应用程序和MySQL之间没有本地方式进行通信。这种方式最常用的方法是使用网络服务,您可以在其中使用您最喜欢的语言(PHP,Python ...)实现一些代码的HTTP服务器,这些代码将处理客户提出的请求并相应地处理它们。该第三方脚本将与数据库进行通信。

如果你最终选择了这种方法,并且担心安全问题,我会选择一些非对称加密算法,如TLS,您可以使用公钥对消息进行加密,并在服务器端用私钥解密。

您可以毫无顾虑地共享公钥,您可以简单地嵌入代码中,但也可以将其放入Web服务器,并让您的客户端在每次连接时下载它。这样,如果有一天你改变它(例如由于Heartbleed情况),他们将始终拥有当前的公钥;否则,如果在代码中硬编码公钥,则需要更新应用程序。

一些有用的链接:

+0

谢谢你,所以这是为了安全。 我在问这个,因为我看到一些人直接在Android上成功使用jdbc获取MySQL。还有一个教程可以这样做:http://blog.csdn.net/conowen/article/details/7435231 但是如果数据库频繁访问,也不建议这样做。所以我会选择网络服务方式,并且您的信息非常有用。 –

相关问题