问题描述
识别使用不同字段/参数获取相同模型/实体的不同 GET 端点的推荐约定是什么?
例如,有一个 Student
实体,我希望为其公开不同的 GET 端点。假设第一个 GET 端点是一个 get-by-id 端点,它根据提供的 ID 获取 Student
。另一个端点可能涉及基于 Student
获取 email
,但另一个端点可能用于通过 Student
获取 phone
。
- 使用单独的端点
/students/get-by-id/{id}
、/students/get-by-email/{email}
和/students/get-by-phone/{phone}
- 使用单个端点
/students
并接受诸如/students?phone=123
之类的请求参数,然后在后端确定必须使用哪个方法来获取。
推荐的方法是什么?
解决方法
我会建议选项 2,因为最好保持 rest 端点干净和简单,并隐藏代码中的复杂性。另外,您不知道将来会出现哪些其他要求,例如添加新的查询字段,这需要新的休息路径。恕我直言,更改rest端点类似于更改作为生产者和消费者之间合同的接口。