今天与另一位前端开发人员扯起了后端接口的皮(我也是前端人员),那个兄弟对后端人员提供的接口很大的意见(我是司空见惯),不过他说的也确实有道理,所以结合我的见解,希望提供接口的人员能多加注意。

1.没有文档...

例如新的前端人员到了一个新的公司,使用接口时,问这个这个不知道,问那个那个不知道,要文档没文档,这绝对是前端人员最抓狂的事,心里肯定是一千只草泥马奔腾而过。

为什么要文档?

1. 文档是当前开发者甚至后面的接盘侠(后面开发者)能够清晰往下做的指引。

2. 即便是简单的东西,但如果不写文档,以后口口相传消耗的工作量会比写文档更多。

3. 好记性不如烂笔头,一段时候后,可能连开发者都忘记接口的用途。

文档怎么写?

1. 在线文档。

在线文档易于更新和他人查看,例如可以使用Swagger编写接口文档。

PS:Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。

2. 本地文档。

本地文档一般用Word文档,但是比较不易传播,但能离线查看。

Final~

文档是及其关键的,无论是在线文档还是本地文档,有是关键。虽然写文档是麻烦的事,但对后端人员来说,是利人利己。

2.文档不全...

额,就是有了文档,文档里面对接口的描述也可能不全,可能缺每个参数详尽描述(取值范围、类型)、请求方式(GET、POST、PUT、DELETE)、返回数据的所有状态等等。这里面可能最缺就是返回数据的状态!

一般的返回数据结构~

公司的数据接口返回结构是

{s : 0/ 1,     //表示此操作的处理状态( status ),一般简单的成功 /不成功,使用 1/0 表示。m : 'xxxx',  //表示此操作的提示信息( message ),一般只用来显示操作失败时提示信息。r : [],  //表示此操作的返回值( result )count : x  //返回的数据条数
}

这种数据结构看起来没问题,确实也没大问题,问题就是出在s这个字段。有许多的接口不仅仅只有两种状态,成功状态只有一种倒是没问题,问题就出在失败状态,失败可能有很多情况,一个简单的s:0不能说明失败的原因(即便是有m提示信息,但用这个来区分很不靠谱,因为提示可能会变化),我们不总是仅拿m做显示用。

升级返回数据结构~

那位同事建议以下方式应答

{s : 0/ 1/ 2/ 3,     // 0代表正常,1是参数有误,2是用户不存在,3是用户没权限等等m : 'xxxx',  //表示此操作的提示信息( message ),一般只用来显示操作失败时提示信息。r : [],  //表示此操作的返回值( result )count : x  //返回的数据条数
}

m、r、count 可以保持不变,但是s里面必须包含所有返回状态,代表这个接口所有业务的情况,前端开发人员也就能针对每种情况进行处理。

Final~

文档最重要的部分是返回值的状态,我也建议上面的升级返回数据结构,这样就不存在任何不明朗情况。既然写了文档,就把文档写好,写明朗,这也是利人利己地方。

3.接口参数没校验...

这个前端人员倒不是很关注,因为本身调接口之前都会先做校验,后端做参数校验只是双重保证。我之前也做过一段时间后端,也犯过没校验参数的错,额,因为后来没有做后端,也就没有去修正。不过还是提醒后端人员,做好参数校验是第一步,不要偷懒了。

Final~

统一处理好接口校验,后端好好考虑下。

4.没保证接口原子性...

接口的原子性很重要,有时一个接口可能会干几件事,但不一定都能正常完成,这就导致可能存在原子性问题,接口不能准确被调用。

PS:原子性。一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。

Final~

原子性一定要保证,保证,保证!

5.接口问题不断...

前端开发人员调接口时候,可能会存在各自各样的问题,有问题可以理解,程序哪会没有bug,但不能太离谱啊,后端兄弟们。所以我觉得在给出接口之前自己明确几件事:

1. 是否校验参数。

2. 是否所有的情况都测试过了,如果可以请写单元测试。

3. 是否返回数据准确明朗,响应状态码是否正常。

4. 文档是否已经完备。

总结

后端人员多体谅前端人员,在出现问题时,先检查自身,别一上来就跟前端干起来,要是自己的问题就尴尬了。

本文为原创文章,转载请保留原出处,方便溯源,如有错误地方,谢谢指正。

转载自https://www.cnblogs.com/lovesong/archive/2016/05/26/5533149.html

前端后端接口那些事吐槽相关推荐

  1. 有理有据:一篇来自前端同学对后端接口的吐槽!

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | juejin.im/post/5cfbe8c7 ...

  2. 一篇来自前端同学对后端接口的吐槽:痛!

    前言 去年的某个时候就想写一篇关于接口的吐槽,当时后端提出了接口方案对于我来说调用起来非常难受,但又说不上为什么,没有论点论据所以也就作罢.最近因为写全栈的缘故,团队内部也遇到了一些关于接口设计的问题 ...

  3. webstorm前端调用后端接口_一篇前端同学对后端接口的吐槽

    来源:juejin.im/post/5cfbe8c7e51d4556da53d07f 前言 去年的某个时候就想写一篇关于接口的吐槽,当时后端提出了接口方案对于我来说调用起来非常难受,但又说不上为什么, ...

  4. 一篇来自前端同学对后端接口的吐槽

    来自:掘金,作者:李熠 链接:https://juejin.im/post/5cfbe8c7e51d4556da53d07f 前言 去年的某个时候就想写一篇关于接口的吐槽,当时后端提出了接口方案对于我 ...

  5. 知己知彼:一篇来自前端同学对后端接口的吐槽!

    作者:李熠 juejin.im/post/6844903861841313806 前言 去年的某个时候就想写一篇关于接口的吐槽,当时后端提出了接口方案对于我来说调用起来非常难受,但又说不上为什么,没有 ...

  6. 前端封装接口弹出错误_项目实践:SpringBoot三招组合拳,手把手教你打出优雅的后端接口...

    前言 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个部分每个公司要求都不同,没有什么 ...

  7. 前端调用后端接口的错误(400)

    前端调用后端接口时,浏览器debug出现Failed to load resource: the server responded with a status of 400 (Bad Request) ...

  8. Nginx解决前端调用后端接口跨域问题

    Nginx解决前端调用后端接口跨域问题 参考文章: (1)Nginx解决前端调用后端接口跨域问题 (2)https://www.cnblogs.com/wangymd/p/11200746.html ...

  9. vue调用接口修改密码_vue开发前后端分离前端如何调用后端接口?

    对前后端分离如何调用接口这块感觉一直没怎么弄明白,但又不知如何说明,下面我模拟一个项目说明我的问题. 现在我们有个项目,前端用vue开发,后端php开发,后端测试地址为:localhost:8181, ...

最新文章

  1. 什么是数据湖(Data Lake)?
  2. linux下mysql修改字符集,远程连接
  3. OpenCV使用CNN进行目标检测
  4. C++虽不会过时,但是真的难啊!
  5. XML——写出XML文档(XSLT+StAX)
  6. 虚拟机的ip地址为什么会发生变化
  7. Eigen官网教程(2) Array类和元素级操作
  8. java 一次CPU占用过高问题的排查及解决,java基础面试笔试题
  9. C++读取字符串中的数字的方法
  10. linux java运行class文件_jvm学习java文件运行过程
  11. office 公式编辑器 插入花体格式字母
  12. Windows XP修改CHM字体大小
  13. 一个人如何开发一款app?(2020修改版)
  14. C语言:access函数的用法
  15. CuteHttpFileServer: 一键搭建文件共享服务器
  16. Esp32+Dht11+MQTT+Mysql实现测温数据传至数据库
  17. 爬虫学习笔记 -- 实战某电影网(lxml库版)
  18. 小新14pro锐龙版虚拟机启动蓝屏重启
  19. js 触发 change 事件
  20. 【SQL学习笔记】《SQL进阶教程》1.1

热门文章

  1. 前端学习(1729):前端系列javascript之内容卡片布局
  2. 前端学习(1704):前端系列javascript之问题解答2和总结
  3. 前端学习(795):基本包装类型
  4. mybatis学习(53):构造方法映射
  5. 第五十一期:互联网不如国企,去BAT的程序员都是diao丝?
  6. html:(8):span标签和q标签
  7. java学习(174):constructor类反射编程
  8. java学习(172): 使用class实现反射编程,创建对象
  9. android选择头像弹窗,Android App开发常用功能之用户头像选择-Go语言中文社区
  10. JS中的bind()方法