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
      }
    }
  ]
}