Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
Java 制作web服务,哪种方法?_Java_Iphone_Ios_Jakarta Ee_Soap - Fatal编程技术网

Java 制作web服务,哪种方法?

Java 制作web服务,哪种方法?,java,iphone,ios,jakarta-ee,soap,Java,Iphone,Ios,Jakarta Ee,Soap,我制作了一个JavaEE6应用程序,用户可以在其中浏览一组问题、添加新问题等等。用户可以选择登录,这样他/她就可以因添加问题或报告问题而获得“积分” 现在我想制作一个iPhone应用程序,用户可以在其中执行几乎相同的操作。因此,我认为答案是web服务。我以前没有使用过web服务,但我发现至少还有其他选择:SOAP和REST 我应该选择哪一个?我希望用户能够从应用程序登录,以及浏览数据库中的问题…您可以在网站上执行的大部分操作 我对他们引入的安全性和开销知之甚少 我还希望用户能够通过web服务器检

我制作了一个JavaEE6应用程序,用户可以在其中浏览一组问题、添加新问题等等。用户可以选择登录,这样他/她就可以因添加问题或报告问题而获得“积分”

现在我想制作一个iPhone应用程序,用户可以在其中执行几乎相同的操作。因此,我认为答案是web服务。我以前没有使用过web服务,但我发现至少还有其他选择:SOAP和REST

我应该选择哪一个?我希望用户能够从应用程序登录,以及浏览数据库中的问题…您可以在网站上执行的大部分操作

我对他们引入的安全性和开销知之甚少


我还希望用户能够通过web服务器检索问题列表,并可以选择保存它,这样他/她就不需要使用internet,除非他/她想更新它。我可以用这两种web服务实现这一点吗?

简短回答:是的,您可以用web服务实现这一点

Web服务只是您系统的一个门面——它们可以公开(或不公开)您想要的任何行为。如果您有安全方面的顾虑,那么无论如何都必须用这两种方法来解决

就我个人而言,我会使用RESTful方法,因为它通常更易于实现和使用。来自维基百科:

RESTfulWeb服务(也称为RESTfulWebAPI)是一种简单的web服务 使用HTTP和REST原则实现的服务。这是一个 资源集合,包括四个定义的方面:

  • web服务的基本URI,例如
  • web服务支持的数据的Internet媒体类型。这通常是JSON、>XML或YAML,但也可以是任何其他有效的Internet媒体类型
  • web服务使用HTTP方法(例如GET、>PUT、POST或DELETE)支持的一组操作
  • API必须是超文本驱动的。[11]
所以你会有一个URL,比如说
http://mywebsite.com/users
并对其执行HTTP操作(
GET
PUT
,等等)。例如,对
/users/17的
GET
请求可以返回用户17,而对其的
POST
请求将更新所述用户

至于登录,当用户“登录”时,您将调用一个GET方法,该方法发送username:password(可能是加密的)并返回登录令牌。每次用户执行一个操作时,您都会将请求作为附加参数发送所述令牌。

您可以查看前面的SO帖子以获得一些指导。我建议使用REST,它看起来不像SOAP那么凌乱,Java也支持它,如图所示


通过使用注释,您可以简单地创建一个用户将连接到的外观。反过来,这个门面将调用相关的逻辑,我认为您已经拥有了相关的逻辑。

在简单的搜索REST vs SOAP中,您最终将得到

还有很多其他的文章,甚至是深入的研究论文,所以这只是一个问题——你真的想认真对待你的研究吗


祝你好运

REST的开销比SOAP(WSDL契约、XML消息、支持框架)小,因此当客户端是移动设备时,REST似乎更合适。您可以使用JAX-RS()在服务器端轻松创建REST服务。客户端请求由url结构和/或参数组成,如(查看问题342)或(搜索有关REST与SOAP的问题)。响应可以是您想要的任何内容,但XML或JSON非常常见

选择REST意味着您将严重依赖HTTP协议。为了安全起见,常用的方法是与https结合使用。基本身份验证意味着您将“身份验证:”头添加到HTTP请求中,该请求包含Base64编码的用户名:密码对。请注意,Base64不加密任何内容,它只是混淆。为了避免窃听,您需要使用至少意味着使用服务器的公钥对请求进行加密。这些请求只能用服务器的私钥解密。要使用https,您需要。如果要避免有关证书“不受信任”的警告,则需要由管理员颁发证书。对于测试,您可以自己生成它


最后,您询问了如何保存问题列表以供脱机使用。这是应用程序的问题,而不是服务的问题。为此,您需要将检索到的数据存储在设备上,并在设备脱机时访问该数据。我不是iPhone开发者,但我可以想象你可以使用一个平面文件或一些轻量级数据库来存储数据。当设备脱机时,检索数据的应用程序组件应从网络访问切换到本地存储访问。此外,可能需要禁用某些应用程序功能,如添加问题。如果不禁用这些,则需要临时存储用户输入的任何数据,并在设备再次联机时将其发送到服务器。这可能有点棘手,所以我的建议是以后再做。

OK,这样用户也可以通过REST Web服务登录?然后,在他们经过身份验证和授权后,我返回布尔值还是什么?只要他们连接,他们就需要有互联网连接吗?Pjotr,在REST Web服务中,你不会有“正确”的登录-将更新答案。好的,那么我需要更改代码并在每个方法中使用令牌吗?或者有我可以使用的框架等吗?有很多RESTful框架/API可以使用,我认为这在另一个问题上更合适。