Retrofit官方文档翻译

官方文档网址
http://square.github.io/retrofit/

介绍

  Retrofit 将你的 HTTP API 转换为 Java 接口。

	public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}

  Retrofit 类会生成一个 GitHubService 接口的实现对象。

	Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build(); GitHubService service = retrofit.create(GitHubService.class);

  创建的 GitHubService 中的每一个 Call 都会向远程 Web 服务端发送一个同步或异步的 HTTP 请求。

	Call<List<Repo>> repos = service.listRepos("octocat");

  使用注解描述 HTTP 的请求:

  • URL 参数替换和查询参数支持
  • 对象转换为请求体(如, JSON ,协议缓存区)
  • 多方面请求体和文件上传

API 声明

  接口方法及其参数注释说明如何处理请求。

请求方法

  每个方法必须有一个提供请求方法和相关的 URL 的 HTTP 注解。有 5 个内置的注解:GETPOSTPUTDELETEHEAD。资源相关的 URL 由注解指定。

	@GET("users/list")

  还可以在 URL 中指定查询参数。

	@GET("users/list?sort=desc")

URL 操作

  可以使用替换块和方法的参数动态更新请求的URL。替换块是一个由 { 和 } 包裹的字符字符串。对应的参数必须使用同样的字符串 @Path 注解。

	@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId)

  请求参数也可以增加。

	@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId,@Query("sort") String sort)

  对于复杂的请求参数组合可以使用 Map

	@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id")int groupId,@QueryMap Map<String,String> options);

请求体

  @Body 注解被指定作为 HTTP 的请求体去使用。

	@POST("users/new")
Call<User> createUser(@Body User user)

  对象可以在 Retrofit 实例中使用指定的转换器来进行转换。如果不添加转换器,则只能使用 RequestBody

格式转码和表单

  也可以声明方法发送格式变化和表单数据。

  当方法中提供了 @FormUrlEncoded 时,发送表单数据。@Field 的每一个键值对注解包含名称和提供的值。

	@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first,@Field("last_name") String last)

  当方法中提供了 @Multipart 时,表单请求被使用。 单子声明使用 @Part 注解。

	@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo,@Part("description") RequestBody description);

  表单部分使用 Retrofit 的一个转换器,也可以通过实现 RequestBody 处理它们自己的序列化。

头部操作

  可以使用 @Headers 注解为方法这只静态的头。

	@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
	@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);

  注意,头不会覆盖彼此,相同名字的所有头都被包含在请求中。

  一个请求头可以使用 @eader 注解动态更新。相应的参数必须提供 @Header。如果该值为空,头将会被忽略。否则,在数值上调用 toString 并且使用结果。

	@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)

  与查询参数相同,对于复杂的头组合,可以使用 Map

	@GET("user")
Call<User> getUser(@HeaderMap Map<String,String> headers)

  可以使用 OkHttp 拦截器指定需要添加到每一个请求的头。

同步与异步

  调用实例可以同步或异步执行。每一个实例只能使用一次,但调用 clone() 将创建一个可以使用的新的实例。

  在 Android ,回调将在主线程上执行,在 JWM ,回调将发生在执行 HTTP 请求的同意线程上。

Retrofit 配置

  Retrofit 是将 API 接口转换为回调对象的类。默认情况下, Retrofit 将提供平台合适的默认值并且允许自定义。

转换器

  默认情况下,Retrofit 只能将 HTTP 主体反序列化为 OkHttpResponseBody 类型,并且只能接收 @BodyResponseBody 类型。

  可以添加转换器来支持其他类型。可以方便的使用 6 个常用的模块模式序列化库。

  • Gson : com.squareup.retrofit2:cenverter-gson
  • Jackson : com.squareup.retrofit2:converter-jackson
  • Moshi : con.squareup.retrofit2:converter-moshi
  • Protobuf : com.squareup.retrofit2:converter-protobuf
  • Wire : com.squareup.retrofit2:cenver-wire
  • Simple XML : com.squareup.retrofir2:converter-simplexml
  • Scalars(primitives,boxed,and String):com.square.retrofit2:converter-scalars

      下面是使用 GsonConverterFactory 类生成 GitHubService 接口实现的例子,该接口使用 Gson 进行反序列化。
	Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
GitHubService service = retrofit.create(GithubService.class);

自定义转换器

  如果需要与使用 Retrofit 不支持的内容格式(如, YAML , txt , 自定义格式)的 API 或者希望使用实现现有格式的不同库,可以轻松创建自己的转换器。创建继承 Converter.Factory 类的类并且在创建适配器是传入实例。

下载

  Retrofit的源码、例子和解释都在 Github 上。

MAVEN

	<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>(insert latest version)</version>

GRADLE

	implementation 'com.squareup.retrofit2:retrofit:(insert latest version)'

  Retrofit请求的最低是 Java 7 或 Android 2.3 。

R8/PROGUARD

  如果使用 R8 或者 ProGuard ,则添加选项到文件中。

  如果使用 OKHTTP 和 Okio 的库,也需要同样的方法。

贡献

  如果希望贡献代码,可以通过 GitHub fork 库并发送提交请求。

  提交代码时,请尽一切努力遵循校友的约定和样式以确保保持代码的可能性。请确保代码的运行和测试完整。

  在代码被合并到项目之前需要遵守个人贡献者许可协议。

许可

  版权所有 2013 Square,Inc。

  根据 Apache 许可证 2.0 (License)获得许可;除非符合许可,否则不得使用此文件。可以在http://www.apache.org/licenses/LICENSE-2.0处获得许可。除非适用法律或书面同意,根据许可证发布的软件按 "AS IS" 基础上发布,没有任何形式的保证或条件,无论是明示还是暗示。

  有关许可证下的权限和限制的特定语言,请参阅许可证。

Retrofit官方文档翻译的更多相关文章

  1. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...

  2. Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)

    Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...

  3. 蓝牙4.0——Android BLE开发官方文档翻译

    ble4.0开发整理资料_百度文库 http://wenku.baidu.com/link?url=ZYix8_obOT37JUQyFv-t9Y0Sv7SPCIfmc5QwjW-aifxA8WJ4iW ...

  4. GreenDao官方文档翻译(上)

    笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...

  5. Aircrack-ng官方文档翻译[中英对照]---Airdecap-ng

    Aircrack-ng官方文档翻译---Airdecap-ng   Description[简介] With airdecap-ng you can decrypt WEP/WPA/WPA2 capt ...

  6. Aircrack-ng官方文档翻译[中英对照]---Airmon-ng

    Aircrack-ng官方文档翻译---Airmon-ng Description[简介] This script can be used to enable monitor mode on wire ...

  7. Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng

    Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...

  8. Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET

    OSNIT_百度百科 Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET Salt Stack 官方文档翻译 分类: 自动运维 2013-04-02 11 ...

  9. Spark官方文档翻译(一)~Overview

    Spark官方文档翻译,有问题请及时指正,谢谢. Overview页 http://spark.apache.org/docs/latest/index.html Spark概述 Apache Spa ...

随机推荐

  1. 图解Go select语句原理

    Go 的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的:当select中没有case语句的时候,会阻塞当前的groutine.所以,有人也会说select是 ...

  2. 知识阅读的好处你都了解吗?芒果xo来告诉你答案

    阅读www.mangoxo.com让人才思敏捷,杜甫曾说:读书破万卷,下笔如有神:阅读让人心情愉悦,蒙台居曾说过:再没有比读书更廉价的娱乐,更持久的满足了:阅读让人思维灵活,狄德罗曾说过:不读书的人, ...

  3. oo第八次作业

    oo第八次作业 第五次作业分析: 1.度量图: 2.类图: 第五次作业由于是第一次接触多线程,所以导致自己的经验不足,因此最终也没有完成作业,到最后任然不能实现三部电梯的有效调度,所以导致了这次作业的 ...

  4. JAVA实训第三次作业

    编写"学生"类及其测试类. 5.1 "学生"类: 类名:Student 属性:姓名.性别.年龄.学号.5门课程的成绩 方法1:在控制台输出各个属性的值. 方法2 ...

  5. W7500S2E串口转以太网

    概述 W7500S2E是一系列串口转以太网模块,支持TCP Server.TCP Client和UDP三种工作模式,串口波特率最高可达460,800bps,并提供配套的上位机配置软件,也可通过网页或A ...

  6. e.stopPropagation()兼容性处理

    使用jquery库,e.stopPropagation()兼容所有. 原生的就要这么写 function stopPropagation(e){ e=window.event||e; if(docum ...

  7. su与su -的区别

    su命令从普通用户切换到root用户下虽然可以切换,但是切换过后它所属的环境变量没有切换回原本属于root本身该有的环境变量,使用su - root 就可以切换会本来用户所属自身的变量

  8. 接口约束的另一种方法:Class类的isAssignableFrom

    Class类的isAssignableFrom是个不常用的方法,感觉这个方法的名字取得不是很好,所以有必要在此解析一下,以免在看源码时产生歧义,这个方法的签名如下: public native boo ...

  9. Python类——面向对象

    一.有关面向对象的一些知识 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” ...

  10. Parsing error was found in mapping #{}. Check syntax #{property|(expression), var1=value1, var2=val错误

    xml中有一个语法错误,整个都错了, 虽然只调用了select查询的方法,但是update中也有语法错误