您使用 Valence Learning Framework API 为课程创建部分的方式是特殊的。假设您从一门空白课程开始,该课程没有后代组织单位(没有部分、没有组、什么都没有):
GET /d2l/api/lp/1.3/orgstructure/113459
> {"Name": "Extensibility 106",
"Identifier": "113459",
"Type": {"Name": "Course Offering",
"Code": "Course Offering",
"Id": 3},
"Code": "EXT-106"}
GET /d2l/api/lp/1.3/orgstructure/113459/children
> []
使用部分属性初始化课程。您要做的第一件事是定义课程提供的部分属性:您想在课程提供下创建什么样的部分?要为课程设置创建部分属性,请使用 SectionPropertyData 块;上面写着“我希望这门课程有 10 个部分,并随机自动将学生注册到这些部分”(EnrollmentStyle
2 对应于NumberOfSectionsAutoEnrollment
):
{"AutoEnroll": true,
"EnrollmentQuantity": 10,
"EnrollmentStyle": 2,
"RandomizeEnrollments": true}
现在,要使用这些设置初始化课程,并创建第一个默认部分,我们将该块放入此路由:
PUT /d2l/api/lp/1.3/113459/sections/
> [{"SectionId":113460,
"Name":"Section 1",
"Description":{"Text":"","Html":""},
"Enrollments":[]},
...
{"SectionId":113469,
"Name":"Section 10",
"Description":{"Text":"","Html":""},
"Enrollments":[]}
]
请注意,通过此调用,我们现在创建了 10 个部分作为该课程的子部分,并且后端服务已自动为它们生成名称(和代码)。
事后添加一个新部分。现在假设我们要在本课程中添加第十一节。首先,我们需要SectionData
为新部分的属性使用一个块:
{"Name": "Section 11",
"Code": "Sec11",
"Description": {"Content": "New Section Descr.", "Type": "Text} }
(注意:当你形成这个块来创建新的部分时,你必须RichTextInput
为属性使用类型结构Description
。当你从服务中获取一个部分的属性时,它会使用RichText
属性来写描述。这是一个常见的对于刚接触框架的开发人员来说是个难点)
然后,您将该块发布到此路由:
POST /d2l/api/lp/1.3/113459/sections/
> {"SectionId":113470,
"Name":"Section 11",
"Description":{"Text":"Description","Html":""},
"Enrollments":[]}
您将取回新创建部分的属性。
总结。那么,“为什么 PUT 然后 POST”?是的,这有点令人困惑,但是这样想:
PUT 的第一个用途是更新课程提供的“部分属性”属性(因此,当最初定义课程提供的部分属性时,作为副作用,后端会创建所需的部分组织单位与这些新设置一起使用)。
POST 的第二个用途是创建一个新的组织单元(一个新部分),并将其分配给课程设置。