作为个人编程项目,我正在努力抓取我的大学课程目录并将数据作为REST API提供。我已成功删除所有数据并将其存储在数据库中,现在正在使用API。
课程可以根据许多标准进行过滤:教师,大学,学分,时间,日等。
在这种情况下提供API的最佳方法是什么?
选项1
提供多个网址,例如
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on
我需要一个包含所有排列的网址。对我和API消费者而言,这看起来非常麻烦,而且非常糟糕。
选项2
仅为主要选项提供API,例如:
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
如果消费者想要bycollegeandinstructor
,他就会对他进行过滤。
选项3
用户将JSON字符串传递给我,我用它来获取过滤条件
example.com/api/getcourses/<jsonstring>
jsonstring =
{
instructor:<instructorcode>,
college:<collegecode>,
...and so on
}
我想我可能还需要一个POST数组,而不是Json字符串,但这对于消费者来说似乎是非本能的,因为他正在获取数据。
还是有其他方法这样做我不知道吗?如果第三个选项是最佳选项,您是否可以根据可能具有可变数值的JSOn字符串提供最佳的简短摘要来准备SQL查询?
答案 0 :(得分:13)
为了扩展J.F.的答案,听起来你有一个资源,一套课程,它们将在URI:
/courses
过滤该资源通常使用查询参数来过滤该单一资源,例如:
/courses?college=123&instructor=321
通过这样做,您可以避免所有可能的排列问题,从而产生大量资源。
从根本上说:有一种资源可以根据需要进行过滤。
答案 1 :(得分:5)
GET example.com/courses?college=<collegecode>&instructor=<instructorcode>