top错误诊断说明.docx
- 文档编号:5721611
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:14
- 大小:28.53KB
top错误诊断说明.docx
《top错误诊断说明.docx》由会员分享,可在线阅读,更多相关《top错误诊断说明.docx(14页珍藏版)》请在冰豆网上搜索。
top错误诊断说明
一、?
?
?
?
?
?
?
?
?
?
错误处理流程概览
从这个错误处理流程可知,在整个错误处理的过程中,一共可以分为3条主要的流程:
请求解析异常流程处理,平台级错误处理和业务调用错误处理。
当然,这一切处理的最初也是最重要的一步就是:
将服务器响应内容保留下来。
二、?
?
?
?
?
?
?
?
?
?
服务器响应内容透析
服务器响应内容,顾名思义就是isv调用top服务得到的响应的内容。
这些内容能够最真实的反应出isv请求的问题和服务器当前的情况,也最能够帮助isv找到问题的所在。
服务器响应内容一般分为两种:
一种是wiki文档中所编写的成功调用所返回的字段,另一种是调用失败的返回的错误相关信息。
1.?
?
?
?
?
?
?
调用成功返回格式
调用成功的响应信息内容根据调用服务版本的不同分为了两种不同的格式。
1.0的服务返回信息的格式分为三层:
最外一层是"rsp":
{}标记,表示这是服务的响应内容;中间一层是返回结构体的标记,如:
返回的是商品的结构体,中间这层就是"items":
[{},{}……],表示结果是一个商品的列表,如果返回参数不是以结构体的形式,这一层就不存在;最内一层就是每个结构体具体的字段了。
1.0这个版本所有返回结果,不论是单个的商品还是一个商品列表,他的第二层都是一个列表的结构,区别只是列表里有一个子结构体还是有多个子结构体而已。
相比之下,2.0的服务返回信息就相对的规范化了。
2.0的响应内容主要也可以分为3层:
最外一层是你调用服务的名称所对应的响应标记,如:
获取单个商品()的响应最外层为"item_get_response":
{},表示这是获取单个商品的响应;中间一层是返回结构体的标记。
如果结构体是单个,那么2.0返回的这一层里面就会是单个的结构,如:
获取的单个商品的结构体就是"item":
{};反之,如果结构体是多个,那么列表也会明显的表示出来,如:
搜索商品列表的结构体就会是”items”:
{“item”:
[{},{}……]}。
最外层的items表示这是一个商品的列表,后面的item表示列表中的每一个子结构体都是属于商品item的,然后就跟着商品的数据;最内一层就商品的具体字段信息了。
2.?
?
?
?
?
?
?
调用错误返回
当调用发生错误的时候,一般情况下可以分为几大类错误信息的返回:
http连接错误、平台解析错误、业务处理错误。
这三种类型的错误分别代表了:
淘宝服务器、淘宝接入平台、top-api业务,几个层次上出现的问题。
1)?
?
?
?
?
?
?
http连接错误
http连接错误是请求通信过程中出现的错误,这类型错误通常由http响应码标记出来。
http响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行。
响应码分五种类型,由它们的第一位数字表示:
1xx:
信息,请求收到,继续处理
2xx:
成功,行为被成功地接受、理解和采纳
3xx:
重定向,为了完成请求,必须进一步执行的动作
4xx:
客户端错误,请求包含语法错误或者请求无法实现
5xx:
服务器错误,服务器不能实现一种明显无效的请求
Isv调用top服务最常收到就是200:
http请求成功;404:
未找到请求的服务;500内部服务器错误等等。
如果用户收到的响应码是404,表示用户的网络有问题或者top被和谐了……如果用户收到的响应码是500,表示网络是ok的,是top的服务无法响应。
2)?
?
?
?
?
?
?
服务端错误总述
平台解析错误和业务处理错误都是http成功访问到top服务(http响应码返回为200)之后所产生的错信息,他们top处理isv请求过程中出现的问题。
1.0和2.0的格式有所不同。
1.0的错误响应信息最外层为{“error_rsp”:
{}},表示这是调用错误所返回的信息。
里面一层包含两个元素:
”code”:
””和“msg”:
””,前者表示错误码是多少,后者表示错误信息是什么。
例如错误的调用1.0的服务错误时返回的错误信息:
{"error_rsp":
{"code":
40,"msg":
"Missingrequiredarguments:
missingparameteriid/num_iid"}}。
这个信息的开头为error_rsp,表示这是调用错误所返回的结果。
里面包含的错误体的code为40,是平台型错误,表示错误是缺少了必传参数所引起的。
然后msg内容为Missingrequiredarguments:
missingparameteriid/num_iid,表示缺少的必传参数是iid或者num_iid。
Isv解析到这些信息后就需要根据错误信息改进自己传入的参数来使调用成功。
2.0的错误响应信息的最外层为{“error_response”:
””},表示这是调用服务失败所返回的错误信息。
信息体里面一层总共包含了五个元素:
"args":
{"arg":
[{“key”:
“”,”value”:
””},{“key”:
“”,”value”:
””},{“key”:
“”,”value”:
””}……]},”code”:
””,“msg”:
””,”sub_code”:
””和”sub_msg”:
””。
args表示用户传入的参数列表是什么,里面是一个arg的列表会包含用户传入的所有参数信息,每个arg表示一个参数的信息,key表示参数的名称,value表示参数的内容,用以方便用户定位自己的错误;code表示用户调用错误的错误码是多少,小于200表示平台级错误,200-1000之间表示大范围的业务错误,即哪一类型的api调用发生了错误(根据api的大类来分,如:
商品类的api是530,交易类的api是520,等);msg表示大类型的错误码所对应的错误信息,一般不具备独立的debug作用,需要和sub_code和sub_msg一起使用才行;sub_code是调用错误的子错误码,他表示用户调用错误的原因;sub_msg是子错误码所对应的错误信息,他用来补充细化子错误码的错误原因的。
例如调用2.0的服务错误时返回的错误信息:
tner_id","value":
"TOPTEST"},{"key":
"sign","value":
"668FB4A049F71A1C845EF8C05B1F3E66"},{"key":
"timestamp","value":
"2010-03-0518:
03:
06.325"},{"key":
"v","value":
"2.0"}]},"code":
530,"msg":
"Remoteserviceerror","sub_code":
"missing-parameter","sub_msg":
"iid和num_iid至少要传入一个"}}
这个信息的开头为error_response,表示这是调用错误所返回的错误信息。
里面的args列出了用调用这个接口传入的信息有:
key":
"nick","value":
"tbtest561"},{"key":
"partner_id","value":
"TOPTEST"},{"key":
"sign","value":
"668FB4A049F71A1C845EF8C05B1F3E66"},{"key":
"timestamp","value":
"2010-03-0518:
03:
06.325"},{"key":
"v","value":
"2.0"}],这些信息是从用户的请求信息里面解析出来的。
错误码code为530,表示这是调用商品的api所产生的错误。
错误信息msg为Remoteserviceerror表示这是调用业务处理所产生的错误。
子错误码sub_code为:
missing-parameter,表示这个错误是因为缺少了参数所产生的。
子错误信息sub_msg为:
iid和num_iid至少要传入一个,表示少传的参数为iid或num_iid。
这所有的错误信息叠加起来可以知道,这个错误是用户调用接口时业务处理发现用户没有传入商品id所导致的。
3)?
?
?
?
?
?
?
平台解析错误
平台解析错误是指top返回的错误码小于100的情况。
平台解析是非业务性的普适的校验接入层,主要用于对用户的各种权限、和入参进行最基本的校验。
现在的平台错误码主要有:
Isv可以通过错误码和解释来纠正问题。
如:
错误码为3的响应表示图片上传失败,错误码为26表示用户没有传入session参数,错误码为27表示用户传入的session参数找不到对应的session记录,等等。
4)?
?
?
?
?
?
?
业务处理错误
业务处理错误是用户通过平台校验进入业务流程出现了错误所发出来的。
这一层的错误码根据调用版本不同分为两种。
如果版本是1.0,那么返回的错误信息格式就是:
{“error_rsp”:
{“code”:
XXX,”msg”:
”……”}},里面的code是数字形式的标记着一种错误的编码,msg是字符串形式,标记在错误的具体信息。
如,获取当商品失败的错误信息就是:
{"error_rsp":
{"code":
551,"msg":
"Itemserviceunavailable:
获取单个商品失败"}}。
1.0的错误码有以下几种:
1.0的返回的错误code就是其中的错误码,错误msg就是其中的英文错误描述加上具体的错误信息组成的。
如果版本是2.0,那么服务器所返回的错误信息格式就是:
{“error_response”:
{"args":
{"arg":
[{“key”:
“”,”value”:
””},{“key”:
“”,”value”:
””},{“key”:
“”,”value”:
””}……]},”code”:
””,“msg”:
””,”sub_code”:
””,”sub_msg”:
””}},里面的code是数字形式的标记着一种业务类型的错误编码,msg则是比较大范围内的表示错误类型的字符串。
而sub_code是以字符串形式粗略表示错误的类型,sub_msg则是表示具体的错误原因。
2.0的code包含以下几种分类:
产品线
错误码
用户
500
类目
510
交易
520
退款
521
商品
530
商品扩展API
531
邮费模板
532
产品
540
物流
550
店铺
560
评价
570
淘宝客
580
系统
590
备案
591
增量API
600
比价
610
画报
620
江湖
630
分销
640
淘秀
650
收费
660
Misc(保证金等杂项api)
670
由上图可知,每一大类的api在2.0中其实是共享一个code的,它能让用户在复杂组合调用中指导是哪一类的api出现了问题,实现初步的定位。
2.0的业务错误中,msg里面最容易出现的内容就是Remoteserviceerror,这表示用户是在通过了平台校验后进行业务流程的时候出现的错误。
其他的错误还有RemoteServiceTimeout:
后台处理业务超时等等的错误。
这一个错误信息的力度比较粗,很难单独用她进行错误处理。
2.0的业务处理错误信息主要要看sub_code和sub_msg这连个字段。
sub_code表示了服务费对业务错误的分类,sub_msg表示了是错误原因。
Sub_code根据业务错误类型主要可以分为如下几类
子错误码
错误归类
user-not-exist
用户不存在
missing-parameter
缺少参数
invalid-parameter
参数错误
parameters-mismatch
参数不匹配(主要针对那些需要一一对应的入参)
Invalid-permission
权限不足
remote-service-error
调用后端服务错误
remote-service-timeout
调用后端服务超时
remote-connection-error
调用后端服务连接错误
XXX-service-unavailable
调用后端服务失败
item-extra-not-exist
商品扩展信息不存在
trade-not-exist
交易记录不存在
refund-not-exist
退款记录不存在
每一类的子错误码代表着某一类型的错误,例如user-not-exist表示用户传入的nick或者用户绑定的session所对应的nick找不到对应的用户记录,Invalid-permission表示用户由于权限问题不能进行某些操作。
sub_code给予isv或用户以改进错误的方向,而sub_msg则告诉用户改进点。
例如sub_code为invalid-parameter,sub_msg为用户传入的iid不能超过40个,这就表示着,这次错误的原因是用户传入的参数iid由于数量超过40个而产生了错误。
错误响应时用户和服务器交互失败的最直接展示,isv在调用top服务时,如果调用失败,请尽量保留下错误信息(建议尽量改用2.0调用,这个版本的错误信息比较全面),以便进行后面的错误追查。
三、?
?
?
?
?
?
?
?
?
?
响应格式错误处理
响应格式错误是指用户调用top服务时,传入参数设置了format参数为json,但是接受到的却为xml的响应格式,或者设置格式为xml接收到的却为json响应的格式的情况。
一般正常情况下这种情况是不会出现的,但是还是会有一些异常的情况会引起这个问题。
这种响应格式错误的问题在isv的程序中通常会表现为,响应解析格式错误。
例如:
用户使用的top的javaSDK客户端调用top服务,设置的format格式为json却得到了一个xml的响应,这是sdk就会报一个错误说响应开始处缺少一个“{”符号。
这是因为xml响应是以“<”开始的缘故。
一般会发生这种现象的原因有一下三种:
用户传入的参数过大导致流解析异常,用户调用太过频繁道士响应异常,top服务器故障。
为了定位到问题出在哪里,以便找到相应的解决方法,用户在遇到响应格式错误的情况时可以参考以下步骤进行调试。
1.?
?
?
?
?
?
?
响应格式格式错误,但数据正确
用户第一步应该分析一下相应的内容里面是不是除了格式错误以外,其他的响应内容都是正确调用的返回结果。
例如,有个用户用top的sdk,设置format为json,调用top得到了这样一个返回结果:
?
A?
JSONObject?
text?
must?
begin?
with?
'{'?
at?
character?
1?
xml?
version="1.0"?
encoding="utf-8"?
?
>
[CDATA[77a003aef35f8d959eef03d7ba3d23e3]]>
16:
04:
15
[CDATA[c559afab73ab721a8e7500b62864add0]]>
16:
04:
05
[CDATA[28a3410c88bc2ba2471080ce8891eaf7]]>
16:
03:
59
[CDATA[915383f4733b7a7c2549aa863d305995]]>
16:
03:
53
……
[CDATA[528223dc2d67213aa29ab84c74c6a60a]]>
07:
30:
52
从这个异常的开头可以看到,这是sdk的json解析抛了一个异常,说响应内容的内容应该是以“{”开始的。
这说名,isv收到的响应格式肯定出了问题。
再看一下响应的内容
查询到的结果总数是1115条,当前页的商品iid和最近修改时间也在其中。
这些查询结果数据是正常的,但是返回格式却不是传入的json而是变成了xml。
这位isv联系了top的技术支持,在建议减缓调用频率以后,返回的数据格式正常了,这样就临时控制了这种情况的发生。
同时技术支持将这些情况反映到了开发,top这边后续就会找到问题根源,进一步杜绝这种情况的发生。
2.?
?
?
?
?
?
?
响应格式错误,数据也错误
如果用户第一步分析发现,返回的信息并不是调用成功的信息而是某个平台错误,而且用户本身的参数并不会导致这个错误的产生,此时用户就需要查看自己调用接口的参数了。
如果用户调用的接口需要传入比较大的数据(如:
图片、商品的长篇描述等等),那么用户应首先尝试着减小这些入参到合法范围内输入(传入小图片或者之传入少量的描述文字等)。
如果用户调用成功,表示错误是因为用户入参太大造成了解析错误引起的,用户应配合自己所在地方的网速,请求大小等等的信息合理设置自己的参数大小和接口调用顺序。
如果用户减小参数还是解析失败的话,用户尝试着不传入图片或只传入几个字节的描述的内容进行接口调用。
在传入描述只有很少的字节的情况下:
如果不传图片调用成功了,那么应该是top的服务器的问题,请将这个情况反馈给技术支持进行解决;如果图片不传调用仍然失败了,那么应该是用户的调用参数或网络有问题,请仔细对照文档说明对参数进行修改或等待网络状态好一点的时候进行调用。
总的来说,如果用户发生了响应格式错误的情况,一般分为三种情况:
用户本身传入的format就是错误的,这种情况用户需要查看自己传入的参数是否正确;用户通信的网络太差,服务端造成请求解析失败而丢失了format信息,这种情况下用户需要调整自己的网络通信情况,等状况恢复再调用;如果是其他由于图片或调用太频繁而引起的问题,用户需要减小图片或减缓调用来提高成功率,并且将这些情况通报给top技术支持的同学。
四、?
?
?
?
?
?
?
?
?
?
平台级错误处理
在前文的错误综述中介绍过,top的错误可以分为平台级错误和业务级错误。
所谓平台级错误就是指:
错误码小于100的调用错误。
这种错误一般是由于用户的请求不符合各种的基本校验而引起的。
下面将对于各种平台级错误及相应的解决办法陈列于此。
错误码
错误解释
解决办法
3
图片上传失败
将传入的图片格式改为正确的格式、适当的大小的图片放进消息体里面传输过来。
如果传输仍然失败需要减小图片大小或者增加网络带宽进行尝试
4
用户调用次数超限
调整程序逻辑合理利用api,等第二天再调用。
或者向技术运维的同学申请增加调用次数
5
会话调用次数超限
6
合作伙伴调用次数超限
7
应用调用次数超限
8
应用调用频率超限
Isv调节api调用频率,不能太过频繁的调用
9
HTTP方法被禁止
请用大写的POST或GET,如果有图片等信息传入则一定要用POST才可以
10
服务不可用
多数是由未知异常引起的,用户仔细检查自己传入的参数是否符合文档中描述的样子
11
开发者权限不足
appKey所对应的应用不具备权限调用当前接口。
需要联系运营或技术支持的同学开通调用该接口的权限。
12
用户权限不足
13
合作伙伴权限不足
15
远程服务出错
Api调用后端服务出错,isv首先查看自己的参数是否合法,如果参数没有问题请过一段时间再尝试,如果还不行请联系技术支持
21
缺少方法名参数
传入的参数加入method字段
22
不存在的方法名
传入的method字段必需是你所调用的api的名称,并且该api是确实存在的
23
非法数据格式
传入的format必需为json或xml中的一种
24
缺少签名参数
传入的参数中必需包含sign字段
25
非法签名
签名必需根据正确的算法算出来的。
算法请见:
26
缺少SessionKey参数
传入的参数中必需包含session字段
27
非法的SessionKey参数
传入的session必需是用户绑定session拿到的。
如果报session不合法可能是用户没有绑定session或session过期造成的,用户需要重新绑定一下然后传入新的sessionKey。
28
缺少AppKey参数
传入的参数必需包含app_key字段
29
非法的AppKey参数
用户传入的appKey参数确实是要存在的,如果没有申请appKey的同学请去申请appKey,如果是已经有了appKey却调用不同过的,请联系技术支持解决
30
缺少时间戳参数
传入的参数中必需包含timestamp参数
31
非法的时间戳参数
用户传入的时间戳不合法。
时间戳,格式为yyyy-mm-ddhh:
mm:
ss,例如:
2008-01-2520:
23:
30。
淘宝API服务端允许客户端请求时间误差为10分钟。
32
缺少版本参数
传入的参数中必需包含v字段
33
非法的版本参数
用户传入的版本号格式错误,必需为数字格式
34
不支持的版本号
用户传入的版本号没有被提供。
现在top只支持1.0或2.0两种版本
40
缺少必选参数
用户传入的参数中漏掉了必传的参数。
请仔细对照文档检查
41
非法的参数
用户传入的参数不符合文档中说明的参数格式,请参照文档进行修改
42
请求被禁止
请求被禁止(目前没有在控制)
43
参数错误
参数解析发生错误或异常。
一般是用户传入参数非法引起的。
请仔细检查入参格式、范围、是否一一对应等等情况。
44
Isperror后台接入服务错误
这种后台服务异常引起的错误,请联系技术支持。
基本上来说,平台错误是一个通用的、普适的校验。
一般针对用户的权限、安全、流量和最基本的参数等等进行校验。
用户遇到这些错误的返回一定要第一步检查自己的权限、频率等情况;然后就需要参照文档检验一下自己的传入的参数是否完整且合法;如果这些都无法解决问题,请联系技术支持的同学进行反馈,top后台会尽快解决这些问题。
五、?
?
?
?
?
?
?
?
?
?
业务级错误处理
业务级错误是指isv请求进入top业务处理以后爆出来的业务相关的错误,通常错误码分部在500-1000之间。
Top的业务错误一般可以分为4个大类:
参数错误、权限控制、用户不存在和服务错误。
1.?
?
?
?
?
?
?
参数错误
参数错误指topapi根据业务要求对用户传入的参数进行校验组装的时候产生的错误。
1.0中的参数错误码有:
505,"MissingParameters";506,"Parameterserror";507,"ParametersFormaterror"和XXX,”XXXnotexist”(这里XXX表示未知的数字或字符串)等等。
其中:
505表示缺少传入某些需要传入的参数(如:
获取sku列表的时候要求至少传入一个iid,isv却什么都没有传入);506表示传入的参数错误(如:
传入的iid找到对应的商品已删除、传入的类目不存在等等);507表示用户传入的参数的格式不符合规定(如:
需要传入数字的参数用户传入了非数字的字符);XXXnotexist表示根据用户指定的参数(如:
iid、tid等数据)找不到对应的记录,等等。
2.0中的参数错误的错误码是在调用返回的sub_code子错误码里面得到具体体现的。
2.0的参数错误一般有如下几个错误码:
missing-parameter,invalid-parameter,parameters-mismatch,XXX-not-exist等等。
这几种错误分
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- top 错误 诊断 说明
![提示](https://static.bdocx.com/images/bang_tan.gif)