为什么在Java中使用RESTful服务框架而不是vanilla servlet

2022-09-01 21:05:35

我知道关于可以用来在Java中执行RESTful服务的库有几个问题,但是将它们用于vanilla实现的价值是什么。我的意思是,如果我想创建Wim描述的url结构

  • www.example.com/images
  • www.example.com/images/id/num
  • www.example.com/images/tag/num
  • www.example.com/images/tag/num/num/num

将url模式/images映射到servlet并有一两行解析参数的url,而不是学习,实现和配置这些库之一来为您完成,不是更容易(对于未来的开发人员)和更快(实现和学习)

基本上,我问的是...使用RESTful Java框架的价值是什么?在实现中,对于一个简单的问题,这难道不会增加很多复杂性吗?

编辑:这个球衣代码处理得非常整洁,每个人都应该知道如何以servlet形式做到这一点,如果他们正在寻找库来为他们做这件事。

@Path("/helloworld")
public class HelloWorldResource {

    // The Java method will process HTTP GET requests
    @GET
    // The Java method will produce content identified by the MIME Media
    // type "text/plain"
    @Produces("text/plain")
    public String helloWorld() {
        // Return some cliched textual content
        return "Hello World";
    }
}

如果您要做的只是一个返回由URL参数驱动的文本的“服务”,那么纯文本返回,那么框架是必要的吗?


答案 1

将url模式映射到servlet并有一两行解析参数的url,而不是学习,实现和配置其中一个库来为您完成,这不是更容易(对于未来的开发人员)和更快(实现和学习)吗?
.../images

容易?这当然不容易编写 - 您必须自己完成所有路径提取,所有方法处理和所有内容类型协商(在两个方向上),以及所有cookie处理和对象反序列化/序列化 thunks和...好吧,许多低级的东西都需要测试和调试 - 或者更容易维护,因为JAX-RS接口允许您在资源级别(RESTful webapps的自然表征)而不是请求上操作;凭借丰富的经验,当概念模型和实现之间的差距最小时,维护是最容易的。它的实现速度也不快(因为JAX-RS的低级实现已经为你测试和调试过了;对你来说更少),而且学习它的成本不是很高,因为它是一个主要是声明性的API,几乎没有惊喜。

好吧,当您只处理简单的Web应用程序时,这些好处似乎并不多。毕竟,您可以在很短的时间内破解某些内容,并将由此产生的鞭打放到网上。然后,您必须祈祷自己做对了,而没有重大的意外漏洞利用或拒绝服务攻击途径。维护程序员必须了解您在添加小功能或修复错误时通过代码喷涂的那些正则表达式的作用(祝你好运!但是,随着Web应用程序变得越来越大,拥有一个经过测试的库来处理所有低级内容的好处确实胜出。

(在你问之前,你提到的一些库会愉快地将自己安装为servlet;这允许你的代码只描述servlet的业务逻辑,并声明如何以抽象的术语完成到连线的映射。这要容易得多。


答案 2

JAX-RS 是一个设计精良的 API,它使将 HTTP 请求映射到方法、从 HTTP 请求的各个部分提取参数、处理内容协商以及许多其他低级任务变得非常容易。

使用JAX-RS,主要是通过Apache CXF,大约两年了,我总是更喜欢它而不是普通的Servlet。