高效的进行接口开发调试

2017-05-18   出处:百度质量部  作/译者: hi_du  


前言

笔者目前从事后端相关开发工作,所以经常需要和开发客户端的同学以及其他开发后端的同学调试HTTP接口。本文主要是分享笔者自己是如何利用工具更有效的调试HTTP接口的,同时把笔者自己开发的两款工具软件分享给大家。

我们知道,要检查一个接口返回的内容是否符合预期,最简单有效的方式就是查看客户端发送的请求数据和服务器端返回的相应数据是否是符合预期的。比如是开发手机客户端,我们可以通过在办公机器上使用Fiddler[1],手机上设置的全局代理为Fiddler监听的代理地址的方式来对HTTP流进行抓包分析。

Fiddler是单机版的瑞士军刀,而我们工作是多人协作完成的,而且我们的ip会经常发生变化,所以在使用的时候还是比较繁琐的。有没有类似一款软件,能部署到Linux测试服务器上去,我们需要的时候直接使用就行呢?笔者在各处搜索了一番无果,既然没有那就自己开发一款吧,于是利用周末时间,使用Golang开发了一款跨平台的基于BS架构的HTTP协议分析软件-pproxy[2]

针对后端服务间的接口调试,一般会使用打印日志的方式来调试,当然客户端的请求数据和服务端相应数据都需要比较详细的打印出来,这个可以通过不同的日志等级来进行控制,比如上述数据只在调试模式的时候才打印,生产环境模式则不会打印,本文后面介绍接收API前端-api-front,可以对后端接口进行直接抓包,能极大的提高调试效率。



对HTTP接口进行抓包

1.1 概述

对HTTP接口抓包的前提条件就是可以拿到原始的HTTP请求数据。所以目前除了直接在客户端和原始服务器之间的网络层抓取数据外(比如tcpdump),其他的抓包软件的工作模式一般都是如此:


图1 抓包原理




抓包转发服务器,一般是作为HTTP代理服务器运行,同时把经过的HTTP流量细节全部记录下来,提供给用户查看。比如Fillder和pproxy都是以代理服务的方式工作的。这种方式使用起来非常方便,只需要给手机设置一个全局代理即可。

目前手机上的应用一般都是使用的HTTP 接口,所以你可以非常容易的看到你手机上的应用都发送、接收到了什么样的数据,应用调用的接口在你面前暴露无遗。所以,接口的安全性问题就摆到在我们前面:如何防止重放攻击,避免数据泄漏?这个问题读者有兴趣可以另行研究,不在本文讨论范围。

下文主要是介绍笔者在工作中为了提高开发测试效率而开发的两款HTTP抓包的工具。


 2.1     代理抓包:pproxy

2.2.1  基本信息

pproxy是使用Golang编写的,跨平台的,基于BS架构的HTTP抓包代理、调试工具。

使用方式:同Fiddler,将手机的全局代理设置为pproxy监听的代理端口即可。

项目地址:https://github.com/hidu/pproxy

目前具有如下功能:



 2.2.2  软件展示



图2 首页

上图是我在本地运行截图,若是部署在公共测试机上,则团队其他成员也可以一起使用,若是在分析中发现错误数据则把请求的url发送给其他成员,即可查看到现场数据情况。还可以使用重放功能来对接口进行调试。


 2.2.3  特性-动态修改请求

pproxy还支持动态对请求进行修改,比如修改请求的域名,GET、POST参数等,比如这样:


或者这样:


 2.3      HTTP接口前端:api-front

 2.3.1   基本信息

上述介绍的pproxy是通过代理的方式抓取信息的,对于后端的接口调用则是不太适用:对请求的接口设置一个代理成本太高。

api manager是Golang开发的,基于BS架构的,用来做HTTP API前端的工具软件,可进行请求代理转发、协议抓包分析、流量复制。

项目地址:https://github.com/hidu/api-front

api front可以当做开发测试环境的API前端(不直接对外提供后端实际即可地址),手机客户端调用的接口全部发送到apifront,由其分配转发,若需要调试接口,直接打开api front的协议分析页面即可。

使用该系统,可大幅降低api联调测试成本,接口多版本切换变得更近简单。


 2.3.2   系统架构



图3  构架图


 2.3.3   系统部署和应用



图4 部署图

上图中,展现了普通的转发到后端一台服务器上去的工作模式。另外一种则是流量复制模式(client-0发送到server-0和server-2)。

流量复制模式主要是用在一个输入端,同时有多个下游需要相同的数据的工作场景,比如无状态的流式数据处理分析,或者消息通知等。



欢迎给测试窝投稿或参与内容翻译工作,请邮件至editors@testwo.com。也欢迎大家通过新浪微博(@测试窝)或微信公众号(测试窝)关注我们,并与我们的编辑和其他窝友交流。
158°|1583 人阅读|0 条评论

登录 后发表评论