【问题标题】:Why use Restful Webservices when the same thing can be done by servlets?当同样的事情可以由 servlet 完成时,为什么还要使用 Restful Webservices?
【发布时间】:2015-01-10 06:43:37
【问题描述】:

我是 restful web services 的新手。所以请多多包涵。我在 restful WS 上做一个小 POC。我以前曾在基于 SOAP 的服务 (Jax-RPC) 中工作。我发现的直接区别是这里没有 WSDL。由服务提供商托管的 URL 充当端点。对于基于jsonxml的请求参数,我们通常使用jacksonjersey,并在拦截请求的方法之前添加@get、@post等注释,我们可以从托管服务获取参数并使用他们是为了我们的利益。

现在,在我看来,我们可以在普通的 servlet 中做同样的事情。我们可以点击 url 并使用 request.getParameter("param")doPost() 方法中从中获取请求参数和值。为什么我们需要宁静的方式来获取这里的参数?

所以问题归结为:我们什么时候使用 restful web 服务,什么时候在这种情况下只使用简单、简单的 servlet?

请原谅我的问题直言不讳,我只是想了解更多。

【问题讨论】:

    标签: java web-services rest servlets


    【解决方案1】:

    servlet 可以正常工作。使用 Web 服务框架的好处与使用网站框架的价值相同。他们做一些平凡的举重。例如,JAX-RS 提供了更简单的 URL 路由,以及与 XML/JSON 和 Java bean 之间的简单绑定。

    除其他外,您“免费”获得。

    因此,框架可以让开发变得更容易,但它们肯定不是必需的。

    【讨论】:

    • 明确一点,JAX-RS 是一个规范,而不是一个框架。多个框架实现了 JAX-RS 规范:RESTEasy、Jersey 等
    • 这就是我想要的。现在我能够理解它如此流行的原因了。
    【解决方案2】:

    Restful WS 有更方便的方法来产生响应和监听路径 URL。因此,使用注释可以创建更精细的资源 URL 结构。使用 servlet,您必须自己解析查询字符串。支持的返回类型是另一个方便的加速。

    另一个问题是,JAX-RS 也运行在通常的 CDI 组件或 EJB 之上。您只需使用 JAX-RS 注释来注释业务方法。编写 servlet 意味着被锁定在实现 Servlets API 上。

    【讨论】:

      【解决方案3】:

      如果您只有一个端点,使用 RestEasy 或其他框架可能没有任何好处。

      但在现实世界中,这些 REST 端点堆积如山,框架可以帮助控制事情。此外,它们还提供类型检查等方面的额外帮助。

      以这个例子为例:

      @GET
      @Path("/app/{applicationId}")
      @Produces(MediaType.APPLICATION_JSON)
      public AppJSON updateStoreData(@PathParam("applicationId") Long appId, @QueryParam("platform") Platform platform) throws RestException {
      
              AppJSON application = applications.getApp(appId, platform);
              return application;
          }
      

      它描述了一个以 /app/applicationId 结尾的 GET 方法,其中 applicationId 应该是 Long 值。此外,它还有一个 Platform 类型的查询字符串参数。这些输入到一个服务方法中,该方法又返回一些对象。然后将输出转换为 JSON 格式。

      框架处理了很多事情:

      1. 将正确的 URL 映射到您的呼叫
      2. 自动解析路径和查询参数
      3. 类型检查和参数转换
      4. 返回值的转换
      5. 异常管理(以防万一)

      还有更多(如过滤和响应转换......)

      【讨论】:

      • 感谢您提供详细信息。确实很有帮助。
      猜你喜欢
      • 2011-04-18
      • 2020-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多