Open edX移动端进展缓慢,几个月前的坑也不见填好。

现有的后台接口已经满足选课要求了,移动端还没更上,只能自己动手丰衣足食了,在此演示如何使用这些接口实现选课功能(使用工具httpie(把它理解为一个更先进的curl就行)做演示)

列出所有课程

http http://LMS_HOST/api/courses/v1/courses/

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
    "pagination": {
        "count": 46,
        "next": "http://LMS_HOST/api/courses/v1/courses/?page=2",
        "num_pages": 5,
        "previous": null
    },
    "results": [
        {
            "blocks_url": "http://LMS_HOST/api/courses/v1/blocks/?course_id=course-v1%3test%2Btest%2Btest",
            "course_id": "course-v1:test+test+test",
            "effort": null,
            "end": "2016-09-29T16:00:00Z",
            "enrollment_end": null,
            "enrollment_start": null,
            "media": {
                "course_image": {
                    "uri": "/asset-v1:test+test+test+type@asset+block@logo.jpg"
                },
                "course_video": {
                    "uri": null
                }
            },
            "name": "test",
            "number": "test",
            "org": "test",
            "short_description": "test",
            "start": "2016-02-01T00:00:00Z",
            "start_display": "2015年2月1日",
            "start_type": "timestamp"
        }]
}

值得关注的字段是course_id

更多的字段信息参考文档 :courses-api-courses-resource

用户注册课程(选课)

文档参考:View a User’s Enrollments or Enroll a User in a Course

以下是命令行演示

http POST "http://LMS_HOST/api/enrollment/v1/enrollment" course_details:=@course_details.json "Authorization: Bearer user_access_token"

其中必要的POST参数为course_details,文档中的其他参数可选,请求参数举例:

1
{"course_details":{"course_id": "course-v1:edX+DemoX+Demo_Course"}}

如果后端返回200,则表示用户注册课程成功

当然你也可以在浏览器中直接访问"http://LMS_HOST/api/enrollment/v1/enrollment

如果你想进一步拓展后端的RESTful接口,可以参考我的这个项目:edx_siteapi

移动端已经有选课功能了,如果你决定直接使用既有功能,可能需要做个调整,请求http://LMS_HOST/api/courses/v1/courses/?username=mooctest&mobile=true&page=1会报403,进入后台将CourseListView里的username = self.request.query_params.get('username', self.request.user.username)改为self.request.user.username