http api设计规范

简介: http api设计规范

规范

  • api 接口必须加版本号,初始版本 【v1】,多个版本api版本可能同时在线
  • 不使用rest的PUT和DELETE,因为很多浏览器不支持,很多框架也不支持
  • POST在需要传输大量数据的时候使用,其余使用GET就可以了;
    这里GET和POST没有明确的含义,GET也可以新增
  • 所有路径path全部小写,以下划线分隔,所有参数,包括POST里面的body,以及header使用驼峰。例如:http://127.0.0.1/v1/wechat/mch_info/list_mch_info?page=2&perPage=100
  • 我们返回一般统一使用json格式返回
  • 使用Token令牌来做用户身份的校验与权限分级
  • 暴露外部请求一定使用SSL

Path具体的实现

path = /{版本}/{具体的业务功能}/{表名}/{行为}

  • {版本}:开始时全部为V1,
  • {具体的业务功能}:

pp的setting,数据库命名为 app_setting,那么,具体的业务功能=setting
架构组的wechat,数据库命名为arch_wechat,那么,具体的业务功能=wechat

  • {表名}:就是数据的表名
  • {行为}:一般就是方法名
  • ?limit=10:指定返回记录的数量
  • ?offset=10:指定返回记录的开始位置。
  • ?page=2&perPage=100:指定第几页,以及每页的记录数。
  • ?sortBy=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
http协议 方法 行为path 说明
POST add(POJO) /add 添加一个对象,接收json信息
GET insert(param …) /insert?param1=?&param1=? 插入一个对象,多个参数的方式,作用和add一样,只是传参数方式不同
GET deleteById(long) /delete_by_id?id=? 数据库不删除,但是业务上有删除的语意
POST update(POJO) /update 更新一个对象,接收json信息
GET updateById(long) /update_by_id?id=? {表名}中已经具体指明了实体,所有这里可以不用update_pojo_by_id
GET getById(long) /get_by_id?id=? {表名}中已经具体指明了实体,所有这里可以不用get_pojo_by_id
GET listByParam(Object) /list_by_param?param=?&page=2&perPage=100 list查询多个,默认全部,可以带上limit,offset,page,sortBy,order等参数

*参考数据库设计
https://blog.csdn.net/zengqiang1/article/details/79338660
【推荐】表的命名最好是加上“业务名称_表的作用”。
正例:app_user / trade_config
【推荐】库名与应用名称尽量一致,{业务项目}_{功能},业务项目和功能怎么写参*

Request

  • 请求必须带上公共参数,没有这些公共参数,可以不填写值,但是必须带上
  • 公共参数里面的token是必须带上的,因为我们会基于这个token,做用户登录验证
  • 公共参数写到http header里面,key:_head,value json格式,后端直接转为对象
    {

“token”: “123”, //sso token,必须带上,通过这个参数验证用户是否登录,已经确认是哪个用户
“timestamp”: “1234”, //发送请求时间戳
“userId”: “123”, //sso 用户id
“channel”: “123”, //渠道来源,从哪个渠道上面下载的包(iOS就只有一个App Store,Android有小米,应用宝,豌豆荚等国内的渠道),这个也必须有一个对照表
“channelCode”: “123”, //渠道标识,self:自有渠道,其他外部渠道也可以注册企鹅用户,比如问诊的业务渠道映射为:’sq:手机qq渠道,qb:qq浏览器渠道’,表明来自于哪个渠道,这个也必须有一个对照表
“pushId”: “134”, //假如产品或者运营需要我们给部分用户推送消息,可以根据其他公共参数把用户分群,然后拿到pushid给他push消息。
“initStamp”: “123”, //首次安装包时间戳
“device”: “123”, //设备名
“deviceId”: “123”, //设备唯一码
“systemVersion”: “123”, //APP专用,系统平台(Android,iOS)的版本号
“comeFrom”: “123”, //项目来源,例如APP要做一个母亲节的活动,或者520活动,from=母亲节活动,from=520活动,表明我做活动的一个转化率,这个也必须有一个对照表
“platformId”: “123”, //platformId 对照表@see 例如 1:web,2:iOS,3:Android,4:miniApp
“appName”: “123”, //appName 应用名称,对照表,, 例如app:app应用,cai:竞猜小程序
“appVersion”: “123”, //我们自己的app版本号
“extra”: “123” //额外参数,后续做ABTesting等场景的时候会用到,也可以做一些额外的业务需求字段,视各业务而定
}

压缩格式

{"token":"123","timestamp":"1234","userId":"123","channel":"123","channelCode":"123","pushId":"134","initStamp":"123","device":"123","deviceId":"123","systemVersion":"123","come_from":"123","platformId":"123","appName":"123","appVersion":"123","extra":"123"}

数据库字段对应

CREATE TABLE `user_extra_relation` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键',
  `user_id` bigint(20) DEFAULT NULL COMMENT 'user表中的id',
  `come_from` varchar(64)  NOT NULL DEFAULT '' COMMENT '项目来源,例如APP要做一个母亲节的活动,或者520活动,from=母亲节活动,from=520活动,表明我做活动的一个转化率,这个也必须有一个对照表,
  `device_id` varchar(64)  NOT NULL DEFAULT '' COMMENT '第一次产生用户注册的设备id',
  `channel_code` varchar(32)  NOT NULL DEFAULT 'self' COMMENT '渠道标识,self:自有渠道,其他外部渠道也可以注册用户,非必传,默认 self',
  `platform_id` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '平台ID,platformId 对照表,例如 1:web,2:iOS,3:Android,4:miniApp',
  `app_name` varchar(32)  NOT NULL DEFAULT '' COMMENT 'appName 应用名称,
  `token` varchar(64)  NOT NULL DEFAULT '' COMMENT '用户token',
  `timestamp` varchar(64)  NOT NULL DEFAULT '' COMMENT '发送请求时间戳',
  `channel` varchar(32)  NOT NULL DEFAULT '' COMMENT '渠道来源,从哪个渠道上面下载的包(iOS就只有一个App Store,Android有小米,应用宝,豌豆荚等国内的渠道),这个也必须有一个对照表https://lexiangla.com/docs/27c78dba373e11e8892b5254004fae61',
  `push_id` varchar(64)  NOT NULL DEFAULT '' COMMENT '假如产品或者运营需要我们给部分用户推送消息,可以根据其他公共参数把用户分群,然后拿到pushid给他push消息。',
  `init_stamp` varchar(64)  NOT NULL DEFAULT '' COMMENT '首次安装包时间戳',
  `device` varchar(64)  NOT NULL DEFAULT '' COMMENT '设备名',
  `system_version` varchar(32)  NOT NULL DEFAULT '' COMMENT '系统版本',
  `app_version` varchar(32)  NOT NULL DEFAULT '' COMMENT '我们自己APP的版本号',
  `extra` varchar(128)  NOT NULL DEFAULT '' COMMENT '额外参数,后续做ABTesting等场景的时候会用到,也可以做一些额外的业务需求字段,视各业务而定',
  `is_delete` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '是否删除 0-未删除、1-删除',
  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_user_id` (`user_id`)
) ENGINE=InnoDB COMMENT='用户附加信息表,表明用户来源等,第一次产生userId时插入信息到此表'

Response

  • 采用JSON,不要使用XML
  • 默认情况下要支持gzip
  • 格式统一:
{
      "code" : 0,
      "msg" : "Something bad happened",
      "data" : {

      }
    }
  • code: 0为成功,非0为失败
  • msg: 当code为非0时,获取错误信息。当code-
    为0时,msg一般为”success”。
  • data: 当code为0时,获取结果,全部以json方式表示。当code为非0时,data没有数据

错误处理

不要直接将异常抛给客户端处理,一般需要一个统一的异常处理类,并且以统一格式将异常信息返回前端,统一格式参照目录“Response”

标识映射

  • 保留错误码,可以自定义错误码,错误码全部参考
错误码 描述
0 请求成功
  • 性别关系映射
id
0 未设置
1
2
  • platformId 描述
1 web
2 iOS
3 Android
4 miniApp
5 mp微信公众号
  • appName 描述
appName 应用名称
app XXXapp
jincai 竞猜小程序
  • channelCode 渠道标识描述,默认为self(自有渠道),来源于哪次活动,添加活动,需要在这里添加相应标识
channelCode 渠道标识
self 自有渠道
  • userCateGorg 用户类别,默认为客户。以后可能我们还会有销售,或者其他
userCateGorg 用户类别
co 客户
相关文章
|
2月前
|
JSON 监控 API
掌握使用 requests 库发送各种 HTTP 请求和处理 API 响应
本课程全面讲解了使用 Python 的 requests 库进行 API 请求与响应处理,内容涵盖环境搭建、GET 与 POST 请求、参数传递、错误处理、请求头设置及实战项目开发。通过实例教学,学员可掌握基础到高级技巧,并完成天气查询应用等实际项目,适合初学者快速上手网络编程与 API 调用。
462 130
|
3月前
|
XML JSON API
识别这些API接口定义(http,https,api,RPC,webservice,Restful api ,OpenAPI)
本内容介绍了API相关的术语分类,包括传输协议(HTTP/HTTPS)、接口风格(RESTful、WebService、RPC)及开放程度(API、OpenAPI),帮助理解各类API的特点与应用场景。
|
5月前
|
监控 安全 API
电商API行业标准与规范体系构建:推动电商行业规范化前行
电商API行业标准与规范是推动电商高效发展的核心。通过数据格式标准化、接口设计一致性及严格的安全措施,可提升数据交互效率、保障安全并促进系统兼容性。淘宝、京东、拼多多等平台的实践展示了其重要性。未来,智能化、隐私保护强化和跨平台集成将成为主要趋势,助力电商生态持续繁荣。
|
5月前
|
人工智能 自然语言处理 API
电商API技术文档编写规范白皮书:方法论与行业实践
本文系统阐述电商API接口文档的编写规范与最佳实践,涵盖结构设计、技术语言、开发者体验、版本控制及质量保障等方面,助力企业提升开发效率,构建开放共赢的电商生态。
|
4月前
|
SQL 缓存 监控
SqlRest让SQL秒变Http API,还支持20+数据库(含国产数据库)
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
|
5月前
|
JSON 编解码 API
Go语言网络编程:使用 net/http 构建 RESTful API
本章介绍如何使用 Go 语言的 `net/http` 标准库构建 RESTful API。内容涵盖 RESTful API 的基本概念及规范,包括 GET、POST、PUT 和 DELETE 方法的实现。通过定义用户数据结构和模拟数据库,逐步实现获取用户列表、创建用户、更新用户、删除用户的 HTTP 路由处理函数。同时提供辅助函数用于路径参数解析,并展示如何设置路由器启动服务。最后通过 curl 或 Postman 测试接口功能。章节总结了路由分发、JSON 编解码、方法区分、并发安全管理和路径参数解析等关键点,为更复杂需求推荐第三方框架如 Gin、Echo 和 Chi。
|
4月前
|
监控 安全 测试技术
从0到1构建电商API:如何用规范设计省下百万维护成本?
本文系统解析电商API接口开发全流程,涵盖需求分析、架构设计、安全实践、测试上线及文档维护等关键环节,结合技术规范与实际案例,助力构建高可用、可扩展的电商系统。
|
4月前
|
缓存 供应链 监控
1688开放平台深度解析:商品详情API调用规范与性能优化策略
1688商品详情接口(alibaba.product.get)提供标准化数据获取方案,支持50+字段,涵盖商品基础信息、SKU详情、价格库存、图文视频资源。适用于电商比价、供应链管理、竞品分析及跨境信息同步,助力企业提升采购效率与市场响应速度。提供Python调用示例及常见问题解决方案,推荐使用本地缓存、异常重试机制和保险服务优化调用体验。
|
8月前
|
JSON API 网络架构
HTTP常见的请求方法、响应状态码、接口规范介绍
本文详细介绍了HTTP常见的请求方法、响应状态码和接口规范。通过理解和掌握这些内容,开发者可以更好地设计和实现W
1336 83
|
10月前
|
JSON Cloud Native API
API 规范和设计
今天主要和大家分享的是如何给予 Open API 3.0 标准来设计一套 API 规范。那么整体我们在讲的过程中,大约有以下五方面。 1. 大环境介绍 2. API与服务开放 3. API定义 4. 模型 5. 总结
997 5
下一篇
oss云网关配置