0226 rest接口设计
2020-02-27 16:02:35来源:博客园 阅读 ()
0226 rest接口设计
? ? ? ? ? ?
背景
为了更方便的书写和阐述问题,文章中按照第一人称的角度书写。作为一个以java为主要开发语言的工程师,我所描述的都是java相关的编码和设计。
工程师的静态输出就是代码和文档,动态的就是各种应用程序(app,h5站点,微信公众号,小程序)。动态的先不讨论,主要讨论静态的。
随意查看一个代码库,可以看到代码的编写过程,某些代码可能在现在看来实现很低效和可笑,但是在当时的技术和时间场景下,肯定是最优的输出。
也可以在gitlab上看看每次的pull request ,看看当时对这些代码的codeReview ;
反馈出的问题就是程序的设计非常重要。而接口是功能的抽象,相对比较稳定,对团队来说影响比较大。
**
API设计原则
先给接口来个简单的定义:即协议,约定了请求和响应的参数和格式。
接口设计要求是:
1.简洁;
2.考虑到向后兼容;
业界有一些基本的原则:
1 restfull
restfull是一种设计风格,一切接口皆是资源。
目前是设计的主流,思想也非常先进。
2 参数结构化
请求和响应中的参数要结构化,好处是易读易用。
3 安全
这个怎么重要都不为过,接口设计必须考虑认证和授权,保证特定的人只能访问特定的资源。
同时需要注意在日志中不能含有用户和系统的敏感信息。
4 客户端无关
也就是接口要通用,可以处理不同客户端的请求。一般在接口设计的时候,可以带入透传参数,比如时区,位置(省市区),系统类型,系统版本,应用类型,应用版本等;
5 幂等
即接口的第一次请求的结果和后面N次的重试结果要不变,需要结合场景来保证。
API设计实践
接口框架选型
有了接口设计的原则,可以挑选一个可靠的接口框架来支持自己的工作,
一个好的接口框架应该有如下特点:
- 对访问控制的支持;
- 自动测试的支持;
- 请求响应格式和序列化的支持;
- 日志和日志过滤的支持;
- 自动生成文档的支持;
- 对架构和性能的影响较小;
我一般选的springmvc,因为平时工作跟spring贴合的比较紧,而且spring有各种生态,适合在不同的行业和公司使用。jersey也用,虽然灵活,但是不具备普遍适用性;
设计中的平衡
1 设定团队的API设计和实现模式
api太自由,会影响团队的协作,而共同约定api的设计模式和实现模式可以解决这个问题。
2 避免过度设计
要综合考虑向后的兼容性,但是只实现当前软件当前阶段必须的功能点。
3 谨慎使用AOP
面向切面编程可以在跟业务无关的垂直领域处理问题,比如日志,监控,解析等;可以提高代码的重用性和规范性;
但是也有缺点,比如,增加了测试和分析的难度,也对研发人员要求比较高。
所以需要综合考虑。
4 可维护性和性能之间要平衡
接口实现进行封装可以提高可维护性,但是也会带来性能开销,所以也是需要综合考虑的。
**
小结
通过本篇文章你可以学到如下内容:
- [ ] 接口设计的原则
- [ ] 接口设计框架选型要点
- [ ] 接口设计过程中的设计实践问题
设计良好的接口,可以提高软件的复用性,提高团队的输出效率和质量。
原创不易,转载请注明出处。
原文链接:https://www.cnblogs.com/snidget/p/12371410.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:代理模式-jdk动态代理
- Spring系列.ApplicationContext接口 2020-06-11
- @Controller、@RestController 2020-06-08
- 为什么阿里巴巴Java开发手册中强制要求接口返回值不允许使用 2020-06-06
- Java生鲜电商平台-生鲜电商接口幂等性原理与防重复提交方案( 2020-06-05
- Java连载120-反射机制获取构造方法和父类、父接口 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash