我们公司正在快速发展状态,是时候开始制定各项技术标准规范(各种技术栈的语言规范)和工作流程从开发、测试到上线等)了,否则后期越来越玩不转。
前期虽然有引进各种规范,但总是支离破碎,而且有很多地方也不太符合我们公司工程师口味,所以也没有继续执行下去。
最近我们在开始整理各种技术规范和流程,会经历以下流程:
今天我们公示一下我们公司的初稿,并解释其中的原因,也广泛征求大家的意见和建议,大家的每一条建议我们都会深入思考和论证的。后续我们还会有很多类似的规范拿出来和大家一起交流,不吝赐教。
服务端、服务端对接端(网页端、APP 端、小程序端)
{
"resultCode": 200,
"data": null,
"errorMsg": ""
}
{
"resultCode": {通用处理结果代码},
"data": null,
"errorMsg": "对应的错误消息"
}
为什么我们的返回都尽量采用 HTTP Status Code 为 200 ?
答:经过公司内部对接端同事们的意见,如果返回的是非 200 状态码,目前很多框架会在框架层直接拦截,不会进一步解析消息体,不方便拿到服务端返回的错误消息。
[重点讨论] 那为什么鉴权失败时要返回 HTTP Status Code 401 呢?
答:目前我们的 APP 中有通过 WebView 嵌套网页,网页里面又有 Ajax 的调用。
之前我们的流程是,APP 内如果需要打开网页,则需要通过一个固定的链接进行转换,例如本身要访问 a 链接,则务必访问跳转链接并添加参数 b?targetUrl=a,同时携带 APP 的鉴权参数( APP 我们是把鉴权参数放到 header 里面的),服务端拿到 APP 的鉴权信息后会回写 cookie 到网页中,同时引导跳转到真正的目标地址 。
上述流程里面就会出现一个问题,当 APP 里面的鉴权信息( Token )没有过期,但网页中的鉴权信息过期了(例如一些不可抗拒因素导致某台服务器丢失了网页端的 session ),用户再点击网页里面的内容,则始终会报告失败,给用户一种很不好的体验。
之前我们是通过 bridge 的形式由网页端通知 APP 端发起重新跳转,如果本次跳转 APP 鉴权信息依然有效则按照前述流程正常打开网页,如果本次跳转发现 APP 的鉴权信息也失效了,则引导用户在 APP 中重新登录。 根据我们的经验,bridge 这种方式很容易出现兼容性问题,在某些机型上无法通知 APP,导致用户始终卡在网页上(用户并不知道要重启 APP,只知道找客服)
为了让用户得到更好的体验,我们打算在 APP 层面捕捉 webview 的所有请求,一旦发现 HTTP Status Code 为 401 的情况,就引导 APP 重新登录,简单粗暴,不过会忽略 APP Token 有效,网页 Token 无效这种情况。
如果把 401 放到返回 body 里面,不方便 APP 统一捕捉返回信息。
如果按照上述我们的方案,我们的接口需要接收 cookie 这种鉴权方式( APP 内打开的网页通过 ajax 调用),也需要接收 header 这种鉴权方式( APP 直接请求);我们的网页需要接收 header 这种鉴权方式( APP 通过跳转链接打开目的网页时),也需要接收 cookie 这种鉴权方式(正常情况下都通过 cookie 认证)。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.