Сакаи: Как получить список сайтов (курсов) с интерфейсом REST или WS?

Я пытаюсь взаимодействовать с Sakai из внешнего приложения, чтобы получить информацию о курсе только для чтения (идентификатор, название курса, описание, инструктор и т. д.). Похоже (/direct/site/describe), что служба REST «сайт» предоставляет только те вещи, которые требуют, чтобы у вас уже был идентификатор курса. При просмотре исходного кода Sakai я заметил, что есть SiteService с методом getSites(), который очень похож на то, что мне нужно, но (отказ от ответственности) я почти ничего не знаю о Sakai. Мне просто нужны эти данные.

Мой вопрос: это похоже на то, что должно быть, я что-то упустил? Кроме того, лучше всего просто предоставить SiteService getSites через пользовательский сервис?


person Ray Pendergraph    schedule 14.03.2014    source источник


Ответы (3)


Если вы хотите просто получить список всех сайтов в установке Sakai, вам придется создать что-то нестандартное, поскольку полный список всех сайтов не является типичным вариантом использования. Как правило, приложения больше заинтересованы в получении списка сайтов, к которым имеет доступ конкретный пользователь. Например:

http://nightly2.sakaiproject.org:8081/direct/site.json

Вернет полный список (возможно, с пейджингом) для текущего пользователя, вошедшего в систему.

{"entityPrefix": "site", "site_collection": [
{
  "createdDate": 1401938965607,
  "createdTime": {
    "display": "Jun 4, 2014 11:29 pm",
    "time": 1401938965607
  },
  "description": null,
  "htmlDescription": "",
  "htmlShortDescription": "",
  "iconUrl": null,
  "iconUrlFull": null,
  "id": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
  "infoUrl": null,
  "infoUrlFull": null,
  "joinerRole": null,
  "lastModified": 1401938965993,
  "maintainRole": "maintain",
  "modifiedDate": 1401938965993,
  "modifiedTime": {
    "display": "Jun 4, 2014 11:29 pm",
    "time": 1401938965993
  },
  "owner": "admin",
  "props": {
    "contact-name": "Sakai Administrator"
  },
  "providerGroupId": null,
  "reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9",
  "shortDescription": null,
  "siteGroups": null,
  "siteOwner": {
    "userDisplayName": "Sakai Administrator",
    "userEntityURL": "\/direct\/user\/admin",
    "userId": "admin"
  },
  "sitePages": [
    {
      "id": "e051601e-2162-47c1-9e04-63a033f56cdf",
      "layout": 0,
      "layoutTitle": "Single Column Layout",
      "position": 0,
      "props": {
        "is_home_page": "true"
      },
      "reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/e051601e-2162-47c1-9e04-63a033f56cdf",
      "siteId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
      "skin": "neo-default",
      "title": "Home",
      "titleCustom": false,
      "url": "http:\/\/nightly2.sakaiproject.org:8081\/portal\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/e051601e-2162-47c1-9e04-63a033f56cdf",
      "activeEdit": false,
      "popUp": false
    },
    {
      "id": "2e7c2004-0dc2-47bc-8e55-ca1df8e58c33",
      "layout": 0,
      "layoutTitle": "Single Column Layout",
      "position": 1,
      "props": null,
      "reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/2e7c2004-0dc2-47bc-8e55-ca1df8e58c33",
      "siteId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
      "skin": "neo-default",
      "title": "Assignments",
      "titleCustom": false,
      "url": "http:\/\/nightly2.sakaiproject.org:8081\/portal\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/2e7c2004-0dc2-47bc-8e55-ca1df8e58c33",
      "activeEdit": false,
      "popUp": false
    },
    {
      "id": "332c52a8-89fe-45bb-9b1a-bf6bace3e88a",
      "layout": 0,
      "layoutTitle": "Single Column Layout",
      "position": 2,
      "props": null,
      "reference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/332c52a8-89fe-45bb-9b1a-bf6bace3e88a",
      "siteId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
      "skin": "neo-default",
      "title": "Site Info",
      "titleCustom": false,
      "url": "http:\/\/nightly2.sakaiproject.org:8081\/portal\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9\/page\/332c52a8-89fe-45bb-9b1a-bf6bace3e88a",
      "activeEdit": false,
      "popUp": false
    }
  ],
  "skin": null,
  "softlyDeletedDate": null,
  "title": "AZ",
  "type": "project",
  "userRoles": [
    "maintain",
    "access"
  ],
  "activeEdit": false,
  "customPageOrdered": false,
  "empty": false,
  "joinable": false,
  "pubView": true,
  "published": true,
  "softlyDeleted": false,
  "entityReference": "\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9",
  "entityURL": "http:\/\/nightly2.sakaiproject.org:8081\/direct\/site\/61a1ebbd-e507-4ca3-8f88-65abca0803d9",
  "entityId": "61a1ebbd-e507-4ca3-8f88-65abca0803d9",
  "entityTitle": "AZ"
},{
...

Поскольку у вас есть очень специфический вариант использования, я бы посоветовал вам использовать SiteService (или, возможно, даже SQL) для получения очень ограниченных данных, которые вы ищете, а затем добавить новый пользовательский метод в SiteEntityProvider (https://source.sakaiproject.org/svn/entitybroker/trunk/core-providers/src/java/org/sakaiproject/entitybroker/providers/SiteEntityProvider.java) примерно так:

@EntityCustomAction(action = "my_custom_method", viewKey = EntityView.VIEW_SHOW)
public boolean myCustomMethod(EntityView view) {
    HashMap yourMap = new HashMap();
    // put code here to get all the sites data you need from the SiteService or the DB and then put the parts you want to return into a Map and then return that map
    return yourMap;
}

Затем вы можете вызвать этот метод следующим образом:

http://nightly2.sakaiproject.org:8081/direct/site/my_custom_method.json
person Aaron Zeckoski    schedule 05.06.2014

Может быть, вы можете попробовать использовать JWS, чтобы получить некоторую информацию.

В sakai есть служба по умолчанию (ROOT_OF_TOMCAT\webapps\sakai-axis), к которой вы можете получить доступ через: http://xxx.xxx/sakai-axis/xxx.jws?wsdl ).

Служба "SakaiLogin.jws" поможет вам войти в sakai:

public String login(String id,String pw) throws AxisFault

Служба "SakaiScript.jws" предоставляет функцию с именем:

public String getAllSitesForUser(String sessionid) throws AxisFault

который может вернуть список всех сайтов, связанных с этим пользователем.

Возможно, я неправильно отвечаю на ваш вопрос (поскольку я использую SOAP). Я надеюсь, что это может быть вам чем-то полезно.

Я также пишу программу для извлечения данных из сакаи. Но я не совсем понимаю, как выставлять данные через REST или Entity Broker.

Ваше здоровье.


Обновление:

Вы можете попробовать wsdl2java.bat, принесенный с Apache Axis2. Он сгенерирует класс Java из службы WSDL. Затем вы можете использовать его напрямую для использования этих услуг, предоставляемых в Sakai. Нравиться:

wsdl2java.bat -p org.sakai.wsdl -uri http://localhost:8080/sakai-axis/Assignments.jws?wsdl

Я уже использую его и чувствую, что это действительно удобно.

person taper    schedule 09.04.2014
comment
Спасибо за сообщение. Да, конечная точка веб-службы SakaiScript довольно полезна, но не служит тем целям, которые нам нужны. Как вы сказали, getAllSitesForUser кажется интересным, нам нужен список сайтов для регистрации, а не после того, как они были связаны. У нас может быть пользователь, зарегистрированный на всех сайтах, но в этот момент это начинает казаться неправильным. - person Ray Pendergraph; 06.05.2014

Все сайты Sakai могут быть перечислены с помощью метода getAllSitesCollectionSize в методе contenthostingservice Sakai. Он должен называться getAllSites. Не спрашивайте меня, почему его так назвали!

См., например, https://qa11-mysql.nightly.sakaiproject.org/sakai-ws .

person reinierpost    schedule 13.09.2018