目录
接口就是互相联系的双方共同遵守的一种协议规范。在我们软件系统内部,一般的接口是指通过定义一组API函数来约定软件模块之间的沟通方式。换句话说,接口具体定义软件模块对系统的其他部分提供怎样的服务,以及系统的其他部分如何访问所提供的服务。
1接口设计的基本原则
在设计软件接口时,需要遵循以下基本原则:
- 抽象性:接口设计应基于业务需求,定义清晰的业务问题域模型,并建立起问题的现实映射,以统一不同角色对API设计的认知。通过抽象设计,可以屏蔽具体的业务实现细节,提供更好的可扩展性。
- 简单性:接口设计应遵守最少的知识原则,客户端不需要知道服务的API接口细节。使用外观模式和中介者模式等设计模式,将多个服务进行业务封装与整合,提供一个简单的API调用给客户端。
- 安全性:考虑接口暴露的考虑、并发量、防攻击、跨域等问题,确保接口的安全。
- 可扩展性:在设计接口时,充分考虑接口的可扩展性,根据实际业务场景设计接口,避免不必要的复杂性和重复工作。
接口设计的具体步骤和注意事项
- 定义参数验证:定义参数验证类及抽象接口,添加参数验证注解标识,确保接口参数的校验。
- 考虑兼容性:在修改老接口时,注意接口的兼容性,避免因修改导致系统发版失败。
- 权限验证:在设计接口时,明确哪些接口需要验证,哪些不需要验证,确保接口的权限控制。
- 缓存策略:合理设计缓存策略,根据接口的使用频率和数据变动情况设置不同的缓存时间。接口设计,要注意:接口的可靠性、安全性和高并发。
接口测试的方法和工具
- 逻辑校验:测试接口的逻辑分支,确保所有逻辑分支都被覆盖。
- 参数校验:参照接口文档进行参数校验,确保所有参数都被正确验证。
- 工具使用:使用jmeter、loadrunner、postman、soapUI等工具进行接口测试,提高测试效率。
通过遵循上述原则和步骤,可以设计出高效、安全、可扩展的软件接口。
2接口命名规范
应具有描述性且易于理解的名词或短语。
大驼峰命名法,每个单词首字母大写,且没有下划线。
避免使用缩写。
函数和方法接口:
函数和方法名使用动词或或动词短语,描述其执行的操作。
函数和方法名使用小驼峰命名,第一个单词首字母小写,后续单词首字母大写。
参数名具有描述性,清晰易懂。
返回值应明确指定类型
软件模块接口在面向过程编程中一般是定义一些数据结构和函数接口,在面向对象的编程中一般在类或接口类中定义一些公有属性和方法。两类编程在接口形式上有很大不同,但是不管是函数接口还是对象对外开放的(public)方法,本质上都是函数定义。
3微服务接口
微服务接口一般使用RESTful API来定义接口。RESTful API是目前最流行的一种互联网软件接口定义方式。它结构清晰、符合标准、易于理解、扩展方便,得到了越来越多网站的采用。 在微服务接口举例之前,我们先需要简单的理解微服务架构和RESTful API的基本概念。
RESTful API
REST即REpresentational State Transfer的缩写,可以翻译为”表现层状态转化”。有表现层就有背后的信息实体,信息实体就是URI代表的资源,也可以是一种服务,状态转化就是通过HTTP协议里定义的四个表示操作方式的动词:GET、POST、PUT、DELETE,分别对应四种基本操作:
GET用来获取资源;
POST用来新建资源(也可以用于更新资源);
PUT用来更新资源;
DELETE用来删除资源。
对外开放的 API 接口都会面临一些安全问题,例如伪装攻击、篡改攻击、重放攻击以及数据信息泄露的风险。利用 API 接口签名能方便的防范这些安全问题和风险。
RESTFul最重要的一个设计原则就是,客户端与服务器的交互在请求之间是无状态的,也就是说,当涉及到用户状态时,每次请求都要带上身份验证信息。大部分都采用token的认证方式。
每个接口有各自的版本,一般为接口添加个version的参数。
4同步和异步接口
使用同步接口意味着调用接口的一方需要阻塞等待接口任务目标达成,然后返回才能继续执行,也就是调用接口的双方是串行执行的。
使用异步接口是指调用接口的一方只是发出调用接口的命令,并不需要阻塞等待接口任务目标达成后才返回,而是直接返回,继续执行其他任务,在之后接到任务目标达成的结果或者主动查询任务目标达成的结果。
异步接口的情况比较复杂,往往会借助多线程编程或异步I/O,甚至结合线程池、消息队列、信号传递等,这需要明确定义较为复杂的异步接口机制。