Sure, I can explain.
At the Univ. of Michigan, we have some courses that use a specific application (non-LTI) for some of their assignments. We want to make it foolproof for instructors to indicate which of their assignments require their students to use that software. The indication needs to be something that we can look for using the API (a hybrid API/Canvas Data solution would be fine). We want to implement a process that finds those assignments and makes sure the students have the right access to the application, that the necessary supporting files are available, etc.
We tossed around a few ideas for how to let instructors mark their assignments for special processing. We are extremely disappointed that we're not able to place labels, categories, or tags of some kind on assignments and other resources. Eventually, we settled on creating an outcome, let's call it "Project X", that could do the job. It could:
- Be added to courses, which would let us discover which courses used the software.
- Be added to the assignments, so we could see which specific assignments use the software. Apparently, the outcome must be added to the course before they can be added to the course's assignments, which is good for us.
- Because it's a predefined thing, it avoids typos or other mistakes that could happen with labels or tags.
However, the problem soon turned out to be that even when the outcome was associated with some courses and their assignments, we could not use the API to find them easily. I'm new to Canvas' API, but I've used a lot of other REST APIs. I expected that I'd just be able to query for assignments with the outcome and each of those would refer back to their courses, which would refer to the students. But Canvas' API isn't that flexible. It soon became apparent that we need to use a more brute force method: Query ALL of the courses, find only those with the outcome, then find all of their assignments, and get only those that have the outcome. There will probably be more steps along the way as well as pagination to deal with, so the number of API queries and length of processing time just keeps growing.
For now, we're settling on a less than ideal solution: Some of our local support staff will maintain a list of courses that need this special processing and instructors will contact them to have their courses added to it. That should cut out the largest amount of queries.
Ideally, we shouldn't have to work this hard to get the data. If we were able to use a relational DB, we could easily construct some SQL statements that join a few tables and give the results quickly. This experience has been frustrating.