Korisnici objavljuju linkove za koje drugi korisnici glasaju. Na početnoj stranici objave mogu biti rangirane po starosti, top, ili rising. Korisnici mogu komentirati objave, odgovarati na komentare, uređivati svoje komentare i glasati za druge komentare. Za svakog korisnika se mogu dohvatiti njegove objave i komentari.
-
klonirati git repo
-
baza
Instalirati i pokrenuti MySQL 8.
Pokrenuti SQL skriptu za stvaranje usera i definiranje baze.
$ mysql -p < hackernews_rwa/schema.sql
-
Python okruženje i instalacija potrebnih paketa
Aplikacija je testirana sa Python verzijom 3.7
Nakon instalacije Python-a instalirati pakete i aplikaciju
$ pip install -r requirements.txt
$ pip install -e . -
Postavljanje environment varijabli i pokretanje aplikacije
$ export FLASK_APP=hackernews_rwa
$ export FLASK_ENV=development
$ flask runFrontend će biti dostupan na locahost:5000/static/ a backend na locahost:5000/api/
Primjer korištenja backenda je na localhost:5000/static/primjer_za_backend.html
API služi za rad sa resursima web aplikacije (stvaranje novih i dohvat ili uređivanje postojećih), npr. stvaranje novog korisnika, dohvat objava koje je stvorio neki korisnik, komentara itd.
Argumenti se ovisno o zahtjevu šalju kao url query parametri ili u JSON formatu. Svi JSON odgovori koje vraća API pisani su u JSend formatu.
U ostatku dokumentacije se pretpostavlja da je API dostupan na localhost:5000/
-
Napravi novi korisnički račun:
Na localhost:5000/api/users/ (HTTP metoda treba biti POST) poslati ovo:
{ "username": "ime123", "password": "lozinka123" "email": "example@mail.com" }
Email polje nije obavezno.
Ovo je primjer JavaScript funkcije koja šalje zahtjev i ispisuje odgovor u konzolu.
async function register_user(uname, pass) { let url = "/api/users"; let data = {username: uname,password: pass} try { let response = await fetch(url, { method: 'POST', body: JSON.stringify(data), headers: { 'Content-Type': 'application/json' } }); response = await response.json(); console.log('Register response:', JSON.stringify(response)); return response.success; } catch (error) { console.log('Error: ', error); } }
-
Ulogiraj se:
Na localhost:5000/api/sessions/ (HTTP metoda treba biti POST) poslati ovo:
{ "username": "ime123", "password": "lozinka123" }
API vraća session cookie koji sadrži user id i koristi se za stvaranje resursa i kao dozvola za pristup postojećim.
-
Stvori novu objavu:
Na localhost:5000/api/posts/ (HTTP metoda treba biti POST) poslati ovo:
{ "title": "API design tips", "url": "https://medium.com/@petertboyer/learn-restful-api-design-ideals-c5ec915a430f?" "body": "An article with API design tips" }
Naslov je obavezan, url i body nisu. (Objava može imati samo naslov, naslov i link, naslov i body ili sve)
-
Dohvati postojeće objave:
Poslati zahtjev na localhost:5000/api/posts/ (HTTP metoda treba biti GET)
Ovo je primjer odgovora koji se dobije:
{ "data": [ { "body": null, "created": "Fri, 13 Dec 2019 12:34:11 GMT", "edited": 0, "id": 2, "title": "ovo je google", "url": "google.com", "user_id": 2, "votes": 0 }, { "body": "aa", "created": "Fri, 13 Dec 2019 12:53:11 GMT", "edited": 1, "id": 3, "title": "uaaaaa", "url": null, "user_id": 2, "votes": 0 } ], "status": "success" }
Glavni dijelovi API-ja su posts, comments, users i sessions. Općenito GET metoda služi za dohvat nekog resursa ili podresursa, POST za stvaranje novog, PATCH za update nekih vrijednosti, i DELETE za brisanje. Za stvaranje resursa (osim usera i session-a) treba biti ulogiran.
GET
Endpoint | Opis |
---|---|
/api/users/id | Dohvati korisnika po ID-u |
/api/users/id/posts | Dohvati objave nekog korisnika po njegovom ID-u, npr. /api/users/5/posts |
/api/users/id/comments | Dohvati komentare nekog korisnika po ID-u |
POST
Endpoint | Opis | Argumenti (JSON) |
---|---|---|
/api/users/ | Stvori novog korisnika | username, password, email (nije obavezan) |
DELETE
Endpoint | Opis |
---|---|
/api/users/ | Obriši svoj korisnički račun (ID računa se pronađe u dobivenom session cookie-u. |
Služi za login i logout.
POST
Endpoint | Opis | Argumenti (JSON) |
---|---|---|
/api/sessions/ | Stvori novi session (ulogiraj se). Korisniku se vraća potpisani session cookie koji sadrži njegov ID i koristi se za stvaranje resursa i kao dozvola za pristup postojećim. | username, password |
DELETE
Endpoint | Opis |
---|---|
/api/sessions/ | Prekini trenutni session (logout). Nakon slanja zahtjeva briše se korisnikov session cookie. |
GET
POST
PATCH
Endpoint | Opis | Argumenti (JSON) |
---|---|---|
/api/posts/id | Uredi sadržaj objave (body). Naslov i url se ne mogu urediti. | body |
DELETE
Endpoint | Opis |
---|---|
/api/posts/id | Obriši jednu od svojih objava |
GET
Endpoint | Opis |
---|---|
/api/comments/id | Dohvati jedan komentar po ID-u |
POST
Endpoint | Opis | Argumenti (JSON) |
---|---|---|
/api/comments/id/votes | Stvori pozitivan ili negativan glas za neki komentar. | direction: 1 (positive) ili -1 (negative) |
PATCH
Endpoint | Opis | Argumenti (JSON) |
---|---|---|
/api/comments/id | Uredi sadržaj komentara (body) | body |
DELETE
Endpoint | Opis |
---|---|
/api/comments/id | Obriši jedan od svojih komentara |