我正在与我们大学的SIS系统进行整合,并且我对与创建和更新部分相关的文档感到磕磕绊绊。 http://docs.valence.desire2learn.com/res/enroll.html#Section.SectionData
我可以使用路由PUT /d2l/api/lp/(version)/(orgUnitId)/sections/
来创建一个名为Section 1的默认部分,其中部分代码为sec1但是当我尝试更新它或添加一个包含路径的附加部分时:PUT /d2l/api/lp/(version)/(orgUnitId)/sections/(sectionId)
(带有sectionId)从我之前的PUT中获取)或POST /d2l/api/lp/(version)/(orgUnitId)/sections/
我正在使用以下块来获取我的json数据:
{
"Name": "Section 1d",
"Code": "Dan 101",
"Description": {
"Text": "",
"Html": ""
}
}
语法中缺少什么?
谢谢
答案 0 :(得分:1)
使用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 阻止此路线:
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个部分作为本课程的子级,后端服务已自动为它们生成了名称(和代码)。
在事实之后添加新部分。现在假设我们要在此课程中添加第11个部分。首先,我们需要为新部分的属性使用SectionData
块:
{"Name": "Section 11",
"Code": "Sec11",
"Description": {"Content": "New Section Descr.", "Type": "Text} }
(注意:当您创建此块以创建新部分时,您必须为RichTextInput
属性使用Description
类型结构。当您获取属性时从服务返回的一个部分,它使用RichText
属性编写描述。这是开发者新手的常见粘性点)
然后,你 POST 阻止这条路线:
POST /d2l/api/lp/1.3/113459/sections/
> {"SectionId":113470,
"Name":"Section 11",
"Description":{"Text":"Description","Html":""},
"Enrollments":[]}
您将获得新创建的部分的属性。
<强>摘要即可。所以,“为什么PUT然后POST”?是的,这有点令人困惑,但想到这一点:
PUT的第一个用途是更新课程提供的“部分属性”属性(因此,当最初定义课程提供的部分属性时,作为副作用,后端创建了与这些新设置一起使用的部分组织单位。
POST的第二个用途是创建一个新的组织单位(一个新的部分),并将其分配给课程提供。
答案 1 :(得分:0)
看起来你的路线和你的要求还可以。路线只有一个小变化。您需要使用文档D2L Conventions
中描述的RichTextInput字段基本上不是:
"Description": {
"Text": "",
"Html": ""
}
你需要:
"Description": {
"Content": "",
"Type": "" (Either Text or Html)
}