zoukankan      html  css  js  c++  java
  • Idea rest client 使用(全) 真香

    看了网上好多的 idea rest client 讲解,大多都只是讲了它如何如何好,都只是简单的测了一个 json 的接口而已,个人实践了一把,里面还是有挺多坑的,但不得不说,那个脚本化处理请求的功能确实挺棒。

    脚本化配置确实很方便,linux 使用文件来配置环境变量代替了windows 的可视化配置,sublime 使用文件来配置它的所有配置项取代传统的可视化配置,这种文件化的方式可以做到可迁移,多端即时同步和多人共享,有过经历的人自然懂我在说什么。

    本文内容:

    关于脚本化 mock 的实践,免复制 token 实践,文件传输实践

    关于语法

    请求的语法基本上和 http 协议内容是一致的,结构如下

    ### 使用三个 # 来分隔多个请求
    GET/POST 请求地址(可拼接查询参数)
    请求头键值对
    
    请求体
    
    > {% %}
    
    # 响应处理 > 打头和 shell 很像,然后用 {% %} 括起来的脚本内容 ,在脚本中可以使用 javascript 原生语法,这就很强大了
    # 脚本中有几个内置对象 client 表示当前客户端,response 表示响应结果
    

    对于这个使用文档,我在官网没有找到对应的文档位置,但在 idea 本身提供了一些不错的使用示例,它的位置在 Tools/HTTP Client/Open HTTP Requests Collection

    每发送一个请求后,你可以在历史记录中找到它,idea 会为你保存最近 50 条请求,保存的是编译后的请求,当你发送的请求的响应结果和实际不符时,你可以在这里找到问题的原因,它在项目的 .idea/httpRequests 文件夹中。

    常用示例

    配置环境信息

    这也是它比较强大的一方面,使用一个 json 来配置所有环境,只要在请求脚本目录下就可以读到,遵循约定大于配置的原则,文件名 http-client.env.json 表示普通变量可放的地方 http-client.private.env.json 表示密码等私有变量配置的地方,配置大致如下。在运行请求脚本的时候,idea 会提示你要选哪个环境

    {
      "local":{
        "baseUrl": "http://localhost:8083/",
        "checkCode": "http://localhost:8081/sanritools/company/token?env=dev",
      },
      "dev": {
        "baseUrl": "http://devhost:port/",
        "checkCode": "http://localhost:8081/sanritools/company/token?env=dev",
      },
      "sit": {
        "baseUrl": "http://sithost:port/",
        "checkCode": "http://localhost:8081/sanritools/company/token?env=sit",
      }
    }
    

    登录 token 示例

    网上的示例基本上都是在说,用一个接口获取到 token ,然后保存到全局变量中,然后后面的接口就可以直接使用了,代码如下,但是本人试了无数次都没成功,再者,你们项目都没验证码的吗。

    ### 获取 token 值
    GET {{checkCode}}
    Content-Type: application/json
    
    > {%
    client.global.set("token", response.body.token);
    %}
    
    ### 获取素材列表
    POST {{baseUrl}}/media/list
    Content-Type: application/json
    Authorization: {{token}}
    
    {
      "pageNo": 1,
      "pageSize": 10
    }
    

    上面这个是有问题的,返回值 response.body 其它是个 json 字符串并非 javascript 对象,需要解析一下,前面也说了,这里可以使用原生 javascript 脚本,所以 JSON.parse(response.body).token 才能正确获取到 token ,

    第二个问题,我们现在这个 token 是存在 redis 的,所以我可以绕过验证码,另写一个接口去 redis 直接获取 token ,脚本最终如下

    ### 获取 token 值
    GET {{checkCode}}
    Content-Type: application/json
    
    > {%
    client.global.set("token", JSON.parse(response.body).token);
    %}
    
    ### 获取素材列表
    POST {{baseUrl}}/media/list
    Content-Type: application/json
    Authorization: {{token}}
    
    {
      "pageNo": 1,
      "pageSize": 10
    }
    

    文件传输实践

    前面说了,输入输出和 shell 中很像,所以这里输入一个文件使用 < 文件地址,随便找个 multipart/form-data 的数据格式查看一下,就知道文件怎么传了,其实在示例中也有,如下面脚本所示,它使用一个 boundary 的 key 绑定当前所要提交多个 part 的数据,每个 part 可以是不同的数据格式 ;

    ### 测试发送文件信息(文件元数据信息查询)
    POST {{baseUrl}}/media/upload/fileMetaData
    Content-Type: multipart/form-data; boundary=WebAppBoundary
    Authorization: {{token}}
    
    --WebAppBoundary
    Content-Disposition: form-data; name="fileSize"
    Content-Type: application/json
    
    1024
    --WebAppBoundary
    Content-Disposition: form-data; name="md5"
    Content-Type: application/json
    
    sdafasdfasfd
    --WebAppBoundary
    Content-Disposition: form-data; name="partFile"; filename="zhongwenbuxin.avi"
    Content-Type: application/octet-stream
    
    < C:Users91795960Videos/V0106_1024KB.avi
    --WebAppBoundary--
    

    对于返回信息乱码我没有碰到,也没有设置网上说的消息头和启动配置,返回消息是正常编码的;我只碰到了上传上去的文件名是乱码的,怎么设置都不生效,没找到解决办法,但自测的话,取个英文名也没关系,有哪位大神解决了可以告诉我一下。

    关于其它断言的使用,和日志的使用可以找其它的博客,这里列一篇以供参考

    https://www.cnblogs.com/zhixie/p/12059593.html

    一点小推广

    创作不易,希望可以支持下我的开源软件,及我的小工具,欢迎来 gitee 点星,fork ,提 bug 。

    Excel 通用导入导出,支持 Excel 公式
    博客地址:https://blog.csdn.net/sanri1993/article/details/100601578
    gitee:https://gitee.com/sanri/sanri-excel-poi

    使用模板代码 ,从数据库生成代码 ,及一些项目中经常可以用到的小工具
    博客地址:https://blog.csdn.net/sanri1993/article/details/98664034
    gitee:https://gitee.com/sanri/sanri-tools-maven

  • 相关阅读:
    Java多线程在JavaWeb中的应用
    hibernate,spring,struts的流程以及使用理由
    hibernate如何实现持久化
    ibatis与hibernate有什么区别
    关于导出pdf的例子
    BusyBox
    Android中如何查看内存
    使用PopupWindow实现Menu功能
    ScrollView原理
    eclipse 代码提示时闪退问题
  • 原文地址:https://www.cnblogs.com/sanri1993/p/12106128.html
Copyright © 2011-2022 走看看