Desire2Learn Valence API,PUT CourseOffering 404

时间:2014-01-03 02:15:51

标签: desire2learn valence

根据这里的信息http://docs.valence.desire2learn.com/res/course.html#actions我希望“更新”一个课程。我会指定一个带有CourseOfferingInfo块的PUT,它只包含一些属性。每次我尝试这个,我得到一个404,没有找到 - 甚至使用相同的路线成功的GET(404表示组织不存在或org不是提供 - 两者都不是)。但是,如果我指定CreateCourseOffering块(直接来自之前的GET),PUT工作正常。这是正确的,文档不是吗?或者在这种情况下我还应该寻找其他什么?文档说使用CreateCourseOffering为POST创建一个产品......我只是想更新该产品的一个属性,因此认为PUT是要走的路。

1 个答案:

答案 0 :(得分:0)

如果您将"create" POST routeCreateCourseOffering块一起使用,则会创建新课程,并为新创建的课程发送回CourseOffering块(这将包括组织单位ID值)对于您建造的新组织单位。

如果您想要更新现有课程,您应该如您所料,使用"update" PUT route CourseOfferingInfo块。请注意,您必须提供所有此块中字段的有效信息,因为成功使用后,LMS将使用您在该块中指定的所有属性来获取组织单位的新值。 StartDateEndDate字段特别挑剔:您必须提供 有效UTCDateTime值(请注意,这些值中的三位毫秒说明符是必需的如果字段不适用,则 JSON null值。

为什么选择404?您所看到的404和您传递的数据可能与后端服务进行数据绑定的方式有关。它尝试将您提供的JSON数据(和查询参数)反序列化为它可以读取/操作的数据对象 - 如果您提供的JSON块包含它所期望的属性的超集,那么这可能有效(例如,如果当您希望提供CourseOffering时,您提供CourseOfferingInfo块,因为绑定层可能会忽略它不需要的字段。如果绑定过程失败,因为您为无法绑定到预期数据类型的属性提供了值,或者因为您未能提供它所期望的JSON属性字段,那么这可能导致服务返回404(因为绑定/反序列化传入的参数化数据与将URL路由与底层服务处理程序匹配的同时发生。)

如果您提供了Web服务可以绑定到其预期数据对象的JSON结构(和查询参数),但您提供的无效或无意义,这可能导致底层服务处理程序响应400(发出无效请求信号)。但为了实现这一目标,您的参数化数据仍需要正确反序列化并绑定到数据对象中以供底层服务检查。

我们将updating the documentation更明确地提出这一事实。从调用客户端角度来看,最安全的策略是传递与各个路由完全相同的有效JSON结构,尤其是因为底层后端服务实现可能会改变它处理传入请求的方式。