API Dokumentation - AutomatischesLernen/Server GitHub Wiki
Wir benutzen eine REST API um dem Client die Möglichkeit zu geben, die Daten zu bekommen und zu verändern.
Endpunkte:
Cards
LIST: /cards
Request:
GET: http://wi2.de/cards
X-SessionToken: <sessionInfo>
Response:
{
offset: 0,
items: 50,
total: 132,
cards: [
{
id: 1,
creatorID: 1,
question: "Was ist das hier?",
response: "Das ist ganz toll",
createdAt: "2012-05-09 13:15:31",
updatedAt: "2012-05-09 13:15:31",
isBad: false,
metaInfo: {
score: 31
}
},
{
id: 2,
creatorID: 2,
question: "Was ist das hier? Hä?",
response: "Na das hier!",
createdAt: "2012-05-04 13:15:31",
updatedAt: "2012-05-04 13:15:31",
isBad: false,
metaInfo: {
score: 10
}
}
]
}
Anmerkungen
- Die Score wird jedes mal on-the-fly berechnet, in dem die Summe aller Votes für jede Karte berechnet wird.
GET: /cards/#id
Request
GET http://wi2.de/cards/1
X-SessionToken: <sessionInfo>
Response
{
card: {
id: 1,
creatorID: 1,
question: "Was ist das hier?",
response: "Das ist ganz toll",
createdAt: "2012-05-04 13:15:31",
updatedAt: "2012-05-04 13:15:31",
isBad: false,
metaInfo: {
score: 10,
canVote: true
}
}
}
Anmerkungen:
- score ist dynamisch berechnet
- canVote ergibt sich daraus, ob der aktuelle Benutzer (vom Session Token) diese Frage schon bewertet hat
LIST: /cards/#id/votes
Request
GET http://wi2.de/cards/1/votes
X-SessionToken: <sessionInfo>
Response
{
offset: 0,
items: 50,
total: 100
votes: [
{
cardID: 1,
userID: 1,
vote: 1,
createdAt: DateTime,
updatedAt: DateTime
},
{
cardID: 1,
userID: 2,
vote: -1,
createdAt: DateTime,
updatedAt: DateTime
}
]
}
POST /cards/#id/votes
Request
POST /cards/1/votes
X-SessionToken: <sessionInfo>
BODY: "{
vote: 1
}"
Response
301 Temporary Redirect zu http://wi2.de/cards/1
POST /cards//answer
Request
POST /cards/1/answer
BODY "{
correct: true
}"
Response
301 Temporary Redirect zu http://wi2.de/cards/1
PUT: /cards/#id
Request
PUT http://wi2.de/cards/1
X-SessionToken: <sessionInfo>
BODY "{
question: "Was ist ...",
response: "Das ist ganz toll!"
}"
Response
301 Temporary Redirect zu http://wi2.de/cards/1
POST: /cards
Request
POST http://wi2.de/cards
X-SessionToken: <sessionInfo>
BODY "{
question: "Was ist die Antwort auf alle Fragen?",
response: "42! Noob."
}"
Response
301 Temporary Redirect zu http://wi2.de/cards/3
Classes
LIST: /classes
Request:
GET: http://wi2.de/classes
X-SessionToken: <sessionInfo>
Response:
{
offset: 0,
items: 50,
total: 132,
classes: [
{
id: 1,
creatorID: 1,
name: "VWL 1",
createdAt: DateTime,
updatedAt: DateTime,
metaInfo: {
score: 310,
upvotes: 350,
downvotes: 40
}
},
{
id: 2,
creatorID: 1,
name: "BWL 1",
createdAt: DateTime,
updatedAt: DateTime,
metaInfo: {
score: 310,
upvotes: 350,
downvotes: 40
}
}
]
}
Anmerkungen
- Die score ergibt sich aus allen Bewertungen der Karten
GET: /classes/#id
Request:
GET: http://wi2.de/classes/1
X-SessionToken: <sessionInfo>
Response
{
class: {
id: 1,
creatorID: 1,
name: "VWL 1",
createdAt: DateTime,
updatedAt: DateTime
}
}
PUT: /classes/#id
Request
PUT http://wi2.de/classes/1
X-SessionToken: <sessionInfo>
BODY "{
name: "VWL 2"
}"
Response
301 Temporary Redirect zu http://wi2.de/classes/1
POST: /classes
Request
POST http://wi2.de/classes
X-SessionToken: <sessionInfo>
BODY "{
name: "VWL 3",
}"
Response
301 Temporary Redirect zu http://wi2.de/classes/3
Users
LIST: /users
Request:
GET: http://wi2.de/users
X-SessionToken: <sessionInfo>
Response:
{
offset: 0,
items: 50,
total: 132,
users: [
{
id: 1,
email: "[email protected]",
firstname: "Foo",
lastname: "Bar",
isAdmin: false,
createdAt: DateTime
updatedAt: DateTime
lastLoginAt: DateTime
},
{
id: 2,
email: "[email protected]",
firstname: "Hans",
lastname: "Blubb",
isAdmin: true,
createdAt: DateTime
updatedAt: DateTime
lastLoginAt: DateTime
}
]
}
GET: /users/#id
Request
GET http://wi2.de/users/1
X-SessionToken: <sessionInfo>
Response
{
user: {
id: 1,
email: "[email protected]",
firstname: "Foo",
lastname: "Bar",
isAdmin: false,
createdAt: DateTime
updatedAt: DateTime
lastLoginAt: DateTime
}
}
PUT: /users/#id
Request
PUT http://wi2.de/users/1
X-SessionToken: <sessionInfo>
BODY "{
firstname: "Hans",
lastname: "Meier",
password: "asdasdasd"
}"
Response
301 Temporary Redirect zu http://wi2.de/users/1
POST: /users
Request
POST http://wi2.de/users
X-SessionToken: <sessionInfo>
BODY "{
firstname: "Hans",
lastname: "Meyer",
password: "asdasdasd",
email: "[email protected]"
}"
Response
301 Temporary Redirect zu http://wi2.de/users/3
LIST: /users/#id/classes
Request
GET http://wi2.de/users/1/classes
X-SessionToken: <sessionInfo>
Response
{
offset: 0,
items: 50,
total: 100
classes: [
{
id: 1,
creatorID: 1,
name: "VWL 1",
createdAt: DateTime,
updatedAt: DateTime,
metaInfo: {
score: 310,
upvotes: 350,
downvotes: 40
}
},
{
id: 2,
creatorID: 1,
name: "BWL 1",
createdAt: DateTime,
updatedAt: DateTime,
metaInfo: {
score: 310,
upvotes: 350,
downvotes: 40
}
}
]
}
LIST: /users/#id/folders
Request
GET http://wi2.de/users/1/folders
X-SessionToken: <sessionInfo>
Response
{
offset: 0,
items: 50,
total: 100
folders: [
{
id: 1,
name: "VWL 1",
userID: 1,
createdAt: DateTime,
updatedAt: DateTime
},
{
id: 2,
name: "BWL 1",
userID: 1,
createdAt: DateTime,
updatedAt: DateTime
}
]
}
Folders
LIST: /folders
Request:
GET: http://wi2.de/folders
X-SessionToken: <sessionInfo>
Response:
{
offset: 0,
items: 50,
total: 132,
folders: [
{
id: 1,
name: "VWL 1",
userID: 1,
createdAt: DateTime,
updatedAt: DateTime
},
{
id: 2,
name: "BWL 1",
userID: 2,
createdAt: DateTime,
updatedAt: DateTime
}
]
}
GET: /folders/#id
Request:
GET: http://wi2.de/folders/1
X-SessionToken: <sessionInfo>
Response
{
folder: {
id: 1,
name: "VWL 1",
userID: 1,
createdAt: DateTime,
updatedAt: DateTime
}
}
PUT: /folders/#id
Request
PUT http://wi2.de/folders/1
X-SessionToken: <sessionInfo>
BODY "{
name: "VWL 2"
}"
Response
301 Temporary Redirect zu http://wi2.de/folders/1
POST: /folders
Request
POST http://wi2.de/folders
X-SessionToken: <sessionInfo>
BODY "{
name: "VWL 3",
}"
Response
301 Temporary Redirect zu http://wi2.de/folders/3
LIST: /folders/#id/classes
Request
GET http://wi2.de/folders/1/classes
X-SessionToken: <sessionInfo>
Response
{
offset: 0,
items: 50,
total: 100
classes: [
{
id: 1,
creatorID: 1,
name: "VWL 1",
createdAt: DateTime,
updatedAt: DateTime,
metaInfo: {
score: 310,
upvotes: 350,
downvotes: 40
}
},
{
id: 2,
creatorID: 2,
name: "BWL 1",
createdAt: DateTime,
updatedAt: DateTime,
metaInfo: {
score: 310,
upvotes: 350,
downvotes: 40
}
}
]
}