Вопрос по – 404 Публикация контента в Desire2Learn

0

У меня есть базовая сборка приложения Valence для Desire2Learn, и сейчас я пытаюсь отправить данные POST, и я получаю либо ошибку 400, либо 404.

Если я сделаюПОЛУЧИТЬ запрос to /d2l/api/le/(D2LVERSION: version)/(D2LID: orgUnitId)/content/root/, with the correct orgUnitId, I can see all of the content for a course. However, when I СООБЩЕНИЕ  ContentObjectData of type Module, it returns a 400. The docs have nothing listed for a 400 error for that particular request, but I'm assuming that I messed up the ContentObjectData. I've tried multiple times, but it always results in a 400. The JSON block looks like this: { "Title": "API Test", "ShortTitle": "", "Type": 0, "ModuleStartDate": null, "ModuleEndDate": null, "IsLocked": false, "IsHidden": true }

Если я сделаюПОЛУЧИТЬ запрос в / d2l / api / le / (D2LVERSION: версия) / (D2LID: orgUnitId) / content / modules / (D2LID: moduleId) / structure /, с правильным orgUnitId и moduleId, я могу видеть содержимое модуля. Когда я СООБЩЕНИЕ  ContentObjectData типа Topic, он возвращает 404. Я делаю это в Python, в котором нет примера кода SDK, поэтому я преобразовал PHP один.

Я использовал другой JSON блок с ключом "url" а затем соответствующее значение. Здесь полностью закодированное многочастное тело, которое я пытался отправить:

    --redacted.132.0.68062.1336325296.611.1
    Content-Disposition: form-data; name="ContentObjectData"
    Content-Type: application/json

    {"StartDate": null, "IsLocked": false, "TopicType": 3, "ShortTitle":
"", "Title": "API Test", "Url": "http://redacted.edu",
"EndDate": null, "IsHidden": true, "Type": 1}
    --redacted.132.0.68062.1336325296.611.1
    Content-Type: application/json

    {"Url": "http://redacted.edu"}
    --redacted.132.0.68062.1336325296.611.1--

Почему один и тот же URI для GET и POST приводит к 404 только для POST? Это не похоже, что структура между этими двумя вызовами отличается документы. Я попытался этот вызов как обычный запрос POST и как составная часть, но оба результата дают 404. Я пробовал оба этих вызова, используя 3 разных пользователи, тот, который имеет полные права администратора.

Ваш Ответ

1   ответ
2

/d2l/api/le/{ver}/{orgUnitId}/content/root/ и один о маршруте/d2l/api/le/{ver}/{orgUnitId}/content/modules/{moduleId}/structure/, Я постараюсь рассмотреть их отдельно:

Adding a root module, Первый маршрут используется для добавления модуля маршрута в репозиторий содержимого подразделения org. Маршрут имеет особые ограничения в отношении «Заголовка». и & quot; ShortTitle & quot; Свойства: оба должны быть ненулевыми и непустыми. Кроме того, свойство ShortTitle должно иметь форму, которая не может быть «обрезана»; вплоть до пустой строки (например, она не может быть строкой, в которой есть только пробел). Немного отличающиеся ограничения на эти строки были признаны несогласованными, и в будущем выпуске может появиться более регулярный подход. Вы в безопасности, если вы придерживаетесь подхода, согласно которому вы должны предоставить заголовок и краткое название для новых корневых модулей.

Adding a topic to an existing content structure, Второй маршрут используется для добавления к существующей структуре модуля в репозитории контента подразделения org. Способ использования маршрута зависит от того, хотите ли вы добавить URL-адрес или хотите добавить файл.

Чтобы добавить тему, которая является не чем иным, как URL, вам нужно предоставить только первую часть составного / смешанного POST (и фактически вы можете просто отправить одно тело POST) с типом application / json:

{
   "Title": "Test link topic title",
   "ShortTitle": "Link",
   "Type": 1,
   "TopicType": 3,
   "URL": "http://fqd.url.to.resource.com/",
   "StartDate": null,
   "EndDate": null,
   "IsHidden": false,
   "IsLocked": false
}

Обратите внимание, что: (a) ваша тема должна иметь короткий заголовок - фактически, блок данных темы имеет те же ограничения относительно свойств Title и ShortTitle, что и в первом вопросе выше; и (b) вам не нужно предоставлять вторую часть, содержащую только URL.

Чтобы добавить тему, которая является файлом, вы предоставляете блок JSON, аналогичный первой части вашего составного / смешанного тела POST, но (a) TopicType должен иметь значение «1»; (b) свойство URL должно указывать наvalid location URL to within the org unit's existing content space (так серверная служба знает, где хранить файл), и (c) вторая часть POST должна содержать данные файла. Ваше тело POST будет выглядеть примерно так:

POST https://yourlms.edu/d2l/api/le/{ver}/{orgUnitId}/content/modules/{moduleId}/structure/?{auth} HTTP/1.1
Content-type: multipart/mixed; boundary=FOO
Content-length: {length}

--FOO
Content-type: application/json
{
   "Title": "Test file topic title",
   "ShortTitle": "File",
   "Type": 1,
   "TopicType": 1,
   "URL": "http://fqd.url.to.resource.com/",
   "StartDate": null,
   "EndDate": null,
   "IsHidden": false,
   "IsLocked": false
}

--FOO
Content-Disposition: form-data; name=""; filename={filename}
Content-Type: {file's content type}

{binary data}

В настоящее время в справочных документах Valence нет четкого различия между этими двумя типами запросов, и они скоро будут обновлены для этого.

Похожие вопросы