0

我有一个 StudentsController,我目前有以下工作:

http://mycompany.com/api/v1/students   <-- returns list of students
http://mycompany.com/api/v1/students/5 <-- returns student with Id = 5

我有一个要求返回 2013 级的所有学生,但以下当然行不通:

http://mycompany.com/api/v1/students/2013 <-- won't work, because it would look for the student with Id = 2013

我可以这样做:

http://mycompany.com/api/v1/students?gradclass=2013

但我想知道是否有一种方法可以在没有查询字符串的情况下有意义,例如:

http://mycompany.com/api/v1/students/gradclasses/2013

上面的排序是有道理的,但这并不完全有道理:

http://mycompany.com/api/v1/students/gradclasses <-- this sort of makes no sense

此外,一旦我们弄清楚了使用路由设置正确解决方案的方法是什么?

这值得吗?最佳做法是什么?我正在努力寻找有关 REST 和 GET 查询参数的最佳实践。

4

2 回答 2

0

我会将“2013 届学生”视为一种观点。然后将 api 编写为 /type/view/params。所以: http: //mycompany.com/api/v1/students/byclass/2013
http://mycompany.com/api/v1/students/withJobOffer
http://mycompany.com/api/v1/students/repeaters/ 2012

事实上,视图可以重叠。那更复杂。然后你必须处理查询字符串: http ://mycompany.com/api/v1/students?class=2013&withJobOffer=true&repeaters=2012

于 2013-11-12T00:02:56.127 回答
0

由于 REST 是关于思考可以浏览的资源,即使事先不知道结构,我也会添加你的工作示例,通过将 gradclasses 视为另一种类型的资源来获取所有学生和单个学生,如下所示:

http://mycompany.com/api/v1/gradclasses/ => Return all grad classes
http://mycompany.com/api/v1/gradclasses/2013/ => Return a grad class of 2013 with it's info
http://mycompany.com/api/v1/gradclasses/2013/students/ => Return the students of grad class 2013

这样,您将拥有良好的关系和易于探索的内容。

更进一步,如果您想抽象出学生具有全局唯一 ID 以增加持久性无知这一事实,您可以仅通过以下方式实现学生的获取:

http://mycompany.com/api/v1/gradclasses/2013/students/5 => Return the student 5 of grad class 2013
于 2015-12-17T19:50:56.180 回答