REST Service - Flight Framework
REST Service - Flight Framework
SADRAJ
1
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
2.10
2.11
2.12
2.13
2.14
2.15
1 Flight framework
Flight je specijalizovani PHP framework namenjen prvenstveno razvoju REST
servisa. Osnovna funkcionalnost ovog framework-a je rutiranje, odnosno
jednostavno kreiranje funkcija koje odgovaraju na HTTP zahteve upuene
korienjem neke standardne HTTP metode (GET, POST, PUT, DELETE). Flight je
objektno-orijentisan framework i moe se koristiti bilo pozivanjem statikih metoda
koje su definisane u klasama Flight-a, bilo instanciranjem novog objekta. U ovoj
skripti e biti koriene statike metode. Mogue je definisanje sopstvenih globalnih
promenljivih u Flight-u, segmentno rutiranje, korienje Flight-a za automatizaciju
dodavanja HTML templejta i dr.
2 Kreiranje projekta
U daljem tekstu e biti opisan postupak kreirana jednostavnog REST veb servisa koji koristi
Flight framework. Servis e koristiti REST nain rutiranja, to znai da e koristiti lepe URL
adrese za manipulaciju sa bazom podataka. Koristie se sve etiri HTTP metode: GET,
POST, PUT, DELETE. Poziv GET metode e se koristiti za vraanje JSON ili XML
dokumenta sa podacima iz baze, POST metoda e biti koriena za dodavanje novog
zapisa u odgovarajuu tabelu u bazi, PUT e se koristiti za izmenu, a DELETE za brisanje
zapisa.
Konano, neophodno je ukljuiti Apache Rewrite modul koji omoguava prepisivanje URLova u skladu sa .htaccess pravilom. Ukoliko se koristi WAMP server, to je mogue uraditi
levim klikom na ikonicu WAMP servera u taskbar-u, zatim izborom opcije Apache->Apache
modules->rewrite_module. Kod ostalih softverskih reenja baziranih na Apache serveru
(XAMPP, MAMP, LAMP, EasyPHP i dr.), rewrite modul se ukljuuje runom izmenom
Apache konfiguracionog fajla.
<?php
class Database
{
private $hostname="localhost";
private $username="root";
private $password="";
private $dbname;
private $dblink; // veza sa bazom
private $result; // Holds the MySQL query result
private $records; // Holds the total number of records returned
private $affected; // Holds the total number of affected rows
function __construct($dbname)
{
$this->dbname = $dbname;
$this->Connect();
}
/*
function __destruct()
{
$this->dblink->close();
//echo "Konekcija prekinuta";
}
*/
public function getResult()
{
return $this->result;
}
//konekcija sa bazom
function Connect()
{
$this->dblink = new mysqli($this->hostname, $this->username, $this>password, $this->dbname);
if ($this->dblink ->connect_errno) {
printf("Konekcija neuspena: %s\n", $mysqli->connect_error);
exit();
}
$this->dblink->set_charset("utf8");
//echo "Uspesna konekcija";
}
//select funkcija
function select ($table="novosti", $rows = 'novosti.id, novosti.naslov,
novosti.tekst, novosti.datumvreme, novosti.kategorija_id,
kategorije.kategorija', $join_table="kategorije",
$join_key1="kategorija_id", $join_key2="id", $where = null, $order = null)
{
$q = 'SELECT '.$rows.' FROM '.$table;
if($join_table !=null)
$q .= ' JOIN '.$join_table.' ON
'.$table.'.'.$join_key1.' = '.$join_table.'.'.$join_key2;
if($where != null)
$q .= ' WHERE '.$where;
if($order != null)
$q .= ' ORDER BY '.$order;
$this->ExecuteQuery($q);
//print_r($this->getResult()->fetch_object());
}
function insert ($table="novosti", $rows = "naslov, tekst", $values)
{
$query_values = implode(',',$values);
$insert = 'INSERT INTO '.$table;
if($rows != null)
{
$insert .= ' ('.$rows.')';
}
$insert .= ' VALUES ('.$query_values.')';
//echo $insert;
if ($this->ExecuteQuery($insert))
return true;
else return false;
}
function update ($table="novosti", $id, $keys, $values)
{
$set_query = array();
for ($i=0; $i<sizeof($keys);$i++){
$set_query[] = $keys[$i] . " = '".$values[$i]."'";
}
$set_query_string = implode(',',$set_query);
$update = "UPDATE ".$table." SET ". $set_query_string ." WHERE id=". $id;
if (($this->ExecuteQuery($update)) && ($this->affected >0))
return true;
else return false;
}
function delete ($table="novosti", $keys, $values)
{
$delete = "DELETE FROM ".$table." WHERE ".$keys[0]." = '".$values[0]."'";
//echo $delete;
if ($this->ExecuteQuery($delete))
return true;
else return false;
}
//funkcija za izvrsavanje upita
function ExecuteQuery($query)
{
if($this->result = $this->dblink->query($query)){
6
if (isset($this->result->num_rows)) $this->records
>num_rows;
if (isset($this->dblink->affected_rows)) $this->affected
>dblink->affected_rows;
// echo "Uspesno izvrsen upit";
return true;
}
else
{
return false;
}
}
= $this->result= $this-
function CleanData()
{
//mysql_string_escape () uputiti ih na skriptu vezanu za bezbednost i
sigurnost u php aplikacijama!!
}
}
?>
Opciono, moe se kreirati fajl jsonindent.php gde e biti smetena funkcija Indent:
<?php
/**
* Indents a flat JSON string to make it more human-readable.
*
* @param string $json The original JSON string to process.
*
* @return string Indented version of the original JSON string.
*/
function indent($json) {
$result
$pos
$strLen
$indentStr
$newLine
$prevChar
$outOfQuotes
=
=
=
=
=
=
=
'';
0;
strlen($json);
' ';
"\n";
'';
true;
}
// Add the character to the result string.
$result .= $char;
// If the last character was the beginning of an element,
// output a new line and indent the next line.
if (($char == ',' || $char == '{' || $char == '[') && $outOfQuotes)
{
$result .= $newLine;
if ($char == '{' || $char == '[') {
$pos ++;
}
for ($j = 0; $j < $pos; $j++) {
$result .= $indentStr;
}
}
$prevChar = $char;
}
return $result;
}
?>
Dakle, prvo je potrebno ukljuiti fajl Flight.php da bi se koristio Flight framework. Zatim se
definiu rute. U ovom primeru, definisana je samo jedna ruta, /. Ova ruta se odnosi na
pristup root direktorijumu projekta. U sluaju ovog projekta, ruta / odnosi se na putanju
http://localhost/rest/. Poto prilikom definisanja ove podrazumevane rute nije definisana
metoda, poruka hello world! prikazae se prilikom pozivanja ove rute korienjem bilo koje
metode (GET, POST, PUT, DELETE).
Kada se stranici pristupa iz browser-a, koristi se GET metoda. Za testiranje ostalih metoda,
moe se koristiti neka posebna aplikacija ili ekstenzija za browser. Za Firefox, jedna od boljih
ekstenzija je HTTP Requester koja se besplatno moe preuzeti sa adrese
8
Slika 1 HttpRequester
U ovom projektu bie kreirano nekoliko ruta. Za svaku CRUD operaciju nad bazom, koristie
se odgovarajua HTTP metoda. Dakle, bie dodate sledee rute:
Metoda
GET
GET
Ruta
/novosti.json
/novosti/:id.json
GET
/kategorije.json
GET
/kategorije/:id.json
9
Operacija
Prikaz svih novosti iz baze
Prikaz odreene novosti
Prikaz svih kategorija sa
novostima
Prikaz odreene kategorije
POST
POST
PUT
PUT
DELETE
DELETE
sa novostima iz te kategorije
Dodavanje nove novosti
Dodavanje nove kategorije
Izmena odreene novosti
Izmena odreene kategorije
Brisanje odreene novosti
Brisanje odreene kategorije
/novosti
/kategorije
/novosti/:id
/kategorije/:id
/novosti/:id
/kategorije/:id
Tabela 1 Operacije nad bazom
Sledei korak je definisanje Flight globalne promenljive koja ita podatke iz tela HTTP
zahteva:
<?php
require 'flight/Flight.php';
require 'jsonindent.php';
Flight::register('db', 'Database', array('rest'));
$json_podaci = file_get_contents("php://input");
Flight::set('json_podaci', $json_podaci );
Flight::route('/', function(){
echo 'hello world!';
});
Flight::start();
?>
10
Flight::start();
?>
Flight PHP poseduje mogunost definisanja razliitih varijabli u ruti. One se oznaavaju
prefiksom @. Ovde je koriena varijabla @id koja se prosleuje funkciji u okviru odreene
rute. U funkcijama se definie obrada zahteva za rute.
U ovom primeru su definisane GET rute sa sufiksom .json. Na primer, za vraanje novosti sa
id-jem 55 u JSON formatu, potrebno je poslati zahtev:
GET http://localhost/novosti/55.json
Na ovaj nain je mogue jednostavno kreirati funkciju servisa sa drugaijom rutom koja
vraa drugaiji format podataka. Na primer, mogue je kreirati rutu:
GET http://localhost/novosti/55.xml
Koja e vratiti istu novost, ali u XML formatu.
Naravno, mogue je koristitiAccept zaglavlje u zahtevu umesto odgovarajuih sufiksa u ruti
za izbor formata odgovora.
11
while ($red=$db->getResult()->fetch_object()){
$niz[] = $red;
}
//JSON_UNESCAPED_UNICODE parametar je uveden u PHP verziji 5.4
//Omoguava Unicode enkodiranje JSON fajla
//Bez ovog parametra, vri se escape Unicode karaktera
//Na primer, slovo e biti \u010
$json_niz = json_encode ($niz,JSON_UNESCAPED_UNICODE);
echo indent($json_niz);
return false;
});
echo indent($json_niz);
return false;
});
});
13
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$podaci_query = array();
foreach ($podaci as $k=>$v){
$v = "'".$v."'";
$podaci_query[$k] = $v;
}
if ($db->insert("novosti", "naslov, tekst,
kategorija_id, datumvreme", array($podaci_query["naslov"],
$podaci_query["tekst"], $podaci_query["kategorija_id"], 'NOW()'))){
$odgovor["poruka"] = "Novost je uspeno
ubaena";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
ubacivanju novosti";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
}
);
$podaci_query[$k] = $v;
}
if ($db->insert("kategorije", "kategorija",
array($podaci_query["kategorija"]))){
$odgovor["poruka"] = "Kategorija je uspeno
ubaena";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
ubacivanju novosti";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
});
15
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
izmeni novosti";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
});
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
});
});
18
$niz[$i]["id"] = $red->id;
$niz[$i]["kategorija"] = $red->kategorija;
$db_pomocna=new Database("rest");
$db_pomocna->select("novosti", "*", null, null, null,
"novosti.kategorija_id = ".$red->id, null);
while ($red_pomocna=$db_pomocna->getResult()>fetch_object()){
$niz[$i]["novosti"][]=$red_pomocna;
}
$i++;
}
//JSON_UNESCAPED_UNICODE parametar je uveden u PHP verziji 5.4
//Omoguava Unicode enkodiranje JSON fajla
//Bez ovog parametra, vri se escape Unicode karaktera
//Na primer, slovo e biti \u010
$json_niz = json_encode ($niz,JSON_UNESCAPED_UNICODE);
echo indent($json_niz);
return false;
});
Flight::route('GET /kategorije/@id.json', function($id){
header ("Content-Type: application/json; charset=utf-8");
$db = Flight::db();
$db->select("kategorije", "*", null, null, null, "kategorije.id =
".$id, null);
$niz=array();
$red=$db->getResult()->fetch_object();
$niz["id"] = $red->id;
$niz["kategorija"] = $red->kategorija;
$db_pomocna=new Database("rest");
$db_pomocna->select("novosti", "*", null, null, null,
"novosti.kategorija_id = ".$red->id, null);
while ($red_pomocna=$db_pomocna->getResult()>fetch_object()){
$niz["novosti"][]=$red_pomocna;
}
//JSON_UNESCAPED_UNICODE parametar je uveden u PHP verziji 5.4
//Omoguava Unicode enkodiranje JSON fajla
//Bez ovog parametra, vri se escape Unicode karaktera
//Na primer, slovo e biti \u010
$json_niz = json_encode ($niz,JSON_UNESCAPED_UNICODE);
echo indent($json_niz);
return false;
});
Flight::route('POST /novosti', function(){
header ("Content-Type: application/json; charset=utf-8");
$db = Flight::db();
$podaci_json = Flight::get("json_podaci");
$podaci = json_decode ($podaci_json);
if ($podaci == null){
$odgovor["poruka"] = "Niste prosledili podatke";
$json_odgovor = json_encode ($odgovor);
echo $json_odgovor;
return false;
} else {
19
if
(!property_exists($podaci,'naslov')||!property_exists($podaci,'tekst')||!pr
operty_exists($podaci,'kategorija_id')){
$odgovor["poruka"] = "Niste prosledili korektne
podatke";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$podaci_query = array();
foreach ($podaci as $k=>$v){
$v = "'".$v."'";
$podaci_query[$k] = $v;
}
if ($db->insert("novosti", "naslov, tekst,
kategorija_id, datumvreme", array($podaci_query["naslov"],
$podaci_query["tekst"], $podaci_query["kategorija_id"], 'NOW()'))){
$odgovor["poruka"] = "Novost je uspeno
ubaena";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
ubacivanju novosti";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
}
);
Flight::route('POST /kategorije', function(){
header ("Content-Type: application/json; charset=utf-8");
$db = Flight::db();
$podaci_json = Flight::get("json_podaci");
$podaci = json_decode ($podaci_json);
if ($podaci == null){
$odgovor["poruka"] = "Niste prosledili podatke";
$json_odgovor = json_encode ($odgovor);
echo $json_odgovor;
} else {
if (!property_exists($podaci,'kategorija')){
$odgovor["poruka"] = "Niste prosledili korektne
podatke";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$podaci_query = array();
foreach ($podaci as $k=>$v){
$v = "'".$v."'";
$podaci_query[$k] = $v;
20
}
if ($db->insert("kategorije", "kategorija",
array($podaci_query["kategorija"]))){
$odgovor["poruka"] = "Kategorija je uspeno
ubaena";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
ubacivanju novosti";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
});
Flight::route('PUT /novosti/@id', function($id){
header ("Content-Type: application/json; charset=utf-8");
$db = Flight::db();
$podaci_json = Flight::get("json_podaci");
$podaci = json_decode ($podaci_json);
if ($podaci == null){
$odgovor["poruka"] = "Niste prosledili podatke";
$json_odgovor = json_encode ($odgovor);
echo $json_odgovor;
} else {
if
(!property_exists($podaci,'naslov')||!property_exists($podaci,'tekst')||!pr
operty_exists($podaci,'kategorija_id')){
$odgovor["poruka"] = "Niste prosledili korektne
podatke";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$podaci_query = array();
foreach ($podaci as $k=>$v){
$v = "'".$v."'";
$podaci_query[$k] = $v;
}
if ($db->update("novosti", $id,
array('naslov','tekst','kategorija_id'),array($podaci->naslov, $podaci>tekst,$podaci->kategorija_id))){
$odgovor["poruka"] = "Novost je uspeno
izmenjena";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
izmeni novosti";
21
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
});
Flight::route('PUT /kategorije/@id', function($id){
header ("Content-Type: application/json; charset=utf-8");
$db = Flight::db();
$podaci_json = Flight::get("json_podaci");
$podaci = json_decode ($podaci_json);
if ($podaci == null){
$odgovor["poruka"] = "Niste prosledili podatke";
$json_odgovor = json_encode ($odgovor);
echo $json_odgovor;
} else {
if (!property_exists($podaci,'kategorija')){
$odgovor["poruka"] = "Niste prosledili korektne
podatke";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$podaci_query = array();
foreach ($podaci as $k=>$v){
$v = "'".$v."'";
$podaci_query[$k] = $v;
}
if ($db->update("kategorije", $id,
array('kategorija'),array($podaci->kategorija))){
$odgovor["poruka"] = "Kategorija je uspeno
izmenjena";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
} else {
$odgovor["poruka"] = "Dolo je do greke pri
izmeni kategorije";
$json_odgovor = json_encode
($odgovor,JSON_UNESCAPED_UNICODE);
echo $json_odgovor;
return false;
}
}
}
});
Flight::route('DELETE /novosti/@id', function($id){
header ("Content-Type: application/json; charset=utf-8");
$db = Flight::db();
if ($db->delete("novosti", array("id"),array($id))){
22
});
Flight::start();
?>
23
24
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Format HTTP body parametara
Izlazni parametri
"id":"1",
"naslov":"Facebook uveo dislike
za Messenger",
"tekst":"Like dugme postalo je
ikona socijalnih mrea, i
oigledno, Facebooka. Meutim,
postoje trenuci kada je potrebno i
dislike dugme, ali ono nije
postojalao, do sada.",
"datumvreme":"2013-12-18
00:55:38",
"kategorija_id":"1",
"kategorija":"IT"
},
{
"id":"2",
"naslov":"Amazonov telefon
stie 2014?",
"tekst":"Glasine u vezi sa
moguim smartfonom kompanije Amazon
postoje ve neko vreme, ali ini se
da se polako bliimo datumu
predstavljanja.",
"datumvreme":"2013-12-18
00:56:21",
"kategorija_id":"1",
"kategorija":"IT"
}]
application/json
25
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Format HTTP body parametara
Izlazni parametri
"id":"1",
"naslov":"Facebook uveo dislike
za Messenger",
"tekst":"Like dugme postalo je
ikona socijalnih mrea, i
oigledno, Facebooka. Meutim,
postoje trenuci kada je potrebno i
dislike dugme, ali ono nije
postojalao, do sada.",
"datumvreme":"2013-12-18
00:55:38",
"kategorija_id":"1",
"kategorija":"IT"
}
application/json
Pregled svih kategorija
GET
/kategorije.json
(nema)
(nema)
(nema)
Niz JSON objekata sa atributima id[int],
kategorija[string], novosti[array of object].
Struktura niza objekata novosti opisana je u
funkciji Pregled svih novosti.
Primer:
{
"id":"1",
"naslov":"Facebook uveo dislike
za Messenger",
"tekst":"Like dugme postalo je
ikona socijalnih mrea, i
oigledno, Facebooka. Meutim,
postoje trenuci kada je potrebno i
dislike dugme, ali ono nije
postojalao, do sada.",
"datumvreme":"2013-12-18
00:55:38",
"kategorija_id":"1",
"kategorija":"IT"
}
application/json
26
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Format HTTP body parametara
Izlazni parametri
"id":"1",
"kategorija":"IT",
"novosti":[
{
"id":"1",
"naslov":"Facebook uveo
dislike za Messenger",
"tekst":"Like dugme postalo
je ikona socijalnih mrea, i
oigledno, Facebooka. Meutim,
postoje trenuci kada je potrebno i
dislike dugme, ali ono nije
postojalao, do sada.",
"datumvreme":"2013-12-18
00:55:38",
"kategorija_id":"1"
},
{
"id":"2",
"naslov":"Amazonov telefon
stie 2014?",
"tekst":"Glasine u vezi sa
moguim smartfonom kompanije Amazon
postoje ve neko vreme, ali ini se
da se polako bliimo datumu
predstavljanja.",
"datumvreme":"2013-12-18
00:56:21",
"kategorija_id":"1"
}
]
}
application/json
27
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Dodavanje novosti
POST
/novosti
(nema)
JSON objekat sa atributima naslov[string],
tekst[string], kategorija_id[int].
Primer:
{
"naslov": "Neki naslov",
"tekst" : "Neki tekst",
"kategorija_id" : 2
}
application/json
Kratak JSON objekat sa jednim atributom,
poruka[string].
Primer:
{
"poruka":"Novost je uspeno
ubaena"
}
application/json
Dodavanje kategorije
POST
/kategorije
(nema)
JSON objekat sa atributom kategorija[string]
Primer:
{
"kategorija" : "Neka kategorija"
}
application/json
Kratak JSON objekat sa jednim atributom,
poruka[string].
Primer:
{
"poruka":"Kategorija je uspeno
ubaena"
}
application/json
28
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Auriranje novosti
PUT
/novosti/:id
id [int] - Identifikacioni broj novosti
JSON objekat sa atributima naslov[string],
tekst[string], kategorija_id[int].
Primer:
{
"naslov": "Neki naslov",
"tekst" : "Neki tekst",
"kategorija_id" : 2
}
application/json
Kratak JSON objekat sa jednim atributom,
poruka[string].
Primer:
{
"poruka":"Novost je uspeno
izmenjena"
}
application/json
Auriranje kategorije
PUT
/kategorije/:id
id [int] - Identifikacioni broj kategorije
JSON objekat sa atributom kategorija[string]
Primer:
{
"kategorija" : "Neka kategorija"
}
application/json
Kratak JSON objekat sa jednim atributom,
poruka[string].
Primer:
{
"poruka":"Kategorija je uspeno
izmenjena"
}
application/json
29
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Format HTTP body parametara
Izlazni parametri
Opis funkcije
HTTP metoda
URL
URL parametri
HTTP body parametri
Format HTTP body parametara
Izlazni parametri
Brisanje novosti
DELETE
/novosti/:id
id [int] - Identifikacioni broj novosti
(nema)
(nema)
Kratak JSON objekat sa jednim atributom,
poruka[string].
Primer:
{
"poruka":"Novost je uspeno
izbrisana"
}
application/json
Brisanje kategorije
DELETE
/kategorije/:id
id [int] - Identifikacioni broj kategorije
(nema)
(nema)
Kratak JSON objekat sa jednim atributom,
poruka[string].
Primer:
{
"poruka":"Kategorija je uspeno
izbrisana"
}
application/json
30