Restful接口命名实践探索

文章目录

  • 1、 使用pathVariable进行层级限定
  • 2、单数还是复数
  • 3、分页怎么表示

RequestMethod表示什么动作的我们就不说了,那种太简单,网上一堆,我们说说动作以外的问题

1、 使用pathVariable进行层级限定

当限定为某个单个资源时,id使用pathVariable来传递,而不是requestParam的方式,也就是通过url来传递id参数,而不是通过get或者post的请求参数。
/users 表示列表
/users/{id} 表示单个的操作
二级操作
/users/{id}/roles 表示用户的角色列表
/users/{id}/roles/{roleId} 表示用户的某个角色

2、单数还是复数

/users 表示list操作没问题,表示单个的时候,会产生一种误解,感觉应该为/user/id。于是出现列表用users,单个的时候user/{id}这种方式。
反过来看,users理解为user的集合,但是user也可以说是user的统称,表示domain。
restful只是一种概念,并没有严格的定义,于是就产生了三种方式

  1. 全部复数 users
  2. 列表用复数,单个个体用单数 users user/{id}
  3. 全部单数 user
    从网上搜的情况来看,倾向于全部使用复数的更多一点。

3、分页怎么表示

/users 表示list,如何表示page
一般有两种方式
/users?pageNo=xx&pageSize=xx
和users相同,使用url参数来拼接pageNo和pageSize
/users/page/{pageNo}?pageSize=xx
其中pageNo必填,pageSize选填,将页码pageNo通过pathVariable来表示,pageSize作为可选项,如果不选,系统有默认pageSize。如果输入了pageSize,以输入的pageSize为准

两种的区别在于

  1. 从概念上讲,是将page当成资源,还是说是资源的表现形式。如果是资源,那么就单独给url,如果是表现形式,应该拼接url参数。
  2. 从代码上看,使用url参数的方式,查询分页会和查询列表公用一个action层方法,方法返回Object,在里面根据是否有pageNo参数判断是否是查询列表逻辑还是分页逻辑。
    我更倾向于将page当成一种表现形式,当然,你怎么理解都可以,只要你能说服你的团队。

你可能感兴趣的:(Java,restful,api,rest,api单数,复数,分页rest,api)