您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

接口设计技巧和最佳实践

时间:2019-09-05 13:51:51  来源:  作者:

这篇文章是从人们在设计和实现接口时常见的和常被无视的错误,总结出来的一些技巧和最佳实践

1、严格的数据模型层

 

你的响应应该是在代码中严格定义的嵌套数据业务模型,不要依赖数据库查询结果映射,或者其他操作

2、无歧义的服务名

 

记住你的URL应该能充分表达出真实作用,而不是需要翻阅文档才能了解,另外不要不情愿使用版本号命名路由,当然服务版本应该要做到向下兼容

3、数据类型强一致

 

数值字段应该始终只包括数字,字符类型字体意义始终只包括字符串,同一个字段中不应该混合多种类型数据

4、始终返回所有的字段

 

不要删除字段属性,即使值为空

 

5、不要滥用JSON对象

 

API中的每个JSON对象应该始终在请求之间具有不可变性,具有严格的定义的字段集,下面这种返回就是可怕的做法

接口设计技巧和最佳实践

 

正确返回应该是

接口设计技巧和最佳实践

 

6、不要滥用JSON数组

当绝对无法避免在同一数组中返回不同类型实体时,尝试返回足够抽象的对象列表,里面包括所有对象,每个对象显示标明类型。比如飞机和汽车不应该出现在同一个返回数组中,但是无法避免时,可以使用下面这种方式

接口设计技巧和最佳实践

 

7、不要依赖普通的硬编码错误信息

接口返回错误时,在响应正文中应该包括严格定义的错误对象,对象一般包括内部代码和附加信息

8、不要使用数字枚举

9、不要返回非封装的响应

使用对象作为根响应容器以允许后续添加任意数量的字段而不会导致弃用,比如我们可以使用is_available布尔值标识book的状态,但是它没有表明为啥是不可用状态?什么时候会变得可用?如果将来需要增加其他信息,你将不得不修改根响应

10、使用JSON布尔值

11、尽量让你的接口满足HATEOAS 约束

服务器提供给客户端的表达中包含了动态的链接信息,客户端通过这些链接来发现可以触发状态转换的动作,资源的URI和其他信息都是动态发现的,当服务端发送变化时,客户端并不需要做出修改

12、考虑让你的接口结果可缓存

客户端可以缓存服务器返回的响应结果,服务器可以定义响应结果的缓存时长设置

13、为你的接口实现限流

API确实实施了速率限制的话,请务必通过响应提供其当前状态来告知你的调用者

14、考虑让你的接口返回支持字段过滤

客户端请求可以指定希望服务端在响应中包括哪些字段或者排除哪些字段,这样可以有效处理响应膨胀

15、接口支持高级分页

分页可以减少客户端接收的数据数目,但是当你需要将分页结果与不断接收的新条目结合时,通常的限制limit和偏移offset分页参数是低效的,因为每次当有个新条目在服务端被添加到先前的集合时,先前发送到客户端的偏移offset都变得无效,而且客户端无法得知在两次请求间新增了多少条目。保持客户端同步一个比较好的办法是使用before_id和after_id参数组合,比如客户端将已知的最新条目的id作为after_id请求参数,然后检索之后创建的新条目

16、接口异常显式返回

RPC调用中Exception应该也是返回值的一部分,应该设计成Checked Exception,尽量让调用方能够显式的处理

17、接口使用Specification规格模式

设计者应该避免太多findBy方法和各自的重载,正确的打开方式应该类似组合模式

接口设计技巧和最佳实践

 

18、为功能定义接口,不为个别使用方定义接口

定义好统一的路由接口,而非为每一个使用方定义个别处理,如果需要特殊字段,要考虑特殊字段的通用性,如果有通用性,在通用接口上加上字段,其他使用方可维持空,如果没有通用性,作为一个配置字段配置进去



Tags:接口   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
首先我们要弄懂什么是“雷电”接口。其实“雷电”本质上和咱们常见的HDMI,DP等一样是一种传输协议的简称,全程英文名叫做Thunderbolt。请注意与其说他是一个接口倒不如说他是...【详细内容】
2021-12-27  Tags: 接口  点击:(10)  评论:(0)  加入收藏
Hi,大家好。我们在接口自动化测试项目中,有时候需要一些加密。今天给大伙介绍Python实现各种 加密 ,接口加解密再也不愁。目录一、项目加解密需求分析六、Python加密库PyCrypto...【详细内容】
2021-12-21  Tags: 接口  点击:(8)  评论:(0)  加入收藏
最近在逛知乎的时候发现一个有趣的问题:《公司规定所有接口都用 post 请求,这是为什么?》原问题:zhihu.com/question/336797348看到这个问题的时候其实我也挺有感触的,因为我也...【详细内容】
2021-12-08  Tags: 接口  点击:(24)  评论:(0)  加入收藏
requests一、简介使用 python 做自动化接口测试需要用代码发送 http 请求。requests 是 Python 语言里网络请求库中最好用的,没有之一。requests 库有完善详尽的中文版官方...【详细内容】
2021-12-01  Tags: 接口  点击:(15)  评论:(0)  加入收藏
public class LambdaDemo { public static void main(String[] args) { /** * 用来判定true或者false boolean test(T t); */ Predicat...【详细内容】
2021-10-18  Tags: 接口  点击:(57)  评论:(0)  加入收藏
一、幂等性概念在数学里,幂等有两种主要的定义。1、在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和...【详细内容】
2021-10-09  Tags: 接口  点击:(44)  评论:(0)  加入收藏
Guava提供的RateLimiter可以限制物理或逻辑资源的被访问速率,咋一听有点像java并发包下的Samephore,但是又不相同,RateLimiter控制的是速率,Samephore控制的是并发量。RateLimit...【详细内容】
2021-09-17  Tags: 接口  点击:(72)  评论:(0)  加入收藏
相对于HDD(机械硬盘)来说,SSD(固态硬盘)拥有速度快、无噪音、轻便、防震抗摔等优点,而这也让不少人在为旧电脑升级或扩展存储空间时会优先考虑SSD。但在选购的时候,我们会发现SSD有...【详细内容】
2021-09-14  Tags: 接口  点击:(78)  评论:(0)  加入收藏
前言上次有写过一篇《20张图深度详解MAC地址表、ARP表、路由表》的文章,里面有提到了MAC地址表。那么什么是MAC地址表?MAC地址表有什么作用?MAC地址表里面包含了哪些要素?今天...【详细内容】
2021-09-09  Tags: 接口  点击:(76)  评论:(0)  加入收藏
前言前后端分离开发模式中,api文档是最好的沟通方式。今天就来说一说如何整合Swagger生成一套漂亮、美观、实用的接口文档。 源码传送门: https://gitee.com/huoqstudy/xiliu-...【详细内容】
2021-09-08  Tags: 接口  点击:(65)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条