繁体   English   中英

如何最好地设计具有多个过滤器的REST API?

[英]How best to design a REST API with multiple filters?

作为一个个人编程项目,我正在抓取我的大学的课程目录,并将数据作为REST API提供。 我已经成功抓取了所有数据并将其存储在数据库中,现在正在使用API​​。

可以根据许多标准对课程进行过滤:教师,大学,学分,时间,天数等。

在这种情况下提供API的最佳方法是什么?

选项1

提供大量网址,例如

example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on

我需要所有排列的URL。 对于我和API使用者而言,这似乎非常麻烦,而且非常干燥。

选项2

仅为主要选项提供API,例如:

example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>

并且,如果消费者希望由bycollegeandinstructorbycollegeandinstructor ,他会在自己的末端进行过滤。

选项3

用户将JSON字符串传递给我,我使用它来获取过滤条件

example.com/api/getcourses/<jsonstring>

jsonstring = 
{ 
  instructor:<instructorcode>,
  college:<collegecode>,
  ...and so on
}

我想代替Json字符串,我可能还需要一个POST数组,但这对使用者来说似乎是不明智的,因为他正在获取数据。

还是有另一种我不知道的方法? 如果第三个选项是最好的选择,那么您能否提供一个简短的摘要来最好地基于可能具有可变数量值的JSOn字符串准备SQL查询?

为了扩展JF的答案,听起来好像您拥有一个资源,即课程集,该资源位于URI上:

/courses

通常使用查询参数过滤单个资源来完成对该资源的过滤,例如:

/courses?college=123&instructor=321

这样,您可以避免所有可能的排列导致资源大量扩散的问题。

从根本上讲:只有一种资源,可以根据需要进行过滤。

GET example.com/courses?college=<collegecode>&instructor=<instructorcode>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM