摘要:接口分类增删改查接口业务接口增删改查接口主要负责对数据库数据进行增删改查,用户管理,商品管理,订单管理等,主要为后台管理系统接口和配置接口,严格按照规范编写状态码按照标准规范。只要正确收到和返回请求,状态码就为,包括服务器内部错误。
接口分类
增删改查接口
业务接口
增删改查接口主要负责对数据库数据进行增删改查,用户管理,商品管理,订单管理等,主要为后台管理系统接口和配置接口,严格按照RESTful规范编写, 状态码按照标准规范。
入口 /api/resouces/{orders, users等}
日志内容: 时间,ip, 请求方式,请求路径,用户信息,操作类型,操作结果,ua
业务接口业务主流程接口抽象,登录,注册,修改密码,下单,付款,确认收货等,主要是终端用户的操作主流程的接口,规范按照自定义更佳, 返回错误需要明确每个错误的业务错误码。只要正确收到和返回请求,HTTP状态码就为200 OK,包括服务器内部错误。未知错误使用code=-1。尽量不要将任何不可控的错误以及调用栈暴露,而应当在捕获到异常后,将调用栈打印到日志中。
入口POST /api/action
参数{ "action": "login", "data": { "phone":"111", "password": "123456" } }日志内容
时间,ip,请求方式,请求路径,用户标识,错误码,错误内容, action,data,设备ua等信息
返回{ "code": 10000, "msg": "用户未注册", "data": null }实现
框架:
import traceback class ErrorCode: sys_unknown = "未知错误", -1 sys_action_not_exist = "操作不存在", 10000 sys_params_wrong = "参数错误", 10001 already_register = "用户已注册", 10002 verify_code_wrong = "验证码错误", 10003 action_not_exist = "操作不存在", 10004 class Action: schema = {} def __init__(self, data): assert data, ErrorCode.sys_params_wrong self.data = data def run(self, data): raise NotImplementedError() class App: action_map = {} def dispatch(self, data): try: assert data["action"] in self.action_map, ErrorCode.sys_action_not_exist action = self.action_map[data["action"]] return { "code": 0, "msg": "", "data": action.run(data["params"]) } except AssertionError as e: msg, code = e return { "code": code, "msg": msg, "data": None } except Exception: traceback.print_exc() msg, code = ErrorCode.sys_unknown return { "code": code, "msg": msg, "data": None }
注册:
from schema import And, Schema from acts import Action, App, ErrorCode class MyErrorCode(ErrorCode): params_wrong = "参数错误", 10000 already_register = "用户已注册", 10001 verify_code_wrong = "验证码错误", 10002 action_not_exist = "操作不存在", 10003 unknown = "未知错误", -1 class RegisterAction(Action): schema = Schema({ "verify_code": And(str, len), "phone": And(str, len), "password": And(str, len) }) auth = False def run(self, data): assert check_verify_code(data["verify_code"]), MyErrorCode.verify_code_wrong assert User.get(data["phone"]), MyErrorCode.already_register return {"token": "token"} action_map = { "register": RegisterAction } class MyApp(App): action_map = action_map app = MyApp()部署
nginx
gunicorn app:app -k "egg:meinheld#gunicorn_worker" -w 9
目录结构app.py,入口
actions/ action目录
resources/ resouce目录
.gitignore
文件上传特殊接口,form-data格式,用户直接上传到对象存储服务器,使用对象存储服务器生成一次性上传token,返回文件id。
文件获取:根据文件id从对象存储服务器获取临时下载地址。
用户认证token附在header中,保证日志的干净
编码表所有下拉框类型,枚举类型,都统一存储至统一的编码表中。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/42433.html
摘要:极致的插件机制,系统内的系统,安装和卸载不会对原来的系统产生影响强大的功能完全满足各阶段的需求,支持用户多端访问后台微信前台等,系统中的系统。多入口模式,多入口分为后台前端,微信,对内接口,对外接口,不同的业务,不同的设备,进入不同的入口。 RageFrame 2.0 为二次开发而生,让开发变得更简单 项目地址:https://github.com/jianyan74/... 前言 这...
摘要:极致的插件机制,系统内的系统,安装和卸载不会对原来的系统产生影响强大的功能完全满足各阶段的需求,支持用户多端访问后台微信前台等,系统中的系统。多入口模式,多入口分为后台前端,微信,对内接口,对外接口,不同的业务,不同的设备,进入不同的入口。 RageFrame 2.0 为二次开发而生,让开发变得更简单 项目地址:https://github.com/jianyan74/... 前言 这...
摘要:其标准为前身是,提供强大的在线编辑功能,包括语法高亮错误提示自动完成实时预览,并且支持用户以格式撰写导入导出转换文档。 团队内部RestAPI开发采用设计驱动开发的模式,即使用API设计文档解耦前端和后端的开发过程,双方只在联调与测试时耦合。在实际开发和与前端合作的过程中,受限于众多因素的影响,开发效率还有进一步提高的空间。本文的目的是优化工具链支持,减少一部分重复和枯燥的劳动。 现状...
摘要:开发者体验可以帮助团队更快地实现功能上线,因为它对开发者的体验非常好。可以显示每个的埋点指标,可以帮忙你定位错误,可以分析中请求的每个字段的分布频率。产品案例虽然规范是由在年公布的,但是自年以来,就是移动应用开发的重要组成部分。 在大前端应用的开发过程中,如何管理好数据是一件很有挑战的事情。后端工程师需要聚合来自多个数据源的数据,再分发到大前端的各个端中,而大前端工程师需要在实现用户体...
阅读 1932·2021-09-22 16:05
阅读 8978·2021-09-22 15:03
阅读 2843·2019-08-30 15:53
阅读 1675·2019-08-29 11:15
阅读 874·2019-08-26 13:52
阅读 2324·2019-08-26 11:32
阅读 1744·2019-08-26 10:38
阅读 2513·2019-08-23 17:19