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