consolidate all repos to one for archive
This commit is contained in:
91
semester_4/razvoj_aplikacij_za_internet/php/api/index.php
Normal file
91
semester_4/razvoj_aplikacij_za_internet/php/api/index.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?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;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user