Component 3: Data

To help lay out details around data, let’s look at two different user stories. First we will consider Jack who needs information about the students in a district, so that they may access his company’s subscription learning service. Then we will take a look at Jill who wants her class roster with her on a mobile device, as she wonders around her classroom.

More details about the API can be found in the examples below and also in the SIF Data Model Implementation Specification (NA) 3.3.

 

Minimums

In order to ensure all XPress Roster Providers add value, a baseline set of support has been established. While these tables layout a set of recommendations, the A4L Community fully recognizes that some use cases may require omitting certain data elements. Therefore software meeting these minimums may be badged differently than those that do not.

XPress Roster – Data Guidance

 

User Stories

We’ve reviewed how to properly access data by: asking permission, formatting information requesting, and processing the data available. Let’s walk through the two examples to illustrate how these processes come together.

 

User Scenario 1: Provisioning Educational Systems

Jack sells online learning for “Earth Sci 9H”, a popular online earth science curriculum. Planet School District purchased Jack’s curriculum only for its students who are taking earth science and the teacher teaching it.  The school’s online learning platform uses XPress to securely connect the district and its content publishers.  “Earth Sci 9H” has been given XPress Roster credentials to the district’s data.  Jack wants to make sure that only teachers and students actually taking earth science will be set up with “Earth Sci 9H” accounts.

First Jack’s application requests all the courses and finds all courses of interest.

URL:

http://163.153.114.103/api/requests/xCourses.json

Request Headers:

Accept: */*
Accept-Encoding: gzip
Authorization: bearer ZTk3MDcxZmItYmFiOS00ODYwLThiOTctNjM2OWZhYjk1Y2IxOlBhc3N3b3JkMQ

Response Headers:

responseAction: QUERY
messageType: RESPONSE
Server: Apache-Coyote/1.1
environmentURI: http://localhost:8080/api/environments/823c6dfd-e356-4d3e-b23a-46b7a9d92ad0
Content-Type: application/json
Content-Length: 14282
Date: Mon, 02 Nov 2015 22:12:41 GMT
timestamp: 2015-11-02T17:12:41Z
relativeServicePath: /xCourses.json
providerId: NERIC01

Response Snippet:

{
    "@refId": "A2258F48-7B8C-4406-A00E-462DCDCD3CE3",
    "schoolRefId": "66667705-6C51-4C30-A22A-77CEA0FBCF53",
    "schoolCourseId": "JMS0115",
    "courseTitle": "Earth Sci 9H",
    "description": "Test Description 1",
    "subject": "Science",
    "applicableEducationLevels": {
        "applicableEducationLevel": "11"
    }
}

Next, Jack’s application uses the course’s unique identifier obtained from the course request to associate the course with all the people involved, including students and teachers.

Then, the application sets up tracking for the students and teacher in his systems utilizing one of the unique identifiers provided by the learning system or the student names, through xRoster objects (see example below). Once that information is obtained, the application can store the unique identifiers, the student names or both.

URL:

http://163.153.114.103/api/requests/xCourses/A2258F48-7B8C-4406-A00E-462DCDCD3CE3/xRosters.json

Request Headers:

Accept: */*
Accept-Encoding: gzip
Authorization: bearer ZTk3MDcxZmItYmFiOS00ODYwLThiOTctNjM2OWZhYjk1Y2IxOlBhc3N3b3JkMQ

Many rosters (one for each section of the specified course) are returned and accounts can be built from the results.

Response Headers:

responseAction: QUERY
messageType: RESPONSE
Server: Apache-Coyote/1.1
environmentURI: http://localhost:8080/api/environments/823c6dfd-e356-4d3e-b23a-46b7a9d92ad0
Content-Type: application/json
Content-Length: 20840
Date: Mon, 02 Nov 2015 22:15:45 GMT
timestamp: 2015-11-02T17:15:45Z
relativeServicePath: /xCourses/A2258F48-7B8C-4406-A00E-462DCDCD3CE3/xRosters.json
providerId: NERIC01

Abbreviated Response:

{
    "xRosters": {
        "xRoster": [
            {
                "@refId": "2127E79B-CFA9-4CE9-B277-11CA5E0001FC",
                "courseRefId": "A2258F48-7B8C-4406-A00E-462DCDCD3CE3",
                "courseTitle": "Earth Sci 9H",
                "subject": "Science",
                "schoolRefId": "66667705-6C51-4C30-A22A-77CEA0FBCF53",
                "schoolSectionId": "JMS0115:7",
                "schoolYear": "2014",
                "sessionCode": "S1-1415",
                "schoolCalendarRefId": "B0FD06FD-5F35-4D96-B2EA-AA96CD2D0F38",
                "meetingTimes": {
                    "meetingTime": {
                        "timeTableDay": "AB",
                        "classMeetingDays": {
                            "bellScheduleDay": "M,T,W,Th,F"
                        },
                        "timeTablePeriod": "7",
                        "roomNumber": "295",
                        "classBeginningTime": "15:00:00",
                        "classEndingTime": "15:55:00"
                    }
                },
                "students": {
                    "studentReference": [
                        {
                            "refId": "3A80F017-CCAB-4B9A-B54C-01A351041BD9",
                            "localId": "428537",
                            "givenName": "Ima",
                            "familyName": "Peterson"
                        },
                        {
                            "refId": "DD8D0728-9A59-4CC1-84C3-05588B10C3FE",
                            "localId": "366654",
                            "givenName": "Pamela",
                            "familyName": "Dorsey"
                        }
                    ]
                },
                "primaryStaff": {
                    "staffPersonReference": {
                        "refId": "35A20CE9-E563-41EA-B023-003D765941F1",
                        "localId": "345773374",
                        "givenName": "Allegra",
                        "familyName": "Gallegos"
                    },
                    "teacherOfRecord": "true"
                }
            }
        ]
    }
}

 

User Scenario 2: The Mobile Teacher

Jill is a sophisticated teacher; she’s never separated from her tablet and always on top of things. However it is the beginning of the school year and she is having trouble remembering all her students’ names.  She soon finds that IT has installed a XPress Roster app that gives Jill the class list she needs, right on her tablet.

Behind the scenes, Jill’s app is surprisingly similar to Jack’s software. After all, both are collecting rosters of the people they serve.  However Teacher Jill is an already authenticated part of the school’s own system as is the app, so both Jill and her app get to take a shortcut.  When Jill logs in, the OAuth response includes her refId.

Example Snippet from Response:

  "xStaffRefId":“813C565F-366F-4E03-8598-00424085D17A”

This allows her app to retrieve all her rosters and let her select the section she is currently teaching.
URL:

http://163.153.114.103/api/requests/xStaffs/813C565F-366F-4E03-8598-00424085D17A/xRosters.json

Request Headers:

Accept: */*
Accept-Encoding: gzip
Authorization: bearer ZTk3MDcxZmItYmFiOS00ODYwLThiOTctNjM2OWZhYjk1Y2IxOlBhc3N3b3JkMQ

 

<–Component 1: Authentication

<–Component 2: Infrastructure

Going Beyond Roster–>