Parkquiz

Uppgift i Programmering 2 och Webbserverprogrammering 1

Denna uppgift är ett samarbete mellan kurserna Programmering 2 och Webbserverprogrammering 1.


Programmering 2

  1. Skapa ett GUI för att först logga in och få tillbaka token om det gick bra (sparas).
    Har du inte gjort ditt eget rest-API kan du testa med den url som finns nedan.
  2. Skapa sedan frågor med fyra svarsalternativ, det första korrekt. Kategori väljs i drop-down-meny där kategorierna fås från servern.
  3. Skicka till servern med POST.
    Har du inte gjort ditt eget rest-API kan du testa med den url som finns nedan.
  4. Ta emot statuskod och visa upp om det lyckades eller inte, alternativt använd dig av undantag som genereras av GSON.
  5. Logga ut ska finnas som dödar token (tar bort det sparade värdet, anrop till servern behövs inte).

För att skicka information till servern använder vi den klass som hittas här (som ni också fått ut i exemplet).
För att tolka datan vi får från servern (Json) använder vi oss av Gson som kan laddas hem här.
För att få iordning klasser för tolkning av Gson kan detta vara till hjälp.

Webbserverprogrammering 1

I denna kurs ska vi bygga ett REST-api med några endpoints. Vi måste även designa en databas för att lagra data i. Tips kan vara att installera ett plugin i chrome för att kunna undersöka sitt API, t.ex. Restlet.

Ni ska jobba utifrån denna kod.

  1. Designa en databas för att hantera användare, kategorier och frågor.Nedan en dump av databasen.
    -- phpMyAdmin SQL Dump
    -- version 4.2.7.1
    -- http://www.phpmyadmin.net
    --
    -- Värd: localhost
    -- Tid vid skapande: 01 feb 2018 kl 21:59
    -- Serverversion: 5.5.59-0ubuntu0.14.04.1
    -- PHP-version: 5.6.23-1+deprecated+dontuse+deb.sury.org~trusty+1
     
    SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    SET time_zone = "+00:00";
     
    --
    -- Databas: `quiz`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Tabellstruktur `categories`
    --
     
    CREATE TABLE IF NOT EXISTS `categories` (
    `id` int(11) NOT NULL,
      `category` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_swedish_ci NOT NULL
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_swedish_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Tabellstruktur `questions`
    --
     
    CREATE TABLE IF NOT EXISTS `questions` (
    `id` int(11) NOT NULL,
      `category_id` int(11) NOT NULL,
      `question` varchar(255) COLLATE utf8mb4_swedish_ci NOT NULL,
      `option1` varchar(255) COLLATE utf8mb4_swedish_ci NOT NULL,
      `option2` varchar(255) COLLATE utf8mb4_swedish_ci NOT NULL,
      `option3` varchar(255) COLLATE utf8mb4_swedish_ci NOT NULL,
      `option4` varchar(255) COLLATE utf8mb4_swedish_ci NOT NULL
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_swedish_ci;
     
    -- --------------------------------------------------------
     
    --
    -- Tabellstruktur `users`
    --
     
    CREATE TABLE IF NOT EXISTS `users` (
    `id` int(11) NOT NULL,
      `login` varchar(255) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL,
      `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL,
      `token` varchar(255) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL,
      `token_datetime` datetime NOT NULL
    ) ENGINE=InnoDB  DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_swedish_ci;
     
    --
    -- Index för dumpade tabeller
    --
     
    --
    -- Index för tabell `categories`
    --
    ALTER TABLE `categories`
     ADD PRIMARY KEY (`id`);
     
    --
    -- Index för tabell `questions`
    --
    ALTER TABLE `questions`
     ADD PRIMARY KEY (`id`), ADD KEY `category_id` (`category_id`);
     
    --
    -- Index för tabell `users`
    --
    ALTER TABLE `users`
     ADD PRIMARY KEY (`id`), ADD UNIQUE KEY `login` (`login`), ADD UNIQUE KEY `token` (`token`), ADD KEY `token_datetime` (`token_datetime`);
     
    --
    -- AUTO_INCREMENT för dumpade tabeller
    --
     
    --
    -- AUTO_INCREMENT för tabell `categories`
    --
    ALTER TABLE `categories`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT för tabell `questions`
    --
    ALTER TABLE `questions`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
    --
    -- AUTO_INCREMENT för tabell `users`
    --
    ALTER TABLE `users`
    MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
  2. Skapa en endpoint för att skapa en användare
    $_POST ska innehålla följande data
    Array
    (
        [login] => login
        [password] => password
    )
    Som svar får man, om allt gick bra
    {"status_code":201}
    annars
    {"status_code":400}
    
    https://student.oedu.se/~jf/quiz-api/index.php?e=register
  3. Skapa en endpoint för att få en giltig token.
    $_POST ska innehålla följande data
    Array
    (
        [login] => login
        [password] => password
    )
    Som svar får man, om allt gick bra
    {"status_code":200,"auth_token":"40bd001563085fc35165329ea1ff5c5ecbdbbeef","user_id":2}
    annars
    {"status_code":401}
    
    https://student.oedu.se/~jf/quiz-api/index.php?e=get-token
    login: TestUser
    password: API-test!
  4. Skapa en endpoint för att ta emot ett POST-anrop som hämtar alla kategorier som finns.
    $_POST ska innehålla följande data
    Array
    (
        [auth_token] => 40bd001563085fc35165329ea1ff5c5ecbdbbeef
    )
    Som svar får man, om allt gick bra
    {"status_code":200,"categories":[{"category_id":"1","category":"Fordon & teknik"},{"category_id":"2","category":"Tro & skrock"},{"category_id":"3","category":"Jorden runt"},{"category_id":"4","category":"Kropp & knopp"}]}
    
    https://student.oedu.se/~jf/quiz-api/index.php?e=get-categories
  5. Skapa en endpoint för att ta emot ett POST-anrop med data för en fråga med svarsalternativ. Det krävs en giltig token för att spara data.
    $_POST ska innehålla följande data, där det första alternativet är det korrekta svaret.
    Array
    (
        [auth_token] => 40bd001563085fc35165329ea1ff5c5ecbdbbeef
        [category_id] => 3
        [question] => Vilken sjö har störst yta?
        [option1] => Torneträsk
        [option2] => Kallsjön
        [option3] => Siljan
        [option4] => Hornavan
    )
    Som svar får man, om allt gick bra
    {"status_code":201}
    annars
    {"status_code":400}
    
    https://student.oedu.se/~jf/quiz-api/index.php?e=post-question