As a personal programming project, I am working on scraping my University's course catalog and providing the data as a REST API. I have successfully scraped all the data and stored it in a database, and am now working on the API.
The courses can be filtered on the basis of many criteria: instructor, college, credits, time, day etc.
What is the best way to provide an API in this situation?
Option 1
Provide numerous URLs such as
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on
I would need to have a URL for all permutations. This seems very cumbersome, both for me and the API consumers, and very un-DRY.
Option 2
Only provide APIs for the major options like:
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
And if the consumer wants bycollegeandinstructor
, he does the filtering on his end.
Option 3
The user passes a JSON string to me, and I use that to get the filtering criteria
example.com/api/getcourses/<jsonstring>
jsonstring =
{
instructor:<instructorcode>,
college:<collegecode>,
...and so on
}
I suppose instead of the Json string, I could also require a POST array, but that seems un-inituitive for the consumer since he is GETing data.
Or is there another way of doing this I am not aware of? If it is the third option that is the best option, could you provide a short summary best to prepare a SQL query on the basis of a JSOn string that may have variable number of values?