为了更方便的书写和阐述问题,文章中按照第一人称的角度书写。做为一个以java为主要开发语言的工程师,我所描述的都是java相关的编码和设计。java
工程师的静态输出就是代码和文档,动态的就是各类应用程序(app,h5站点,微信公众号,小程序)。动态的先不讨论,主要讨论静态的。
随意查看一个代码库,能够看到代码的编写过程,某些代码可能在如今看来实现很低效和好笑,可是在当时的技术和时间场景下,确定是最优的输出。
也能够在gitlab上看看每次的pull request ,看看当时对这些代码的codeReview ;
反馈出的问题就是程序的设计很是重要。而接口是功能的抽象,相对比较稳定,对团队来讲影响比较大。
**git
先给接口来个简单的定义:即协议,约定了请求和响应的参数和格式。spring
接口设计要求是:
1.简洁;
2.考虑到向后兼容;编程
业界有一些基本的原则:小程序
restfull是一种设计风格,一切接口皆是资源。
目前是设计的主流,思想也很是先进。
segmentfault
请求和响应中的参数要结构化,好处是易读易用。设计模式
这个怎么重要都不为过,接口设计必须考虑认证和受权,保证特定的人只能访问特定的资源。
同时须要注意在日志中不能含有用户和系统的敏感信息。
api
也就是接口要通用,能够处理不一样客户端的请求。通常在接口设计的时候,能够带入透传参数,好比时区,位置(省市区),系统类型,系统版本,应用类型,应用版本等;安全
即接口的第一次请求的结果和后面N次的重试结果要不变,须要结合场景来保证。微信
有了接口设计的原则,能够挑选一个可靠的接口框架来支持本身的工做,
一个好的接口框架应该有以下特色:
我通常选的springmvc,由于平时工做跟spring贴合的比较紧,并且spring有各类生态,适合在不一样的行业和公司使用。jersey也用,虽然灵活,可是不具有广泛适用性;
api太自由,会影响团队的协做,而共同约定api的设计模式和实现模式能够解决这个问题。
要综合考虑向后的兼容性,可是只实现当前软件当前阶段必须的功能点。
面向切面编程能够在跟业务无关的垂直领域处理问题,好比日志,监控,解析等;能够提升代码的重用性和规范性;
可是也有缺点,好比,增长了测试和分析的难度,也对研发人员要求比较高。
因此须要综合考虑。
接口实现进行封装能够提升可维护性,可是也会带来性能开销,因此也是须要综合考虑的。
**
经过本篇文章你能够学到以下内容:
设计良好的接口,能够提升软件的复用性,提升团队的输出效率和质量。
原创不易,转载请注明出处,欢迎沟通交流。