#需求描述 有一种需求可能蛮典型,将edx作为子系统,外部系统需要与edx通信,诸如取得学员的学习状况,学习成绩,个人信息

又或者需要从企业系统中将用户批量导入edx中

#思路 尽管我们可以通过写脚本来应对以上需求,但我更喜欢将edx视为一个独立/有应答能力的系统,它能够响应外部网站管理级别的请求,而不仅仅是普通用户级别,它与外部的通信都通过RESTful风格的API来做。如此一来edx就能作为子系统与企业其他系统友好协作

###流程 client携带令牌(access token)去访问edx系统,edx对其进行身份权限验证,通过的话,接受其请求。这些都是透明的,edx所采用的django-rest-framework框架对权限的控制设计得很棒

这方面的知识我在启用edx的API里谈到过

核心概念是oauth2和RESTful风格的API

edx内部已经有许多现成的api接口:学生相关的,课程内容相关的,注册课程相关的,等等,更多细节可以参考edx-platform-api

###扩展 为了实现我们自己的需求,现成的接口肯定是不够用的,我们需要扩展edx的api,我去年为了给手机端提供论坛接口,使用django来写,痛苦不堪,在此推荐大家使用django-rest-framework来为edx扩展接口,至于怎么做可以参考django-rest-framework

#举个栗子 我们就拿上头的用户批量导入为例

  • 首先建立个自己的django app,我将其起名为siteapi(站点管理级别的api接口)
  • 确定URI: siteapi/users
  • 写业务逻辑
  • client 携带access token往siteapi/users post用户数据(推荐使用json)
  • edx验证用户身份,导入用户,返回确认信息给client