使用Zend框架的iPhone Web服务


iPhone Web service using Zend framework

我对iPhone APP开发和PHP开发都很陌生,尽管我在。net技术方面有大约8年的经验。我们已经开始开发一款iPhone应用程序,它可以与facebook、twitter、four square、谷歌地理代码等第三方API进行交流。

现在,许多这些交互将不得不从APP本身发生,例如与facebook的初始身份验证,向facebook发布消息等。但是,由于各种原因,我们需要在服务器端进行一些交互。由于我是一名。net开发人员,我能想到的最明显的方法就是web服务。

出于各种原因,我们不想使用SOAP,我们尝试使用JSON为web服务开发我们自己的框架,但意识到在我们正在创建的框架中添加安全等特性太费力了。

所以我们决定使用像Zend这样的成熟框架,在那里我们可以实现安全性和其他开箱即用的功能。我们还必须决定是使用Zend Json-RPC还是使用Zend REST。我的问题是多方面的,请理解我是PHP开发的新手,所以我的一些问题可能是非常基本的。

  1. 我想知道任何开发iPhone应用程序与许多第三方API交互的人,你在服务器中投入了多少交互,除了使用web服务之外,还有其他有效的方式与服务器通信吗?
  2. 在Zend REST和Zend RPC之间,更安全,开发工作量更少,我猜Zend REST将更安全,Zend RPC将需要更少的开发工作量。
  3. 在您的开发中使用像Zend这样的既定框架是一个好主意吗?我们认为性能是最重要的,使用Zend会增加性能方面的优势吗?
  4. Zend Json-RPC调用有多安全,我如何在使用Zend Json-RPC时使服务调用更安全。

我是一个过渡到APP和PHP开发的。net开发人员,所以希望得到一些关于我们计划从这些领域有经验的人那里得到的整个方法的指导。

让我们看看如何最好地回答这个问题。

对1的回答

没有做过iPhone应用程序。在工作中,我构建/维护了一个adobeair客户端应用程序,它做了很多服务调用。我的经验法则是在客户端做任何有意义的事情(利用他们的资源),而不是一直唠叨服务器。通常我们的应用程序从服务器加载所有需要的信息,并且有足够的数据来做很多事情。每隔一段时间,它需要将这些信息发送回服务器以存储在一个安全的位置,但大多数事情如何工作的逻辑都在客户端应用程序中。

由于我们使用Adobe技术,我们使用AMF作为在客户端和服务器之间来回发送数据的传输协议。

对2的回答

安全将由你来处理。我将在第4步详细讨论这个问题。对于REST,你只是传递一个get/post/delete/等值不隐藏。XMLRPC只是传递一个任何人都可以看到的xml。现在,REST是一个单独的讨论。由于没有真正的标准,当人们谈论REST时,很难定义它是什么。如果你想使用REST,我不认为Zend_Rest在真正处理它方面做得很好。还有其他关注REST的框架可能更适合您。另外,如果安全性很重要,请使用HTTPS而不是HTTP。

如果你选择REST(正确的方式),我认为你会花很长时间来实现。

回答3

关键在于你如何构建它。我在工作中使用Zend提供上述服务。我以一种方式构建它,您可以使用JSONRPC或AMF(如果我愿意,我可以轻松添加XMLRPC或其他)来使用所有API并使用相同的资源。我在我们的AIR应用程序中使用AMF,在我的PHP站点/工具中使用JSONRPC。我更喜欢JSON,因为我觉得它比xml更轻,对我来说更容易使用。

接下来,我安排了cron作业,每天晚上我从数据库中将数千个查询值的数据缓存到内存中。我知道的数据不会在第二天改变,并且会经常使用。任何未被此进程缓存的内容都将在具有特定过期时间的客户端请求时单独缓存。这意味着什么,我所有的服务电话都非常快速和高效。很多时候,我甚至不需要访问数据库,所以在服务器端处理请求的时间是一瞬间。

另外,如果您使用Zend,不要将框架用于API,只需将服务器模块作为一个独立的部分使用。不要使用整个MVC堆栈,只需为您想要使用的每个协议创建一个独立的文件。我有一个json.php处理JSONRPC请求和一个AMF .php文件处理AMF请求。里面的两个文件都非常轻量级,它们只需要初始化Zend_Json_Server或Zend_Amf_Server,将类路径分配到我的类所在的位置并处理请求。

回答4

无论您使用哪种协议,您都必须像处理任何事情一样将安全性构建到其中。您也可以使用Zend身份验证模块和acl。如果要来回传递敏感数据,无论是json、xml还是rest,都需要对数据进行加密,否则会被别人看到。AMF是一种二进制格式,这使得这有点困难,但这不是重点。无论您选择哪种协议,您仍然需要构建一些身份验证机制,以确保其他人在没有访问权限的情况下不会使用它。

如果你正在寻找关于使用Zend构建Web服务的不同方法的更多信息,我认为Zend框架Web服务这本书是一个很好的资源。