RESTful接口的命名规范与语义格式
RESTful是一种网络应用程序的设计风格和开发方式,可以使用xml方式来定义或者json格式来定义。RESTful适用于移动互联网厂商作为业务接口的场景,实现调用移动网络资源的功能。
动作类型:新增、修改、删除所调用的资源。
RESTful的三个要点:
1. 基于http协议URL对外暴露;
URL被视为资源,中括号的内容为可选项。
2. 使用XML或者JSON格式定义数据,不可以包含任何与展现有关的内容。比如,下图中返回了浏览器才能解析的内容(html),对于移动端app则无法使用。
应该改为如下形式:
具体的展现由前端客户端进行渲染。
3. 根据不同的行为使用不同的请求方式。
RESTful接口设计的注意事项
1、接口要保持幂等性。多次重复请求时,接口能够保证与预期相符的结果。
举个栗子:有一个为员工涨工资的接口,每调用一次就给员工涨500工资。
如果不考虑幂等性,接口会这样写,当前端使用重试或者消息补偿的形式重复发送请求时,发生错误:
为了解决这个问题,就要使用乐观锁,在员工表上额外添加一个version字段代表当前数据的版本,任何对该数据修改操作时会让version字段的值加一。这个值要求附加在请求当中。
服务端的代码也要添加对version的更改操作:
同时sql语句要增加对version的比对:
执行成功后数据库中的数值变为如下:
当重复执行上图中的请求时,由于version值已经变成了2,所以where筛选条件将无法得到任何数据。
除此之外,还有幂等表、分布式锁、状态机等其他实现方式。
2、标准化的响应结果集。
data是可选项,表示额外的返回数据。code默认为0,遇到异常公司内部也要遵循统一的命名标准。
3、接口设计采用无状态方案。每一个请求访问进来都能得到相同的预期。
举个栗子。
当数据被分配到某一个tomcat节点上,而其他节点没数据,就会发生两次请求中tomcat状态不一致。
解决方法有两个:
1、客户端存储
2、后端统一存储状态数据。所有tomcat节点访问相同的数据源。添加redis对状态数据进行存储,保证用户敏感数据。