[TOC]
# [Android] 使用 Postman 测试 API
## 推荐优先了解
[Nougat HTTP 基础推荐文章]
[HTTP 基础知识]
## 简介
作为 **Android 开发者**,在编写应用页面时,页面中展示的数据往往是从 API 获取的。我们需要写代码,向 API 发送请求,请求成功后,才可以获取数据并使用。而 **Postman** 是**可以模拟向 API 发送请求**的工具。为什么需要先模拟发送请求,再写代码呢?因为如果直接写代码的话,是无法判断 API 的正确性的,假设 API 存在错误,那么根据 API 写的代码出错的几率也非常大。
**本文只涉及 PostMan 发送请求的简单使用,更多的功能介绍可以参阅 [PostMan DOC]**
## 安装方式
[官网下载] 选择对应的平台安装即可。
* MacOs
* Windows
* Linux
* Chrome 插件
## 软件界面

1. 更改发送请求的方法,一般 GET 或 POST 居多
2. 输入 API 文档所提供的 URL
3. GET 方法如果需要参数,使用这个按钮添加参数
4. 配置好当前的请求后,按下这个按钮发送这个请求
5. 填写 Headers,常用的有 Authorization ,Content-Type
6. 填写发送请求时的 Body 部分,一般作为 POST 方法需要的参数
细心的读者可能也有发现,当发送请求的方法为 GET 的时候,Body 是不可选中的,当方法为 POST 的时候,Body 又被激活了。其中的原因是:往往发生请求时,要传递一些参数,**GET 把参数包含在 URL 中,POST 通过 Body 传递参数,**所以,如果你的请求需要传递参数,那么 GET 就使用 Params,POST 就使用 Body。<br/>
下面通过 [趣编程 API] 做示范:
## 测试个人技术文章列表

API 文档中说明了发送请求需要的方法,Header,URL。我们在 Postman 里试一下。根据 API 文档提供的信息,填入以下数据
* 请求方法:GET
* URL:http://coolcodeapi.wodetiku.com/my/articles
* **Header:Authorization (复制了文档中的 Header-Example的值:Bearer+空格+Token)**
>**什么是 Token**
>1. 用户使用用户名密码来请求服务器
>2. 服务器进行验证用户的信息
>3. 服务器通过验证发送给用户一个 Token
>4. 客户端存储 Token ,并在每次请求时附送上这个 Token 值
>5. 服务端验证 Token 值,并返回数据 [Token 定义来自网络文章,点击阅读原文]
* Send:发送请求

如果你和我一样设置,并且按了 Send 按钮,那么应该会得到上图的结果看上去出了错误**Token Signature could not be verified.**无法验证令牌签名。<br/>
这里还需要关注一个东西:<br/>
**Status [HTTP状态码] 通过数字反映了这次请求的成功或失败的信息。**
通过错误信息判断,是我们的 Token 值出了问题。这也难怪,Header-Example 只是告诉了我们一个格式,而且 Token 值本身存在过期的问题(相信大家都有碰到过,登录一个网站一段时间之后,需要重新登录)现在我们需要一个正确的 Token 值,上文有提到,使用用户名密码请求服务器,服务器验证后会发送给用户一个 Token 值,所以我们去寻找请求成功后会返回 Token 数据的 API。
## 测试微信登陆

>POST 通过 Body 传递参数 这是之前提到的
这里需要再补充一点:我们传递的数据是 JSON 格式,所以在 Body 中我们需要这样设置

经过这两点的说明,那么我们应该可以得到下面这样的设置界面(**当你在 Body 中设置了 JSON 格式,那么 Headers 会自动添加 Content-Type:application/json 字段**)

* 请求方法:POST
* URL:http://coolcodeapi.wodetiku.com/login/wechat
* **Headers: Content-Type:application/json**
* **Content-Type:请求体/响应体的数据类型**
* **application/json:填入这个值就代表了 Body 中的数据是 JSON 类型**
* Body 里所要填的数据是这样的(根据 Request-Example)
{
"wechat_id": "123456",//建议将example中的值改为123456这个账号,不然没有文章数据
"wechat_info": {
"nickname": "shitlike",
"avatar_url": "dwadwadwadwa"
}
}

请求成功了,拿到了我们需要的 Token 值,那么赶紧复制 Token 到我们最开始的个人技术文章请求方法中吧。
## 重新测试个人技术文章列表

相信大家都可以得到这个界面。那么到了这一步,一次成功的 Postman 模拟请求就完成了,其实刚才也成功了一次,只不过我们的最终目的是希望获得个人文章列表的数据,所以目的达成了!接下来我们要做的当然是使用Retrofit在代码再实现一次这一过程,获取数据。如果你之前没有使用过Retrofit,推荐阅读[Retrofit初步使用]<br/>
*注:如果在使用过程中存在请求失败的情况,有两方面的原因:<br/>*
*1.自己在构造请求方法时,与 API 文档要求不符(请求方法不一样,没有传入正确的参数等)*
*2.服务器自身出了问题*
*所以建议大家检查自己设置的同时,也可以询问下导师,可以更好地解决问题*
## 测试[有道翻译 API]
如果读到这里,说明大家已经会设置 Body 参数使用 POST 请求了,这里再举例为大家说明一下,使用 GET 请求时设置 Params 参数。<br/>
*注:使用有道翻译 API 需要注册,所以每个人的参数不一样,这里只是为了演示 GET 方法带有 Params 参数,如果大家需要长期使用,请自行注册一个账号,很容易注册。*
>请求方法:GET
>URL:http://fanyi.youdao.com/openapi.do
>(当你设置 Params 的时候, URL 就会发生变化,而不是手动加上去的)
>参数(Params):
>keyfrom:Fragment
>key:1585625488
>type:data
>doctype:json
>version:1.1
>q:要翻译的文本 这里我打算翻译 “Android” 这个单词
按照上面的信息,我们在 Postman 中构建这个 GET 请求

请关注 **Status** 和返回的 **Body** 数据,相信你一定也可以获取成功响应的翻译数据。
## 总结
经过本篇文章的学习,希望可以帮助你更快地测试所要使用的 API。Postman 的功能远远不止这些,由于我目前的水平有限,没有办法很好地演示更多的功能,希望你之后能学习到更多实用的技巧,如果可以的话,也希望你可以留言或者写新的文章分享,谢谢。
[有道翻译 API]:http://fanyi.youdao.com/openapi?path=data-mode
[Nougat HTTP 基础推荐文章]:http://www.kancloud.cn/yaro/nougat/269751
[趣编程 API]:http://apidoc.tech/coolcode
[官网下载]:https://www.getpostman.com/
[PostMan Doc]:https://www.getpostman.com/docs/
[Token 定义来自网络文章,点击阅读原文]:http://www.jianshu.com/p/576dbf44b2ae
[HTTP状态码]:http://tool.oschina.net/commons?type=5
[HTTP 基础知识]:http://www.jianshu.com/p/a6d086a3997d
[Retrofit初步使用]:http://blog.qiji.tech/archives/8758
