我制作了一个 Java EE 6 应用程序,用户可以在其中浏览一组问题、添加新问题等。用户可以选择登录,以便他/她因添加问题或报告问题而获得“荣誉”。
现在我想制作一个 iPhone 应用程序,用户可以在其中执行几乎相同的操作。所以我认为答案是网络服务。我以前没有使用过 Web 服务,但我发现至少有替代方案:SOAP 和 REST。
我应该选择哪一个?我希望用户能够从应用程序登录并浏览数据库中的问题...几乎可以在网站上执行许多操作。
我不太了解它们带来的安全性和开销。
此外,我希望用户能够通过网络服务器检索问题列表并可以选择保存它,因此他/她不需要互联网,除非他/她想要更新它。我可以使用这两种网络服务来实现这一目标吗?
最佳答案
REST 的开销比 SOAP(WSDL 契约、XML 消息、支持框架)更少,因此当客户端是移动设备时,REST 似乎更合适。您可以使用 JAX-RS ( Jersey ) 在服务器端轻松创建 REST 服务。客户端请求由 url 结构和/或参数组成,如 http://yourserver/questions/view/342 (查看问题 342)或 http://yourserver/questions/search?q=REST+vs+SOAP (搜索有关 REST 与 SOAP 的问题)。响应可以是您想要的任何内容,但 XML 或 JSON 非常常见。
选择 REST 意味着您将严重依赖 HTTP 协议(protocol)。为了安全起见,常见的方法是使用 HTTP Basic authentication与 https 结合使用。基本身份验证意味着您将“身份验证:” header 添加到包含 Base64 编码的用户名:密码对的 HTTP 请求中。请注意,Base64 不会加密任何内容,它只是进行混淆。为了避免窃听,您至少需要使用 https这意味着请求是使用服务器的公钥加密的。这些请求只能用服务器的私钥解密。要使用 https,您需要 set up the server with a certificate .如果您想避免有关证书“不受信任”的警告,则需要由 recognized SSL certificate provider 颁发该证书。 .为了进行测试,您可以自己生成它。
最后,您询问了有关保存问题列表以供离线使用的问题。这是应用程序的问题,而不是服务的问题。为此,您需要将检索到的数据存储在设备上,并在设备离线时访问该数据。我不是 iPhone 开发人员,但我可以想象您可以使用平面文件或一些轻量级数据库来存储数据。当设备离线时,检索数据的应用程序组件应从网络访问切换到本地存储访问。此外,某些应用程序功能(例如添加问题)可能需要禁用。如果您不禁用这些功能,则需要临时存储用户输入的所有数据,并在设备再次上线时将其发送到服务器。这可能有点棘手,所以我的建议是稍后再做。
关于java - 制作网络服务,采用哪种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9031112/