Servlet vs REST

2022-09-01 11:14:25

我需要在服务器端创建5个方法,这些方法将用于二进制数据。远程客户端是小程序和 JavaScript。客户端将文件发送到服务器,服务器必须分析这些文件,然后以 XML/JSON 格式返回响应。

所以我感到困惑 - 在这种情况下使用REST服务是好的做法吗?或者我应该使用 servlet?

我的同事告诉我:

“创建仅由一个应用程序使用的 REST 服务并不好。仅当许多应用将使用 REST 时,才必须创建它。与servlet相比,REST有一些缺点:REST比servlet慢;编写线程安全的 REST 比 servlet 更难”

但是,我看到使用Servlet的一些缺点:我需要发送一个我想调用的函数名称(即作为额外的HTTP参数发送函数名称),然后在方法内部执行以下开关:doPost

switch(functionName) {
 case "function1":
   function1(); 
   break;
 case "function2"
   function2(); 
   break;
//.... more `case` statements....

}

在REST的情况下,我可以简单地为不同的功能使用不同的URL。此外,在REST的情况下,从服务器返回JSON / XML更方便。


答案 1

你在这里混淆了两种范式:

  • REST是一种软件架构的“风格”;
  • Servlet 是一种服务器端技术。

例如,您可以使用 Servlet 实现类似 REST 的服务。


答案 2

好吧,我不同意你的同事的观点,即只由一个应用程序使用 rest 是不好的,因为将来你可能会决定让不同的应用程序使用相同的 rest api。如果我是你,我会选择纯粹的REST。为什么?

  1. 如果你使用一些框架来实现休息(比如apache cxfjage),你会得到很多东西开箱即用 - 你写POJO你得到休息,你得到序列化和反序列化,从我们说,JSON对象开箱即用(最终你需要实现一些JsonProviders,但这没什么大不了的)。

  2. 它的工作原理很直观(如果你设计好你的休息API)。

  3. JavaScript客户端非常容易使用(特别是如果你使用JQuery或类似的东西)

但是,这在很大程度上取决于您究竟想做什么,如果您有一些强大的事务逻辑,那么其余的可能非常棘手。如果您只要执行POST请求(不使用其他HTTP方法),则可能需要使用Servlet,因为您不必使用其他框架并创建更多依赖项。请注意,REST或多或少是一个架构概念,它与Servlet技术并不矛盾,如果你足够固执,你只能用servlets制作一个休息API:-)。希望我有所帮助。