使用RESTful风格api命名接口时,GET方法怎么传递多个参数

本文探讨了RESTful风格API的设计原则,对比了其与普通接口命名的区别,重点介绍了如何使用/表示资源层级,以及如何通过@PathVariable注解处理不同数量的URL参数,包括必选和非必选参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用RESTful风格不同于普通借口命名的一点是,它规范使用/来表示资源之间的层级关系。

RESTful接口名普通接口名接口含义
GET:usersGET:users获取所有用户列表
GET:users/123GET:users?userId=123获取id为123的用户信息
GET:users/class/1GET:users?class=1获取班级id为1的所有用户信息
GET:users/class/1/gender/1GET:users?class=1&gender=1获取班级id为1,性别id为1的所有用户列表

对于普通形式命名的接口,假设需要传入lessonId、lessonType2个必选项,在controller传入参数时,可以写成下图的形式:
在这里插入图片描述

但是对于RESTful风格的url,传入参数是应该用到@PathVariable注解,示例解析如下:在这里插入图片描述

那么对于传入传入lessonId、lessonType2个必选项时,用@PathVariable注解的话,应该写成:
在这里插入图片描述

调用之后的结果显示成功。

在这里插入图片描述

但是,还有一种情况,假如传入的参数有的是非必选项,那么应该把可能出现的url在声明时全部列出来,并且把@PathVariable注解配置的参数设置为非必选(required=false),如下图:
在这里插入图片描述

调用之后结果如下:
在这里插入图片描述

由此可见,对于RESTful风格的接口,当查询接口需要传入一个或者两个参数的时候,编码起来较为简单,但是当传入3个以上参数的手,要列举出url的所有可能性还是比较复杂的。所以,RESTful风格的接口传入参数比较复杂时,还是尽量使用POST方法比较简便。

### RESTful API 命名规则和最佳实践 #### 使用名词表示资源 RESTful 接口应该基于资源进行设计,因此URL 中应当使用名词来代表资源实体。通常情况下,避免在 URL 中使用动词[^2]。 例如: - 正确做法:`GET /users` - 不推荐的做法:`GET /getUser` #### 资源名称采用复数形式 为了保持一致性并使意图更加清晰,在定义集合型资源使用复数形式的名称。 例子如下所示: ```http GET /books // 获取所有书籍列表 POST /books // 创建一本新书 ``` #### 利用子路径表达层次关系 当存在父子级联关系的候,可以通过嵌套的方式来展示这种关联结构。 实例说明: ```http GET /authors/{authorId}/books // 获取特定作者的所有作品 ``` 这里 `{authorId}` 是一个变量占位符,用于指定具体的作者ID。 #### 避免冗余前缀或后缀 除非确实有必要区分不同类型的API服务端点,否则不建议给所有的路由都加上相同的前缀或者后缀。 比如下面的例子就显得多余而不必要: ```http // 应该去掉 "service" 这样的固定部分 GET /book-service/books ``` #### 合理运用HTTP方法操作资源 不同的 HTTP 方法对应着对资源的不同行为模式,遵循这些约定可以使接口更直观易懂[^1]: | HTTP Method | 描述 | |-------------|------| | `GET` | 请求获取由 URI 所标识的资源的信息副本 | | `POST` | 在服务器上创建新的资源 | | `PUT` | 更新整个现有资源 | | `PATCH` | 对资源的部分更新 | | `DELETE` | 删除某个已存在的资源 | #### 状态码的选择要恰当 针对各种情况返回合适的状态码能够帮助客户端理解请求的结果状态,并据此采取相应的措施[^5]。 常见场景下的响应码示例: - 成功读取单个或多条记录 -> `200 OK` - 新建一条记录成功 -> `201 Created` - 修改某项数据完成 -> `204 No Content`(无内容返回)
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值