接口设计须要考虑哪些方面

接口设计须要考虑哪些方面mysql

1.接口的命名。nginx

2.请求参数。程序员

3.支持的协议。sql

4.TPS、并发数、响应时长。数据库

5.数据存储。DB选型、缓存选型。缓存

6.是否须要依赖于第三方。并发

7.接口是否拆分。app

8.接口是否须要幂等。负载均衡

9.防刷。异步

10.接口限流、降级。

11.负载均衡器支持。

12.如何部署。

13.是否须要服务治理。

14.是否存在单点。

15.接口是否资源包、预加载仍是内置。

16.是否须要本地缓存。

17.是否须要分布式缓存、缓存穿透怎么办。

18.是否须要白名单。

当咱们设计接口,咱们或多或少都会有上面列举的一些考虑,咱们只有想的更多才能让让咱们的接口更加完善,我我的以为100%完美的接口是不存在,只有适合才是最重要。

 

接口设计原则

原则一:必须符合Restful,统一返回格式,约定业务层错误编码,每一个编码能够携带可选的错误信息。

原则二: 命名必须规范、优雅。

原则三:单一性。

单一性是指接口要作的事情应该是一个比较单一的事情,好比登录接口,登录完成应该只是返回登录成功之后一些用户信息便可,但不少人为了减小接口交互,返回一大堆额外的数据。

好比有人设计一个用户列表接口,接口他返回每一条数据都是包含用户了一大堆跟另外无关的数据,结果一问,原来其余无关的数据是他下一步想要获取的,想达成数据的懒加载。

原则四:可扩展。

接口扩展性,是指设计接口的时候多想一想多种状况,多考虑各个方面,其实我以为单独将扩展性放在这里也是不妥的,感受说的跟单一性有点相反的意思,其实这个不是这个意思。

这边的扩展性是指咱们的接口充分考虑客户端,想一想他们是如何调用的,他要怎样使用个人代码,他会如何扩展个人代码,不要把过多的工做写在你的接口里面,而应该把更多的主动权交给客户程序员。

如获取不一样的列表数据接口,咱们不可能将每一个列表都写成一个接口。 还有一点,我这里特别想指出来的是不少开发人员为了省事(姑且只能这么理解),将接口设计当成只是 app 页面展现。

这些人将一个页面展现就用一个接口实现,而不考虑这些数据是否是属于不一样的模块、是否是属于不一样的展现范畴、结果下次视觉一改,整个接口又得重写,不能复用。

原则五:必须有文档。

良好的接口设计,离不开清晰的接口文档表述。文档表述必定要足够详细

原则六:产品心。
原则七:第三方服务接口数据能缓存就缓存。

原则八:第三方服务须要作降级。

原则九:建议消除单点。

原则十:接口粒度要小。

原则十一:客户端能处理的逻辑就不要给服务端处理,减小服务端压力。

原则十二:资源预加载。

原则十三:不要过分设计。

原则十四:缓存尽可能不要穿透。

原则十五:接口能缓存就缓存。

原则十六:思辨大于执行
高性能:若是咱们发现这个接口tps和响应时间没有达到咱们的要求怎么办。

A:数据存储方面:咱们会想数据库有没有分库、分表、有没有作主从,有没有读写分离、字段是否有加索引、是否存在慢 sql,数据库引擎是否选用合适、是否是用了事务;

其次咱们会想到是否是引用了分布式缓存、缓存 key 大小是否合适,失效时间是否设置合理,会不会大量缓存穿透、有没有引入本地缓存。

B:业务方面:是否有大量的计算、可否异步处理。是否须要引入线程池或者 MQ 来异步处理任务。有没有必要将接口进行垂直拆分和水平拆分、将接口粒度变小。

C:其余方面:nginx 层面作缓存、加机器、用 ssd,资源放 cdn,多机房部署、资源文件预加载。
高可用:如何保证服务高可用,须要从几个维度来实现:

A:消除单点,基于高可用第二位。

B:能作集群的所有作集群。譬如 Redis 集群、mysql集群、MongoDB副本集。

C:能作读写分离的都作读写分离。

D:异地多机房部署,接入 GSLB

E:必须有限流、降级机制。

F:监控。高可用的保证,基于第一位。

相关文章
相关标签/搜索