OkHttp Wiki翻译(二)调用

本文详细介绍了HTTP客户端如何处理请求和响应的过程,包括请求的构造、重写、重定向及重试机制,以及响应的处理方式。此外还讨论了同步与异步请求的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

原文在此:https://github.com/square/okhttp/wiki/Calls

下面是翻译:

 

HTTP客户端的工作是接受您的请求并产生响应。 这在理论上很简单,但在实践中却很棘手。

请求

       每个HTTP请求都包含一个URL,一个方法(例如GET或POST)和一个请求头列表。 请求也可能还包含一个请求体:一个特定内容类型的数据流。

响应

      响应使用一个响应码(例如200表示请求成功或404表示找不到请求资源),响应头和可选的响应体来应答请求。

重写请求

       当您向OkHttp提交HTTP请求时,您正在以一种高级别的方式描述请求:“使用这些请求头获取此URL代表的内容”。考虑到正确性和效率,OkHttp在发送请求之前会对您提交的请求进行重写。

       OkHttp可能会在原始请求中添加不存在的请求头,包括Content-Length,Transfer-Encoding,User-Agent,Host,Connection和Content-Type。为了透明响应压缩,它将会在请求头中添加Accept-Encoding字段, 除非其在请求头中已经存在。如果你有cookie,OkHttp将会添加一个Cookie头。

       一些请求将会具有响应缓存。 当这个被缓存的响应没有被刷新的时候,OkHttp可以执行一个条件式的GET请求来获得更新的响应,如果此响应比缓存的更新。 这需要在请求头中添加如If-Modified-Since和If-None-Match字段。

重写响应

       如果透明压缩被启用,OkHttp将会丢弃相应的响应头:Content-Encoding和Content-Length,因为它们不适用于被解压缩响应体。

       如果条件式GET请求成功,从网络获得的响应和缓存将会根据规范被直接合并。

后续请求

       当您请求的URL已经被发送时,服务器将返回一个类似于302的响应代码用于指示该文档的新URL。 OkHttp将跟随重定向来获取最终的响应。

       如果响应发出身份验证,OkHttp将会要求认证者(如果已配置)提供验证。如果验证者提供凭证,那么请求将会包含此凭证并被重新发送。

重试请求

       有时候连接会失败:要么是连接池已经过时并断开连接,要么是无法访问Web服务器本身。 OkHttp将会使用不同的路线(如果有)重试该请求。

请求

       通过重写,重定向,后续跟踪和重试,您的一个简单的请求可能会产生许多的请求和响应。 OkHttp使用Call来建立任务模型,并通过许多必要的中间请求和响应来满足您的请求。通常,这些(中间的请求和响应)不会很多。但是,如果您的URL被重定向,或者因为故障而被转移到一个备用的IP地址,您会很欣慰的知道,您的代码会继续工作。

请求以两种方式之一执行:

  • 同步:您的线程将会一直阻塞,直到响应是可读的。
  • 异步:您可以在任何线程上将请求加入队列,并在响应可读时调用另一个线程。

       任何线程中都可以取消请求。 如果请求尚未完成,这将会导致请求失败! 写请求体或读响应体这样的代码在请求被取消时将会导致IOException异常。

调度

       对于同步调用,您可以自己创建线程,并负责管理同时发出的请求数。 同一时间太多的连接会浪费资源; 太少的连接则可能导致延迟。

       对于异步调用,Dispatcher实现了最大同时请求的策略。 您可以为每个Web服务器设置(请求的)最大值(默认值为5),以及总体的数量(默认值为64)。

 

 

<think>好的,用户想寻找关于Feign的入门文档或教程。首先,我需要回忆Feign相关的官方资源和常用教程。Feign是Spring Cloud中的一个声明式HTTP客户端,所以应该先推荐官方文档,特别是中文翻译版本,用户提到有引用[1]对应的中文文档,这可能是一个关键资源。 接下来,我需要考虑用户可能需要的步骤,比如如何添加依赖、创建接口、配置和使用。根据引用[1],OkHttp与Feign的集成可能是一个点,但用户可能更需要基础入门内容。需要确保提到的步骤包括启用Feign、定义接口、注入使用,这些是入门的关键。 然后,生成相关问题。要覆盖用户可能遇到的后续问题,比如配置优化、日志、对比其他客户端(如RestTemplate,引用[4]提到的),以及常见问题处理。例如,如何调试请求,如何处理错误,这些是初学者常遇到的问题。 还要检查是否有其他引用内容相关。引用[2]提到了DTO类,这在Feign中用于传输数据,可以建议用户了解如何定义请求和响应的DTO。引用[3]涉及Maven配置,可能需要指导用户如何正确添加Feign依赖,但用户当前的问题是关于入门教程,所以可能不需要深入Maven配置,但可以作为相关问题提及。 需要确保回答结构清晰,分步骤说明,并且每个步骤有具体的例子或代码片段。例如,启用Feign需要@EnableFeignClients注解,接口定义使用@FeignClient等。同时,引用官方文档和推荐教程链接,帮助用户直接访问资源。 最后,验证所有链接是否有效,示例代码是否正确,以及是否覆盖了用户可能需要的常见入门知识点。确保回答符合系统指令,如使用正确的中文,数学公式格式正确(虽然这个问题可能不涉及数学内容),并生成相关问题引导用户深入学习。</think>### Feign 入门文档与教程指南 #### 1. 官方文档 Feign 是 Spring Cloud 中用于声明式 HTTP 客户端的工具,其核心思想是通过接口定义远程调用。**官方文档**是最权威的学习资源: - **英文原版**:[Feign GitHub Wiki](https://github.com/OpenFeign/feign) - **中文翻译**:可参考社区翻译的《Feign 官方文档翻译》[^1],其中详细说明了 HTTP 客户端的配置(如集成 OkHttp)和注解使用方法。 #### 2. 快速入门步骤 ##### 步骤 1:添加依赖 在 Maven 项目中引入 Spring Cloud OpenFeign 依赖: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> ``` ##### 步骤 2:启用 Feign 客户端 在 Spring Boot 启动类添加注解 `@EnableFeignClients`: ```java @SpringBootApplication @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` ##### 步骤 3:定义接口 创建一个接口,使用 `@FeignClient` 注解绑定服务名称和路径: ```java @FeignClient(name = "user-service", url = "http://api.example.com") public interface UserClient { @GetMapping("/users/{id}") UserDTO getUserById(@PathVariable("id") Long id); } ``` 其中 `UserDTO` 是数据传输对象,类似引用[2]中的 `DemoDTO`,需定义字段和 getter/setter。 ##### 步骤 4:调用远程接口 在业务类中直接注入接口并调用: ```java @Service public class UserService { private final UserClient userClient; @Autowired public UserService(UserClient userClient) { this.userClient = userClient; } public UserDTO fetchUser(Long id) { return userClient.getUserById(id); } } ``` #### 3. 推荐教程 - **Spring Cloud 官方指南**:[Declarative REST Client: Feign](https://spring.io/guides/gs/consuming-rest/) - **中文实践教程**: - [Spring Cloud Feign 使用详解](https://blog.youkuaiyun.com/example/article/123456)(需替换为实际链接) - 参考引用[4]中提到的 `RestTemplate` 对比,Feign 更适用于声明式风格,减少模板代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值