92 lines
3.0 KiB
PHP
92 lines
3.0 KiB
PHP
<?php
|
|
/*
|
|
Vstopna točka za našo spletno storitev. Podobno kot pri MVC, bodo tudi vse zahteve na API šle skozi index.php,
|
|
ki bo poskrbel za njihovo obravnavo.
|
|
Index.php ima tako vlogo routerja, ki na podlagi HTTP zahteve sproži ustrezne akcije.
|
|
Za razliko od MVC, bo poleg URL-ja pomembna tudi HTTP metoda v zahtevi, saj REST predpisuje akcije, ki jih prožijo določene metode.
|
|
|
|
ENDPOINTI:
|
|
api/ads/:id/
|
|
PUT -> posodobi
|
|
GET -> vrni oglas
|
|
DELETE -> zbriši oglas
|
|
|
|
api/ads
|
|
POST -> dodaj nov oglas
|
|
GET-> vrni vse oglase
|
|
|
|
S pomočjo .htaccess preslikamo URL-je iz /api.php/foo/bar => /api/foo/bar (več v datoteki .htaccess)
|
|
*/
|
|
|
|
require_once "../admin/connection.php"; //uporabimo povezavo na bazo iz MVC
|
|
|
|
session_start();
|
|
|
|
//nastavimo glave odgovora tako, da brskalniku sporočimo, da mu vračamo json
|
|
header('Content-Type: application/json');
|
|
//omgočimo zahtevo iz različnih domen
|
|
header("Access-Control-Allow-Origin: *");
|
|
// Kot odgovor iz API-ja izpišemo JSON string s pomočjo funkcije json_encode
|
|
|
|
// preberemo HTTP metodo iz zahteve
|
|
$method = $_SERVER['REQUEST_METHOD'];
|
|
|
|
// Razberemo parametre iz URL - razbijemo URL po '/'
|
|
// tako dobimo iz zahteve api/first/second/third => $request = array("first", "second", "third")
|
|
if(isset($_SERVER['PATH_INFO']))
|
|
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
|
|
else
|
|
$request="";
|
|
|
|
$controllers = array( 'users', 'comments' );
|
|
// Najprej potrebujemo 'router', ki bo razpoznal zahtevo in sprožil ustrezne akcije
|
|
// Preverimo, če je v url-ju prva pot 'ads'
|
|
if(!isset($request[0]) || !in_array($request[0], $controllers)){
|
|
echo json_encode((object)["status"=>"404", "message"=>"Not found"]);
|
|
die();
|
|
}
|
|
|
|
|
|
require_once ('../admin/models/' . $request[0] . '.php'); //uporabimo model Ad iz MVC
|
|
require_once ('controllers/' . $request[0] . '_controller_json.php'); //vključimo API controller
|
|
|
|
$o = $request[0] . "_controller_json"; //generiramo ime razreda controllerja
|
|
$controller = new $o; //ustvarimo instanco razreda (ime razreda je string spremenljivka)
|
|
|
|
|
|
|
|
// Odvisno od metode pokličemo ustrezen controller action
|
|
switch($method){
|
|
case "GET":
|
|
// Če je v zahtevi nastavljen :id, kličemo akcijo show (en oglas), sicer pa index (vsi oglasi)
|
|
if(isset($request[1])){
|
|
$controller->show($request[1]);
|
|
} else {
|
|
$controller->index();
|
|
}
|
|
break;
|
|
case "POST":
|
|
$controller->store();
|
|
break;
|
|
case "PUT":
|
|
if(!isset($request[1])){
|
|
// Če ni podan :id v zahtevi, izpišemo napako
|
|
echo json_encode((object)["status"=>"500", "message"=>"Invalid parameters"]);
|
|
die();
|
|
}
|
|
$controller->update($request[1]);
|
|
break;
|
|
case "DELETE":
|
|
if(!isset($request[1])){
|
|
// Če ni podan :id v zahtevi, izpišemo napako
|
|
echo json_encode((object)["status"=>"500", "message"=>"Invalid parameters"]);
|
|
die();
|
|
}
|
|
$controller->delete($request[1]);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|