Zum Inhalt springen

Ankündigungen (News)

Ankündigungen informieren Stud.IP-Nutzer über neuste Ereignisse rund um die Lehre. In Stud.IP können Ankündigungen z.B. systemweit (global) oder für einen bestimmten Nutzerkreis erstellt werden.

Ankündigungen bestehen aus ihrem Inhalt und einigen Meta-Daten. Die Dauer der Sichtbarkeit einer Anküdnigung wird durch ihre Attribute publication-start und end bestimmt (siehe Relationen).

AttributBeschreibung
titleName einer news
contentInhalt einer News
mkdateErstellungs-Datum einer News
chdateDatum der letzten Änderung
publication-startStart der Sichtbarkeit für den Nutzerkreis einer News
publication-endEnde der Sichtbarkeit für den Nutzerkreis einer News
comments-allowedBestimmung, ob Kommentare erlaubt sind (Boolean)

Ein Beispiel zum erstellen einer News anhand des Schemas folgt in News anlegen.

RelationBeschreibung
authorErsteller einer News
rangesglobal, institute, semester, course, users

Der Range einer News gibt an wo sie publiziert wird und somit auch für wen sie sichtbar ist.

Kommentare werden in Stud.IP an eine Ankündigung angehangen, wenn der Ersteller der News die Erlaubnis vergeben hat.

AttributBeschreibung
contentInhalt eines Kommentars
mkdateErstellungs-Datum
chdateDatum der letzten Änderung
RelationBeschreibung
authorDer Ersteller des Kommentars
newsDie kommentierte News

Das Anlegen einer News ist in verschiedenen Kontexten möglich. Sie kann global als systemweite News, kursintern oder nutzerbezogen angelegt werden.

POST /news

Die Erstellung einer globalen News erfordern zur Zeit noch Root-Rechte. Es wird diskutiert ob hier Adminrechte reichen.

Terminal-Fenster
curl --request POST \
--url https://example.com/news \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "root@studip:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'

POST /courses/{id}/news

Terminal-Fenster
curl --request POST \
--url https://example.com/courses/<COURSE-ID>/news \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_dozent:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'
ParameterBeschreibung
idDie ID des Kurses

Der Nutzer muss mindestens Dozenten- oder Adminrechte innerhalb des Kurses haben.

POST /users/{id}/news

Terminal-Fenster
curl --request POST \
--url https://example.com/users/<USER-ID>/news \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Neue News","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine neue News sieht das Tageslicht."}}}'
ParameterBeschreibung
idDie ID des Users

Der Nutzer muss mindestens User-Rechte haben.

POST /news/{id}/comments

Terminal-Fenster
curl --request POST \
--url https://example.com/news/<NEWS-ID>/comments \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_dozent:testing" | base64`" \
--data
'{"data": {"type": "comments","attributes": {"content": "Ein Kommentar wurde geupdatet"}}}'
Der Nutzer muss mindestens User-Rechte haben.
ParameterBeschreibung
idDie ID der News

PATCH /news/{id}

ParameterBeschreibung
idDie ID der News

Die Data-Felder beim Update einer News sind optional.

Terminal-Fenster
curl --request PATCH \
--url https://example.com/news/<NEWS-ID> \
--header "Content-Type: application/vnd.api+json" \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
--data
'{"data": {"type": "news","attributes": {"title": "Aenderungen","comments-allowed": true,"publication-start": "2020-01-01T12:12:12+00:00","publication-end": "2021-01-01T12:12:12+00:00","content": "Eine News wurde geaendert."}}}'
Der Nutzer muss Inhaber der News sein oder die entsprechenden Root-Rechte
besitzen.

GET /news/{id}

ParameterBeschreibung
idDie ID der News
Terminal-Fenster
curl --request GET \
--url https://example.com/news/<NEWS-ID> \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
Der Nutzer muss Inhaber der News sein oder die entsprechenden Range-Rechte
besitzen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "6a8be7e4859e9c781ecc47a2c3498435",
"attributes": {
"title": "A testing title",
"content": "Lorem ipsum dolor sit amet, consectetur adipisicing elit",
"mkdate": "2019-04-23T12:10:26+02:00",
"chdate": "2019-04-23T12:10:26+02:00",
"publication-start": "2019-04-23T12:10:26+02:00",
"publication-end": "2019-05-07T12:10:26+02:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "e7a0a84b161f3e8c09b4a0a2e8a58147"
},
"links": {
"related": "jsonapi.php/v1/users/e7a0a84b161f3e8c09b4a0a2e8a58147"
}
},
"ranges": {
"data": [
],
"links": {
"self": "jsonapi.php/v1/news/6a8be7e4859e9c781ecc47a2c3498435/relationships/ranges"
}
}
},
"links": {
"self": "jsonapi.php/v1/news/6a8be7e4859e9c781ecc47a2c3498435"
}
}
}

GET /courses/{id}/news

ParameterBeschreibung
idDie ID des Kurses
Terminal-Fenster
curl --request GET \
--url https://example.com/course/<COURSE-ID>/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Der Nutzer muss mindestens Teilnehmer des Kurses sein.

Der Request liefert JSON ähnlich wie dieses:

{
"meta": {
"page": {
"offset": 0,
"limit": 30,
"total": 4
}
},
"links": {
"first": "/stud35/plugins.php/argonautsplugin/courses/1b7d3834e42c1569947e0eab7b63ed19/news?page%5Boffset%5D=0&page%5Blimit%5D=30",
"last": "/stud35/plugins.php/argonautsplugin/courses/1b7d3834e42c1569947e0eab7b63ed19/news?page%5Boffset%5D=0&page%5Blimit%5D=30"
},
"data": [
{
"type": "news",
"id": "9dc34d7414e9d6c2789923649a64673e",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews232",
"mkdate": "2018-06-20T10:40:43+02:00",
"chdate": "2018-06-20T10:57:37+02:00",
"publication-start": "2018-06-21T12:00:00+02:00",
"publication-end": "2066-12-09T22:00:00+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/9dc34d7414e9d6c2789923649a64673e/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/9dc34d7414e9d6c2789923649a64673e"
}
},
{
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews232",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-06-20T09:50:02+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
},
{
"type": "news",
"id": "191ce64590a28b3e038b09e85ea53178",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews",
"mkdate": "2018-05-08T11:42:11+02:00",
"chdate": "2018-05-08T11:42:11+02:00",
"publication-start": "2018-05-08T11:42:11+02:00",
"publication-end": "2066-09-19T20:24:22+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/191ce64590a28b3e038b09e85ea53178/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/191ce64590a28b3e038b09e85ea53178"
}
},
{
"type": "news",
"id": "a355b8d628d8656eb93dc527fe1209f3",
"attributes": {
"title": "Fakenews",
"content": "This is fakenews",
"mkdate": "2018-05-08T11:35:56+02:00",
"chdate": "2018-05-08T11:35:56+02:00",
"publication-start": "2018-05-08T11:35:55+02:00",
"publication-end": "2066-09-19T20:11:50+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "courses",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/a355b8d628d8656eb93dc527fe1209f3/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/a355b8d628d8656eb93dc527fe1209f3"
}
}
]
}

GET /users/{id}/news

ParameterBeschreibung
idDie ID des Nutzers
Terminal-Fenster
curl --request GET \
--url https://example.com/user/<USER-ID>/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Neue News",
"content": "Eine neue News sieht das Tageslicht.",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-08-15T14:22:38+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "users",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
}
}

GET /news/{id}/comments

ParameterBeschreibung
idDie ID einer News

GET /studip/news

Terminal-Fenster
curl --request GET \
--url https://example.com/user/studip/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Globale News",
"content": "Eine neue News sieht das Tageslicht.",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-08-15T14:22:38+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "global",
"id": "studip"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
}
}

Alle News des aktuell eingeloggten Nutzers abrufen

Abschnitt betitelt „Alle News des aktuell eingeloggten Nutzers abrufen“
`GET /news`
Terminal-Fenster
curl --request GET \
--url https://example.com/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

Der Request liefert JSON ähnlich wie dieses:

{
"data": {
"type": "news",
"id": "0e8df7da383d7515c4dc081bfe889897",
"attributes": {
"title": "Neue News",
"content": "Eine neue News sieht das Tageslicht.",
"mkdate": "2018-06-19T16:08:51+02:00",
"chdate": "2018-08-15T14:22:38+02:00",
"publication-start": "2018-06-19T16:08:51+02:00",
"publication-end": "2066-12-05T15:08:51+01:00",
"comments-allowed": true
},
"relationships": {
"author": {
"data": {
"type": "users",
"id": "76ed43ef286fb55cf9e41beadb484a9f"
},
"links": {
"related": "/stud35/plugins.php/argonautsplugin/users/76ed43ef286fb55cf9e41beadb484a9f"
}
},
"ranges": {
"data": [
{
"type": "users",
"id": "1b7d3834e42c1569947e0eab7b63ed19"
}
],
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897/relationships/ranges"
}
}
},
"links": {
"self": "/stud35/plugins.php/argonautsplugin/news/0e8df7da383d7515c4dc081bfe889897"
}
}
}

DELETE /news/{id}

ParameterBeschreibung
idDie ID der News

Diese Route kann nur vom Nutzer der betreffenden Nachrichten genutzt werden.

Terminal-Fenster
curl --request DELETE \
--url https://example.com/news/<NEWS-ID> \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \
Der Nutzer muss mindestens eingeloggt sein oder über Root-Rechte verfügen.

DELETE /comments/{id}

ParameterBeschreibung
idDie ID eines Kommentars
Terminal-Fenster
curl --request DELETE \
--url https://example.com/comments/studip/news \
--header "Authorization: Basic `echo -ne "test_autor:testing" | base64`" \

GET /news/{id}/relationships/ranges

see http://jsonapi.org/format/#fetching-relationships

PATCH /news/{id}/relationships/ranges

see http://jsonapi.org/format/#crud-updating-to-many-relationships

POST /news/{id}/relationships/ranges

see http://jsonapi.org/format/#crud-updating-to-many-relationships

DELETE /news/{id}/relationships/ranges

see http://jsonapi.org/format/#crud-updating-to-many-relationships