其他
某小公司RESTful、共用接口、前后端分离、接口约定的实践
前言
我们的目标
尽可能的缩小沟通的成本,开最少的会,确定大部分的事。 花最少的时间写文档,保证90%的开发人员看懂所有内容。 哪怕不看文档,也能知道各种接口逻辑。 不重复写代码 尽可能的写高可读性的代码
我们做了哪些事
完成了前后端分离 Android、ios、web共用一套接口 统一接口规范(post、put、get、patch、delete) 统一了调试工具 统一了接口文档
之前的我们
…/project/model1/getProducts?id=1&a=2&b=3&c=4&d=5………… A页面->B页面(携带n个变量)->C页面(携带m个变量,包含i个A页面的变量)经常n>4 大部分请求是POST,至于put、patch、delete是什么鬼,关我屁事。 关于接口入参使用json,那完全是看开发心情。
{"message":"success","code":0,"data":具体内容}
[{"a":"1","b":"1"},{"a":"1","b":"1"},{"a":"1","b":"1"},
安卓、ios一套;部分接口各自用一套;html5端一套。 客户端和后台是不停交流的
swagger 阿里的rap Word文档 其它
…/Aproject/model1/getProducts ----接口
…/Aproject/model1/Products.html ----页面
…/Aproject/model1/Products.js ----静态资源
数据库约定
api出参约定
入参约定
resultfull接口约定
比如 /products
则代表新增一条产品入参json如下:
{
"name":"我是一款新产品",
"price":100,
"kind":"我的分类",
"pic":[一组图片],
//等等还有很多
}
@ResponseBody
@RequestMapping(value = "/A项目/B模块/products", method = {RequestMethod.POST})
public ResultObject getProducts() {
//具体逻辑。
}
比如 /products/1001
入参json如下:
{
"name":"我是一款新产品",
"price":100,
"kind":"我的分类",
"pic":[一组图片],
//等等还有很多
}
@ResponseBody
@RequestMapping(value = "/A项目/B模块/products/{id}", method = {RequestMethod.PUT})
public ResultObject putProducts(@PathVariable(value = "id") String id) {
//具体逻辑。
}
{
"data":{"list":[{"id":"唯一id","其他很多字段":""},{"id":"唯一id","其他很多字段":""}],"page":1,其他字段},
"code":0,
"message":"成功"
}
@ResponseBody
@RequestMapping(value = "/A项目/B模块/products/{id}", method = {RequestMethod.GET})
public ResultObject putProducts(@PathVariable(value = "id") String id) {
//具体逻辑。
}
{
"name":"我是一款新产品",
"price":100,
//部分变量
}
@ResponseBody
@RequestMapping(value = "/A项目/B模块/products/{id}", method = {RequestMethod.PATCH})
public ResultObject putProducts(@PathVariable(value = "id") String id) {
//具体逻辑。
}
如:/products/1001
@ResponseBody
@RequestMapping(value = "/A项目/B模块/products/{id}", method = {RequestMethod.DELETE})
public ResultObject putProducts(@PathVariable(value = "id") String id) {
//具体逻辑。
}
权限约定
前后端分离约定
共用接口
使用统一dao层生成工具
使用postman最为接口文档、调试工具
https://download.csdn.net/download/qq273681448/10033456
/*
这里是接口说明,和每个出参、入参的意思。
*/
js等静态资源缓存问题
统一js请求框架
目前效果
/classes/id get获取id为id的班级详情
/classes/id patch 修改班级信息
/classes/id delete 删除班级信息
https://juejin.im/post/59e1d92d51882578db27c2e1
测试人员想了解接口文档的也可以直接使用postman进行导入查看。