当前位置: 首页 > 知识库问答 >
问题:

Jersey REST客户端与ApacheHTTP客户端4.5 vs改进版

冷正青
2023-03-14

我读了很多文章来寻找java应用程序的最佳Rest客户机,最后我发现将Jersey与ApacheHTTP客户机4.5结合使用非常好,但在很多文章中,我发现现在改型是最好的(我没有提到Volley,因为在我的例子中,我不需要API支持缓存)。

对于java客户机应用程序,改型是否更好。还是对Android来说更好?为什么我以前没有找到这个比较。。它们无法比较?

我可以比较一下它们的性能、连接池、它们在哪一层工作、请求和响应的压缩、超时、反序列化吗?

HTTP3不支持连接池,这就是为什么Android系统通常使用改型的原因吗??因此,对于正常的java应用程序来说,它将导致连接泄漏,这是不实际的。

我的目标是找到性能最好的RESTAPI客户端,并支持大量连接。

提前谢谢你

共有2个答案

陆浩博
2023-03-14

虽然我花了一段时间才找到,但我已经找到了完美的REST客户机库,它使我们的开发具有声明性和简单性。我们可以在开发新的REST实现或API时将其作为标准。

它被称为Faign,由Netflix团队开发,并与SpringCloudNetflix合作。更多详情请参见项目现场。

一些功能包括:-与Jackson、Gson和其他编码器/解码器的集成-使用OkHttp进行网络通信,一个经过验证的HTTP库-与SLF4J绑定用于记录功能-基于接口的实现,最低限度的开发。以下是一个示例客户端

@FeignClient("stores")
public interface StoreClient
{
   @RequestMapping(method = RequestMethod.GET, value = "/stores")
   List<Store> getStores();

   @RequestMapping(method = RequestMethod.POST, value = "/stores/{storeId}", consumes = "application/json")
   Store update(@PathVariable("storeId") Long storeId, Store store);
}

在@aha的回答后,如下所述:

JRE/JDK:在这里你有充分的选择。

如果您想要一个快速简单的解决方案来实现一个没有SDK或JAX-RS接口的第三方应用编程接口,那么改装可能是不错的。

如果您正在使用Spring,并且没有JAX-RS接口,或者您不想购买JAX-RS,即也在服务器端使用它,那么Spring的RestTemboard是一个不错的选择。

如果您想在客户机和服务器之间共享接口定义,或者如果您都在使用JavaEE,那么JAX-RS(Jersey,RESTeasy,…)是一个不错的选择。

Faign的工作原理类似于改造和JAX-RS:简单的解决方案,可以在客户机和服务器之间共享接口定义,并且可以使用JAX-RS接口

魏雅惠
2023-03-14

你把不同的东西混合在一起。要提前解决问题,请执行以下操作:

改型是一个与RESTAPI交互的客户端库。因此,它提供了与Jersey、RESTeasy或Spring的RestTemplate相同的抽象级别。它们都允许使用类型安全API与RESTAPI交互,而不必处理诸如序列化、请求构建和响应处理等低级方面。

这些库中的每一个都使用下面的HTTP客户机与HTTP服务器进行实际对话。例如,您提到的ApacheHTTP客户机、OkHttp或JDK附带的普通老式HttpUrlConnection。

除了改型之外,您通常可以混合和匹配不同的REST客户端库和HTTP客户端,因为改型从版本2开始就对OkHttp具有硬依赖性(改型1.x可以使用Apache HTTP客户端、HttpUrlConnection或OkHttp)。

回到实际问题:何时选择什么。

Android:这里很简单,因为Android不支持Jersey和RESTeasy背后的API/技术JAX-RS。因此,改型或多或少是您唯一的选择,如果您不想直接使用HTTP,可能会选择截击。Spring也不可用,Spring Android被放弃。

JRE/JDK:在这里你有充分的选择。

  • 如果您想要一个快速而简单的解决方案来实现没有SDK或JAX-RS接口的第三方API,那么改型可能会很好

关于性能:这里的主要驱动因素是执行HTTP和(反)序列化所花费的时间。因为(反)序列化是由专门的库(如Jackson或protobuf)执行的,并且所有库都使用相同的(或者您至少可以让它们这样做),所以不应该有任何有意义的区别。

 类似资料:
  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 我注意到Rest客户端上有两个指南:MicroProfile和Vertx。既然微文件支持异步,那么使用基于Vertx的Rest客户端有什么好处?

  • URI 方法 URI() string 返回当前客户端使用的服务器地址。 SetURI 方法 SetURI(uri string) 设置当前客户端使用的服务器地址。如果你想要设置多个服务器地址,请使用 SetURIList 方法代替该方法。 URIList 方法 URIList() []string 返回当前客户端可使用的服务器地址列表。 SetURIList 方法 SetURIList(uriL

  • 客户端事件通过 SetEvent 方法进行设置。 客户端事件有两个,它们分别定义为: type onErrorEvent interface { OnError(name string, err error) }   type onFailswitchEvent interface { OnFailswitch(Client) } 因为 go 语言不需要显式实现接口的特点,所以这两

  • 创建客户端有两种方式,一种是直接使用特化的构造器函数,另一种是使用工厂构造器函数。 第一种方式返回的是具体的客户端结构体指针对象,第二种方式返回的是客户端接口对象。 使用特化的构造器函数创建客户端 特化的构造器函数有下面几个: func NewHTTPClient(uri ...string) (client *HTTPClient) func NewTCPClient(uri ...string

  • 客户端下载地址: windows 32位安装包 windows 64位安裝包 mac 安装包 Android App iOS App