2

読み取り専用のコース情報 (ID、コース名、説明、講師など) を取得するために、外部アプリケーションから Sakai とやり取りしようとしています。(/direct/site/describe) 「サイト」REST サービスのように見えますが、既にコース ID を持っている必要があるものだけを公開しています。Sakai のソースを閲覧しているときに、getSites() と呼ばれるメソッドを持つ SiteService があることに気付きました。このデータだけが必要です。

私の質問は次のとおりです。これはあるべきもののように思えます。また、カスタム サービスを介して SiteService getSites を公開するのが最善の方法ですか?

4

3 に答える 3

4

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
于 2014-06-05T04:06:23.810 に答える
2

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.batApache Axis2 で試してみることができます。WSDL サービスから Java クラスを生成します。次に、それを直接使用して、Sakai で提供されるこれらのサービスを利用できます。お気に入り:

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

私も実際に使っていますが、とても便利だと感じています。

于 2014-04-09T12:24:46.350 に答える
0

getAllSitesCollectionSizeすべての堺のサイトは、堺の の方法を使用して一覧表示できますcontenthostingservice。と呼ばれるべきgetAllSitesです。なぜそのような名前が付けられたのか私に聞かないでください!

たとえば、https://qa11-mysql.nightly.sakaiproject.org/sakai-wsを参照してください。

于 2018-09-13T15:45:49.580 に答える