2024年Web前端最新使用retrofit网络框架请求webservice接口,2024年最新美团前端面试

对象篇

模块化编程-自研模块加载器

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

这里,我使用的是火狐浏览器+RESTClient去调试http请求.

因为每个公司定义的格式可能会不一样.我们在封装以及分析数据的时候需要与之对应.所以我们去调试分析http请求.弄清每次请求及响应的格式.

关于soap,WebService以及http,各位前辈已经分析的很透彻了,这里我就不多说了,如果想了解的话,可以去看下前辈总结的文章.下面,咱们正式开始.

开工

==

RESTClient界面

在火狐浏览器中安装好RESTClient插件后,将其打开,界面应该会和图1类似,是空的,没有任何数据.为了方便分析,我又截取了图2,明显是一次成功请求后的界面,我先用图2分析下整个界面,然后再告诉你,这些数据都是怎么填上去的.

图1

在图2中,我把一次请求分为了两个部分,分别用绿线和蓝线框了起来.其中,绿线内是本次http请求发送的数据,也就是我们作为Android端需要封装的数据,蓝线内,就是本次请求服务端返回给我们的数据,也就是我们需要解析的数据.

我们先来分析下我们需要发送的数据,如图所示,我用红线标出了4个位置,它们分别表示什么意思呢?

  1. Method: 表示这次请求的请求方式,一般常用的有get和post,这里当然选post(因为WebService就是post请求的一种)

  2. URL: 表示这次请求的地址

  3. Headers: 请求头

  4. Body: 请求体

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图2

调试http请求

介绍完了RESTClient的界面,下面就正式开始http调试.

所谓调试,无非就是模拟一次http请求,我们把需要发送给服务端的数据填到Request(图2绿线内)中,点击send按钮,然后Response(图2蓝线内)中显示服务端返回给我们的数据.我们就是分析这堆数据而已.那么问题来了,Request中的这些数据,是从哪来的?

我另外打开了一个浏览器页面,在地址栏中输入想要调试的地址,如图3所示,为了方便,我让服务端同事把服务器部署到我的电脑上了,所以看到的地址ip是192.168.191.1,

刚刚在地址栏输入的就是这次要调试的地址,因此,我把他填入到了RESTClient的URL中.

既然url确定了,那请求头(Headers)和请求体(Body)又该填什么呢?别急,接着往下看.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图3

这次我要调试的就是图3中红线内的接口.名为AssetMaterialInfo,点击这个接口,打开的界面如图4所示.图中有SOAP1.2请求和响应示例,红线标注的是占位符,在模拟数据的时候需要将其替换为真实数据.

而我们所需要的请求头(Headers)和请求体(Body)就藏在请求示例中.为了方便分析,我单独将请求示例截取了图片,放在下边,也就是图5.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图4

图5中,红线内这两行内容,就是请求头,蓝线内的就是请求体.请求体很简单,我们只需要将蓝线中内容复制到RESTClient界面的Body中,然后把占位符替换掉就可以了(如图2所示),请求头怎么弄呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图5

关于在RESTClient中添加请求头,我举一个例子(图6),大家就都明白了.

在RESTClient界面中,点击顶部Headers,再点击CustomHeader,会打开图7这个界面.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图6

在图7所示界面,Name栏中填入Content-Type,Value栏中填入text/xml; charset=utf-8,然后点击Okay,我们就将一个请求头添加到本次请求中了.

同理,将第二个请求头也添加进来.我就不再演示了.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图7

这样,我们就将本次请求需要携带的数据都添加进来了.点击SEND按钮,就完成了本次请求.

开始写Demo

拿到了http请求的数据,我们就可以根据数据去写我们的例子程序了,在我们Android端通过Retrofit使用post请求去访问刚刚我们调试的WebService接口.

首先,在看下边代码之前,你要保证自己已经基本了解了Retrofit框架.关于Retrofit不会介绍太多,因为它不是本篇文章的重点.


导包

compile'com.squareup.retrofit2:retrofit:2.0.1' compile('com.squareup.retrofit2:converter-simplexml:2.1.0') { exclude group:'xpp3',module:'xpp3' exclude group:'stax',module:'stax-api' exclude group:'stax',module:'stax' }

请求体实例

对应图2中Request的Body部分,需要写三个类来作为请求体.分别对应请求体中的三个节点

根据由外到内的层级关系,它们分别是(类名 <—> 节点名):

  • RequestEnvelope <—> soap:Envelope

  • RequestBody <—> soap:Body

  • RequestModel <—> AssetMaterialInfo

下面,我详细介绍下这三个类.

@Root(name = "soap:Envelope") @NamespaceList({ @Namespace(reference = "http://www.w3.org/2001/XMLSchema-instance", prefix = "xsi"), @Namespace(reference = "http://www.w3.org/2001/XMLSchema", prefix = "xsd"), @Namespace(reference = "http://schemas.xmlsoap.org/soap/envelope/", prefix = "soap") }) public class RequestEnvelope { @Element(name = "soap:Body", required = false) public RequestBody body; }

RequestEnvelope类中,Root注解用来指定节点名称,NamespaceList用来指定多个命名空间,Element用来指定子节点名称.

@Root(name = "soap:Body", strict = false) public class RequestBody { @Element(name = "AssetMaterialInfo", required = false) public RequestModel AssetMaterialInfo; }

同理,RequestBody类中,Root注解用来指定节点名称,Element注解用来指定子节点名称,因为当前节点没有命名空间,因此不需要NamespaceList注解

最后

小编的一位同事在校期间连续三年参加ACM-ICPC竞赛。从参赛开始,原计划每天刷一道算法题,实际上每天有时候不止一题,一年最终完成了 600+:

凭借三年刷题经验,他在校招中很快拿到了各大公司的offer。

入职前,他把他的刷题经验总结成1121页PDF书籍,作为礼物赠送给他的学弟学妹,希望同学们都能在最短时间内掌握校招常见的算法及解题思路。

整本书,我仔细看了一遍,作者非常细心地将常见核心算法题和汇总题拆分为4个章节。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

而对于有时间的同学,作者还给出了他结合众多数据结构算法书籍,挑选出的一千多道题的解题思路和方法,以供有需要的同学慢慢研究。

ce7d1f69b2002194d.png)

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

而对于有时间的同学,作者还给出了他结合众多数据结构算法书籍,挑选出的一千多道题的解题思路和方法,以供有需要的同学慢慢研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值