Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jersey REST客户端与ApacheHTTP客户端4.5 vs改进版_Java_Rest_Retrofit_Apache Httpclient 4.x_Jersey Client - Fatal编程技术网

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

Java Jersey REST客户端与ApacheHTTP客户端4.5 vs改进版,java,rest,retrofit,apache-httpclient-4.x,jersey-client,Java,Rest,Retrofit,Apache Httpclient 4.x,Jersey Client,我读了很多文章来寻找最好的Rest Client for java应用程序,最后我发现将Jersey与ApacheHTTP Client 4.5结合使用非常好,但在很多文章中我发现现在改型是最好的(我没有提到) 截取,因为在我的例子中,我不需要API支持缓存 改型对java客户机应用程序更好吗?或者只是对android更好?为什么我以前没有找到这个比较。它们无法比较 我可以比较一下它们的性能、连接池、它们在哪一层工作、请求和响应的压缩、超时、反序列化吗 HTTP3不支持连接池,这就是为什么安卓系

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

改型对java客户机应用程序更好吗?或者只是对android更好?为什么我以前没有找到这个比较。它们无法比较

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

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

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


提前谢谢你

你把不同的东西混在一起了。要事先把事情弄清楚:

是一个与REST API交互的客户端库。因此,它提供了与或Spring相同的抽象级别。它们都允许使用类型安全API与REST API交互,而无需处理序列化、请求生成和响应处理等低级方面

这些库中的每一个都使用下面的HTTP客户机与HTTP服务器进行实际通信

除了改型之外,您通常可以混合和匹配不同的REST客户端库和HTTP客户端(对于改型1.x,您可以使用ApacheHTTP客户端、HttpUrlConnection或OkHttp)

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

Android:这里很简单,因为Jersey和RESTeasy背后的API/技术在Android上不受支持。因此,改型或多或少是您唯一的选择,如果您不想直接与HTTP通话,可能除了截击之外。Spring也不可用

JRE/JDK:在这里您可以选择全部选项

  • 如果您想要一个快速、简单的解决方案来实现没有SDK或JAX-RS接口的第三方API,那么改型可能会很好
  • 如果您使用的是Spring,并且没有JAX-RS接口,或者您不想购买JAX-RS,也就是说在服务器端使用它,那么Spring的RestTemplate是一个不错的选择
  • 如果您想在客户机和服务器之间共享接口定义,或者如果您都在使用JavaEE,那么JAX-RS(Jersey,RESTeasy,…)是一个不错的选择

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

我花了一段时间才找到,但是我找到了一个完美的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);
}
@FeignClient(“商店”)
公共接口存储客户端
{
@RequestMapping(method=RequestMethod.GET,value=“/stores”)
列出getStores();
@RequestMapping(method=RequestMethod.POST,value=“/stores/{storeId}”,consumes=“application/json”)
存储更新(@PathVariable(“storeId”)Long-storeId,Store-Store);
}
在@aha的回答后,如下所述:

JRE/JDK:在这里,您可以选择全部选项

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

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

JAX-RS(泽西岛、, 如果您想共享接口,RESTeasy,…)是一个不错的选择 客户机和服务器之间的定义,或者如果您都使用JavaEE 无论如何


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

如果我同时有大量请求,Reformation 2是一个好选择吗,它支持压力测试吗,你有参考基准吗?Reformation是OkHttp之上的一个薄层。因此,直接查看OkHttp可能更为相关。作者的基准:。关于压力测试:你有什么想法?感谢你花时间解释所有这些。我的想法是,我想使用基于okhttp3的改型2,但我担心如果他们不能同时支持大量请求.那么,不要只写“最佳”,还要写“最高吞吐量”不要列出很多部分相互冲突的标准——例如,反序列化的最佳工具可能在吞吐量方面更差。并提供您认为太慢或至少对您的情况来说是典型的示例代码,以便帮助其他人为您优化。您不明白StackOverflow的含义,是吗?您是否想过为什么在你悬赏之前没有人想回答这个问题?因为除了你之外,没有人能真正回答这个问题,但标准不明确——这正是最终发生的事情。Faign占据了Jersey/Jackson的堆栈。但是为什么除了RestTemplate之外,你还要写Faign呢?