27. Retrofit2 -- How to Use Dynamic Urls for Requests
2016-11-10 20:26
316 查看
27. Retrofit2 -- How to Use Dynamic Urls for Requests
Retrofittutorial用户案例场景
如何使用动态 Url
相对于基本地址,动态 Url 如何解析
观点
最终,
Retrofit 2为动态
url添加了一个额外的注解。在
Retrofit 1中,它是一个
hackround[1]。但在
Retrofit 2中,它是一个注解,用于端点申明。
该节显示了如何在单个请求上使用动态端点
url。
用户案例场景
猛然间,你可能一时还想不到需要定义动态端口url的场景。那我们就给出两个示例,来说明真实世界的场景。
个人图片:如果应用允许用户上传个人图片,那么这些图片可能被存储在不同的位置。例如自己的服务器,或其它云存储服务器等。
文件上传:文件可以被存储在不同的位置,它们需要用任意资源路径,可以灵活的下载。
即使你的应用中没有上述的两个假想的功能,但是,你应该有适当的心态来完成这两个示例。
如何使用动态 Url
其实,对于Retrofit 2来说,动态
Url只需要在端点定义中,添加一个使用
@Url标注的字符串参数就可以了。简单的代码胜过千言万语,翠花,上代码:
public interface UserService {
@GET
public Call<ResponseBody> profilePicture(@Url String url);
}
正如你所见,
@GET注解后,没有任何端点信息,而是把
@Url注解添加到方法本身了。
相对于基本地址,动态 Url 如何解析
这是另外一个值得注意的有趣的事情。Retrofit 2使用了
OKHttp的
HTTPUrl,它把每一个端点
Url都当成了网页上的一个链接(
<a href=""></a>)。
让我们看一个例子:一个指向 Amazon S3 个人照片存储的
Url。我们将有两个
Url:一个是基本
Url,一个是个人照片方法使用的动态
Url。
Retrofit retrofit = Retrofit.Builder()
.baseUrl("https://your.api.url/");
.build();
UserService service = retrofit.create(UserService.class);
service.profilePicture("https://s3.amazon.com/profile-picture/path");
// request url results in:
// https://s3.amazon.com/profile-picture/path
因为你设置了完全不同的
host和
scheme,因此,
OKHttp的
HTTPUrl将把方法中的
Url解析为动态
Url。
另一个例子:我们把个人照片的动态
Url的服务与基本
Url的服务设置为一致。
Retrofit retrofit = Retrofit.Builder()
.baseUrl("https://your.api.url/");
.build();
UserService service = retrofit.create(UserService.class);
service.profilePicture("profile-picture/path");
// request url results in:
// https://your.api.url/profile-picture/path
这次,最终的请求
Url由基本
Url加上动态定义的端点
Url所组成。这是因为
HttpUrl识别出我们并没有定义
scheme和
host,因此,它会把这两者结合到一起。
第三个例子:假设后端开发者给产品推送了一个更新通知,使用的是上一个例子的知识:
Retrofit retrofit = Retrofit.Builder()
.baseUrl("https://your.api.url/v2/");
.build();
UserService service = retrofit.create(UserService.class);
service.profilePicture("/profile-picture/path");
// request url results in:
// https://your.api.url/profile-picture/path
第三个例子和第二个例子的不同在于:在基本地址上,我们添加了
v2/,端点地址以
/开头。因为端点地址以
/开头,因此,端点地址会与基本地址中的
host部分结合,也就是与最终的请求网址为:
https://your.api.url/profile-picture/path。当端点地址以
/开头时,基本地址除
host之外的部分都会被忽略。
观点
你需要注意的是:正确创建请求Url。本文中的示例显示了一些常见的陷阱,这些陷阱很容易就被触犯。要么确保使用包含
scheme、
host和
path的完整
Url,要么在使用
Url前,好好的学习理解下。
我们建议:使用
Retrofit 2处理
Url时,要有足够的耐心。
不知道什么意思。
hack around是美国口语,有闲逛的意思。 ↩
相关文章推荐
- How To Use JavaSoft References For Caching @ JDJ
- How to use http-proxy for svn
- Supported Values for @SuppressWarnings & How to use @SuppressWarnings
- How to use the same thread function for multiple threads (safely)
- How To Use Box2D For Just Collision Detection with Cocos2D iPhone
- How to use Wise SetupCapture in the Wise Packager for Deployment Server to create an MSI
- How to use your Selenium Tests for automated JavaScript/AJAX Performance Analysis
- How to Use RSA Key for SSH Authentication
- How to Use HTML Codes for Special Characters-转载
- How To Use RMAN CONVERT DATABASE on Source Host for Cross Platform Migration
- How to use HttpSendRequestEx with password-protected URLs
- How To Use WordBasic Functions in an MFC Automation Client for Word 97, Word 2000, Word 2002, or Word 2003
- Notice: how to use Process.waitFor()?
- How To Use Dynamic Sql in Sql Server ?
- How to use a Ramdisk for Linux
- How to: Use Expression Trees to Build Dynamic Queries
- 如何在QT for S60 中使用pthread库(Carbide.c++) (How to use pthread in QT4.6 for S60)
- How to configure OpenFiler v2.3 iSCSI Storage for use with VMware ESX.
- Oracle: Howto use Cursors and Dynamic Cursors
- Item 36: Understand How to Use PLINQ for I/O Bound Operations(Effective C#)