有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java制作web服务,采用哪种方法?

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

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

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

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

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


共 (4) 个答案

  1. # 1 楼答案

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

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

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

    A RESTful web service (also called a RESTful web API) is a simple web service implemented using HTTP and the principles of REST. It is a collection of resources, with four defined aspects:

    • the base URI for the web service, such as http://example.com/resources/
    • the Internet media type of the data supported by the web service. This is often JSON, >XML or YAML but can be any other valid Internet media type.
    • the set of operations supported by the web service using HTTP methods (e.g., GET, >PUT, POST, or DELETE).
    • The API must be hypertext driven.[11]

    所以你有一个URL,比如说http://mywebsite.com/users,然后对它们执行HTTP操作(GETPUT,等等)。例如,对/users/17GET请求可以返回用户17,而对其的POST请求将更新所述用户

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

  2. # 2 楼答案

    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协议。为了安全起见,常用的方法是将HTTP Basic authentication与https结合使用。基本身份验证意味着您将“身份验证:”头添加到HTTP请求中,该请求包含Base64编码的用户名:密码对。请注意,Base64不加密任何内容,它只是混淆。为了避免窃听,您需要至少使用https,这意味着请求是使用服务器的公钥加密的。这些请求只能用服务器的私钥解密。要使用https,您需要set up the server with a certificate。如果要避免有关证书“不受信任”的警告,则需要由recognized SSL certificate provider颁发证书。对于测试,您可以自己生成它

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

  3. # 3 楼答案

    您可以查看this上一篇文章,以获得一些指导。我建议使用REST,它似乎没有SOAP那么凌乱,Java也支持它,如图here

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

  4. # 4 楼答案

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

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

    祝你好运