麦粉社区
>
帖子详情

[数据准备] 一文搞懂身份认证的循环分页取数及常见问题排查

动态中心 发表于 3 小时前
发表于 3 小时前

《接口取数不再慌张,API取数原来这么简单》一文中我们已经详细了解了API取数节点的使用,本文再结合包含身份认证的循环分页取数场景案例再具体讲解介绍


 


一、接口准备


1、登录接口-获取token


请求地址:http://localhost:6060/api/doLogin


请求方法:POST


Body请求体格式:application/json


Body请求参数:


 


















参数



含义



username



用户名



password



用户密码



 


请求参数参考示例:


{

"username": "admin",

"password": "admin"

}

 


接口返回示例:


{

"success": true,

"code": 200,

"message": "成功",

"data": "41ca340b-4435-4949-bf1a-7bb66ddcae78"

}

 


2、分页取数接口


请求地址:http://localhost:6060/api/order/getOrdersByPage


请求方法:GET


请求参数:


 


















参数



含义



pageNo



页码



pageSize



分页条数



 


请求参数参考示例:


http://localhost:6060/api/order/getOrdersByPage?pageNo=1&pageSize=2


接口返回示例:


{

"success": true,

"code": 200,

"message": "成功",

"data": {

"pageNo": 1,

"pageSize": 2,

"total": 830,

"totalPages": 415,

"result": [

{

"orderid": 10248,

"customerid": "VINET",

"employeeid": 5,

"orderdate": "2020-07-04T16:00:00.000+00:00",

"requireddate": "2020-07-31T16:00:00.000+00:00",

"shippeddate": "2020-07-15T16:00:00.000+00:00",

"shipvia": 3,

"freight": 32.38,

"shipname": "余小姐",

"shipaddress": "光明北路 124 号",

"shipcity": "北京",

"shipprovince": "北京市",

"shipregion": "华北",

"shippostalcode": "111080",

"shipcountry": "中国"

},

{

"orderid": 10250,

"customerid": "HANAR",

"employeeid": 4,

"orderdate": "2020-07-07T16:00:00.000+00:00",

"requireddate": "2020-08-04T16:00:00.000+00:00",

"shippeddate": "2020-07-11T16:00:00.000+00:00",

"shipvia": 2,

"freight": 65.83,

"shipname": "谢小姐",

"shipaddress": "光化街 22 号",

"shipcity": "秦皇岛",

"shipprovince": "河北省",

"shipregion": "华北",

"shippostalcode": "754546",

"shipcountry": "中国"

}

],

"start": 1,

"end": 2

}

}

 


 


二、操作步骤


(一)添加API节点配置登录接口获取令牌


按照登录接口配置如下:


 


IMG_256


(二)添加JSON节点解析令牌


IMG_257


(三)添加循环API节点进行循环取数


(1)API配置-参数配置:

按照上述分页取数接口配置如下:


 


IMG_258


(2)API配置-令牌配置:

在进行API配置之前,我们先了解下存在身份认证的情况下令牌的获取传递方式及API配置的支持情况:


注意:下面支持情况仅代表smartBI产品的支持情况,非第三方认证的支持情况,例如:某些第三方认证为避免业务数据与认证数据的耦合,并没有开启对从请求体中获取token令牌的支持,则此情况下即使配置也是无法认证成功的。


 































方式



示例



支持情况



从请求头中获取



Authorization: Bearer



支持



从请求参数中获取



https://api.example.com/data?access_token=



支持



从请求体中获取



{


"access_token": "",


"data": { ... }


}



支持



从Cookie中获取



Cookie: access_token=



支持(特别说明:虽无法直接配置Cookie,但由于Cookie本身是在Headers头上,所以也可支持配置)



 


注意:由于token令牌都是来自上一节点解析出来的动态值,所以下述${token}均以参数形式配置,后续会在循环配置中映射参数值。


1、从请求头中获取配置参考:

以OAuth 2.0标准为例,其令牌位置在Authorization头上,格式为 Bearer ,则可在Authorization中选择Bearer Token,配置后会自动在Headers请求头中添加Authorization头配置:


Authorization: Bearer


 


IMG_259


 


若项目当前使用的是非OAuth 2.0标准或其它自定义的令牌(自定义令牌位置及格式)如:Auth-Token: ,表示令牌位置在自定义的Auth-Token头上,格式直接是令牌值,则配置如下:


 


IMG_260


 


当然在Authorization中也是支持标准认证Basic Auth认证,只是这种已不属于token认证方式,在配置后会自动在Headers请求头中添加Authorization头配置:Authorization: Basic


 


IMG_261


2、从请求参数中获取配置参考:

从请求参数中获取token适用于token配置在url地址上的场景,配置方式和普通参数一样:


 


IMG_262


3、从请求体中获取配置参考:

IMG_263


4、从Cookie中获取

IMG_264


(3)循环配置:

循环方式配置:分页取数一般是在后端依赖分页页码pageNo(具体以实际参数为准)和每页条数pageSize(具体以实际参数为准)在数据库层面进行分页,所以此场景下想将全部的数据取出就需要依次取第1页的数据、第2页的数据......直到取完最后一页数据。即为每次请求时让页码参数pageNo+1即可。所以在循环配置时选按序号循环,每次循环序号+1,然后让序号值映射为页码参数pageNo值。


 


IMG_265


 


参数映射配置:由于token是从上一个节点解析出来的动态值,所以需要将对应值映射到token参数参数上,支持一键识别映射,然后根据实际情况修改即可。


 


IMG_266


 


退出条件配置:在分页取数时,当某页查询的结果为空或者是查询的行数<每页的行数时即可认为取完全部数据。则可配置方便对JSON数据结构进行内容提取的JSONPath表达式来提取内容进行判断。JSONPath表达式可参考学习:JSONPath 表达式 - Smartbi Insight V11帮助中心 -


 


IMG_267


结合接口返回示例相应的JSONPath表达式为:$['data']['result'].length(),则配置如下:


IMG_268


(四)其它参数配置


在上述配置完后,其实还发现有一个pageSize参数没有进行映射,此时可直接在ETL的参数设置的进行配置添加:


 


IMG_269


IMG_270


(五)运行结果展示:


共830条数据,每页50条,共需循环17次,显示返回17条数据。


IMG_271


 


后端日志记录:


 


IMG_272


 


需注意若刚好发生:总行数/每页行数=整数页,则会多一条为空的数据,需在后续节点中将空数据过滤掉。


 


三、问题排查


(一)http状态码


在看具体问题前我们先来了解下http响应状态类型,当API调用失败、功能出现异常时,状态码是问题的第一信号,而在调用API的过程中通常遇到的错误状态码就是4xx和5xx状态码。


 










































类别



分类描述



状态码含义说明



常见排查建议



1xx



Information(信息状态码)



接受的请求正在处理


 

2xx



Success(成功状态码)



请求正常处理完毕


 

3xx



Redirection(重定向状态码)



需要进行附加操作以完成请求


 

4xx



Client Error(客户端错误状态码)



服务器无法处理请求



客户端错误,需检查请求头、请求体及参数是否配置正确



5xx



Server Error(服务端错误状态码)



服务器处理请求出错



服务端错误,通常需对应接口开发人员获取服务器日志排查,少数也可以直接通过返回的错误信息排查



(二)常见问题解答


(1)为什么API节点执行成功了但是返回的结果却没有达到预期?

有以下两个场景场景一:节点执行成功,statusCode结果也是200,但为什么返回的内容里还是登录失败?


答:需从 HTTP状态码 和 业务响应内容 两个维度分析:HTTP状态码(图中 statusCode: 200):HTTP 状态码 200表示 客户端(发起请求的一方,如浏览器、程序)与服务器之间的“网络层面通信成功”——服务器收到了请求、完成了响应处理,并将响应返回给客户端。它只代表“请求-响应的传输流程没出问题”,不直接反映业务操作是否成功。业务响应内容(图中 responseContent):接口返回的 JSON 数据里,success: false、code: 500、message: "失败"、data: "登录失败"是 业务逻辑层面的结果。这说明:虽然服务器正常响应了(HTTP 200),但业务操作本身出错了,需联系第三方接口开发人员排查。当然有些错误在后端也直接提示较明显就是用户名或密码错误,就按提示检查用户名和密码即可。


IMG_273


场景二:节点执行成功,但statusCode结果是非200


IMG_274


 


答:API节点支持设置接收异常结果,让节点即使执行失败也能继续往下执行,确认是否有开启该配置。至于请求执行失败400的状态码则如上方http状态码介绍部分,一般表示“客户端错误请求”(Bad Request),可检查通常表示服务器因为请求中存在语法错误或格式问题,无法理解或处理客户端的请求。需检查请求头、请求体及参数是否配置有误,或联系SmartBI官方或第三方接口开发人员分析。


 


IMG_275


(2)为什么接口测试工具中可以测试通过但API节点上运行失败?

IMG_276


答:接口测试工具中为方便测试其实是默认是有配置一些请求头参数,细心的小伙伴也发现在截图中接口测试工具显示的Headers配置上有“已隐藏7个”的字样:


 


IMG_277


 


显示隐藏的参数发现实际是有这些参数的:


 


IMG_278


 


注意到上方参数中其实有配置Cookie,如果将Cookie取消勾选也一样报错了:


 


IMG_279


此时检查cookie的中内容发现配置:token=51198da1-3f0e-4f7a-a31a-9d97aada4622,将其配置到API节点上一样可运行成功:


 


IMG_280


 


则以实际规则配置Cookie头即可,当然此时也说明现场的令牌位置并非在Authorization头上或是不支持从请求头中获取,若依然还是想以请求头的方式获取则需以认证方接口实际为准。


 


 


都看到这了,那来做个题吧,答题可领取麦豆——>点击领取任务


 

高级模式
B Color Image Link Quote Code Smilies
您需要登录后才可以回帖 登录 | 立即注册

0回帖数 0关注人数 63浏览人数
最后回复于:3 小时前

社区

指南

AI

搜索

快速回复 返回顶部 返回列表