Why is the datatype for the answer.id number (without quotes) for true_false_question and string (with quotes) for short_answer_question and multiple_answers_question???It is inconsistencies like this that make working with the API a nightmare.
@GregoryMyers
Trust me that the API has much bigger headaches than this one.
I use JavaScript for most of my code and it's not an issue unless you're trying to do a strict comparison, such as with the === operator. Personally, when I know the value is an integer disguising as a string, I use parseInt to convert it to an integer and then do a strict comparison. I know that I could use == in JavaScript and it would work just fine, but I prefer strict comparisons. I also do a lot of hash work where the key is the integer, but JavaScript returns it as a string so I have to convert it back to an integer for my comparisons.
Other languages require objects of the same type to do comparisons. It sounds like you are using one of those languages. A quick search says that Ruby and Python fall into that category. For those, you would need to convert integers to strings or strings to integers to compare them. That means that you need to do the conversion, similar to what I do.
For the answer ID field, you should convert the value to an integer rather than the integers to a string. Internally, answer IDs are stored as integers for all of the question types. If you look the canvas__quiz_questions table in Canvas Data, the question_data property is a JSON object where the IDs are integers. If you look at the Quiz Answer Formats appendix, you will see all kinds of warnings about the answer IDs need to be integers.
As for other techniques, the first page of the REST API documentation may provide some insight (but not a full explanation in this case). In summary, all integers are 64-bit integers. String IDs are also used. You can force all IDs to strings with a request Accept header. When passing Boolean parameters with JSON, a literal true/false is preferred rather than as a string.
It sounds like you could use the request header to get the values as strings and let Canvas do the conversion instead of you. However, since the other question types return an integer ID, I would choose to force all of the IDs to integers since I don't want to write code to handle them separately.
Hi everyone, I am seeking some insight into how Canvas LMS handles HTTP errors and how they are reflected in the logs versus the user interface. We are currently observing the following behavior in our environment: Log-only errors: We are seeing 500 (Internal Server Error) and 503 (Service Unavailable) errors recorded in…
I'm currently integrating an LTI tool and attempting to use the Activity.id.history https://canvas.instructure.com/doc/api/file.tools_variable_substitutions.html#activity-id-history variable, but I'm experiencing issues getting it to work properly. What I've Done: Added the Activity.id.history variable to my Developer…
I looked through the LTI Variable Substitutions documentation and while there are variable substitutions available for Canvas.term.name and Canvas.term.id (which is the Canvas incremented ID like "104"), I was surprised to see there was no option for Canvas.term.sisSourceId I tried testing other possible variants that may…
Summary:The Learning Mastery Gradebook allows drag-and-drop reordering of outcome columns, and this triggers a call to /api/v1/courses/:course_id/assign_outcome_order. The API returns 204 No Content (success), but the column order does not persist after page refresh. Steps to Reproduce: Open Learning Mastery Gradebook for…
I'm building a tool for my institution that imports grades from another LTI tool into Canvas so instructors can automate late assignment policies not otherwise supported by Canvas. I'm trying to use the LTIv1.3 ID which is readily available on the LTI-side as a link to the student record on Canvas, but I can't find the ID…