API Specification
Contributors: Alicia Wang, Conner Swenberg
Values wrapped in < >
are placeholders for what the field values should be. Also be sure to read the request route carefully when you implement it.
Expected Functionality
Get all courses
GET
/api/courses/
<HTTP STATUS CODE 200>
{
"courses": [
{
"id": 1,
"code": "CS 1998",
"name": "Intro to Backend Development",
"assignments": [ <SERIALIZED ASSIGNMENT WITHOUT COURSE FIELD>, ... ],
"instructors": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ],
"students": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ]
},
{
"id": 2,
"code": "CS 1110",
"name": "Intro to Computer Science: Python",
"assignments": [ <SERIALIZED ASSIGNMENT WITHOUT COURSE FIELD>, ... ],
"instructors": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ],
"students": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ]
}
...
]
}
It is important that you return the serialized relationships WITHOUT the course field. If you attempt to return them with the course field still there, your code will end up in an infinite loop. This is because your course, when returning its relationships (say, instructors), asks the instructors which courses they teach, which will then cause those courses to return their instructors, etc.
Create a course
POST
/api/courses/
{
"code": "CS1998",
"name": "Intro to Backend Development"
}
<HTTP STATUS CODE 201>
{
"id": <ID>,
"code": "CS1998",
"name": "Intro to Backend Development",
"assignments": [],
"instructors": [],
"students": []
}
Get a specific course
GET
/api/courses/{id}/
<HTTP STATUS CODE 200>
{
"id": <ID>,
"code": <STORED CODE FOR COURSE WITH ID {id}>,
"name": <STORED NAME FOR COURSE WITH ID {id}>,
"assignments": [ <SERIALIZED ASSIGNMENT WITHOUT COURSE FIELD>, ... ],
"instructors": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ],
"students": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ]
}
Delete a specific course
DELETE
/api/courses/{id}/
<HTTP STATUS CODE 200>
{
"id": <ID>,
"code": <STORED CODE FOR COURSE WITH ID {id}>,
"name": <STORED NAME FOR COURSE WITH ID {id}>,
"assignments": [ <SERIALIZED ASSIGNMENT WITHOUT COURSE FIELD>, ... ],
"instructors": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ],
"students": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ]
}
Create a user
POST
/api/users/
{
"name": "Raahi Menon",
"netid": "rm834"
}
<HTTP STATUS CODE 201>
{
"id": <ID>,
"name": "Raahi Menon",
"netid": "rm834",
"courses": []
}
Get a specific user
GET
/api/users/{id}/
<HTTP STATUS CODE 200>
{
"id": <ID>,
"name": <USER INPUT FOR NAME>,
"netid": <USER INPUT FOR NETID>,
"courses": [ <SERIALIZED COURSE WITHOUT ASSIGNMENTS, STUDENT, OR INSTRUCTOR FIELDS>, ... ]
}
Add a user to a course
POST
/api/courses/{id}/add/
{
"user_id": <USER INPUT>,
"type": "student" or "instructor"
}
<HTTP STATUS CODE 200>
{
"id": <ID>,
"code": <STORED CODE FOR COURSE WITH ID {id}>,
"name": <STORED NAME FOR COURSE WITH ID {id}>,
"assignments": [ <SERIALIZED ASSIGNMENT WITHOUT COURSE FIELD>, ... ],
"instructors": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ],
"students": [ <SERIALIZED USER WITHOUT COURSES FIELD>, ... ]
}
Create an assignment for a course
POST
/api/courses/{id}/assignment/
{
"title": "PA4",
"due_date": 1553354209 // in Unix time (seconds since the epoch)
}
<HTTP STATUS CODE 201>
{
"id": <ASSIGNMENT ID>,
"title": "PA4",
"due_date": 1553354209, // in Unix time
"course": {
"id": {id},
"code": <STORED CODE FOR COURSE WITH ID {id}>,
"name": <STORED NAME FOR COURSE WITH ID {id}>
}
}
Last updated
Was this helpful?