2016-04-24 Zajęcia 8, 9, 10 (PF, zajęcia 6, 7, 8)
- Materiały
- Dodatkowe zasoby
- REST - podejście pierwsze (działająca wersja). Prosta, uniwersalna, metoda wywoływania przez klienta akcji na serwerze. Zarówno akcja jak i argumenty zapisane pod określonymi parametrami (akcja jako action, argumenty jako arg_1, arg_2 itd.)
- Wyrażenia regularne dla określonych ciągów znaków
- REST - podejście drugie (działająca wersja). Prosta, uniwersalna, metoda wywoływania przez klienta akcji na serwerze. Zarówno akcja jak i argumenty zapisane w adresie URI przekazywanym jako parametr r (w przykładzie są tylko parametry).
- REST - podejście drugie rozszerzone. Praca własna studentów: bazując na poprzednim przykładzie, stworzyć prostą aplikację pozwalającą na zapisanie czegoś w bazie danych, odczytanie, edycję i usunięcie. Informacje identyfikujące zasób oraz akcję powinny być zapisane w przekazywanym jako parametr r adresie URI. Ewentualne pozostałe argumenty powinny być przekazane jako parametry w ,,głównym'' adresie URI (tj. nie będącym przekazywanym jako parametr r).
Stosując konwencje 123/abc/456def gdzie
123 - id zasobu
abc - rodzaj zasobu, np. user, car
456def - akcja
można w funkcji 3 dopisać prostą sekwencję swichy, które nam to rozwiążą
function function_3($args){
$response = array('function' => 'function_3',
'args' => 3,
'arg_1' => $args[1],
'arg_2' => $args[2],
'arg_3' => $args[3]);
$id = $args[1];
$object = $args[2];
$action = $args[3];
switch($action){
case "get":{
switch ($object){
case "user":{
getUser($id);
}
case "car":{
getCar($id);
}
}
}
case "delete":{
switch ($object){
case "user":{
deleteUser($id);
}
case "car":{
deleteCar($id);
}
}
}
}
header('Content-Type: application/json');
echo json_encode($response);
}
- REST - podejście drugie rozszerzone jeszcze bardziej. Praca własna studentów: jak poprzednio, ale informacje identyfikujące zasób są zapisane w przekazywanym jako parametr r adresie URI. Informacje identyfikujące rodzaj akcji przekazywane są jako rodzaj żądania (GET, POST itd). Ewentualne pozostałe argumenty powinny być przekazane jako parametry w ,,głównym'' adresie URI (tj. nie będącym przekazywanym jako parametr r).
Mając informacje o rodzaju żądania za pomocą metody
$method = $_SERVER["REQUEST_METHOD"];
bez problemu modyfikujemy tablicę routingu do postaci
$routes = array(
array("regexp" => "/^user\/(\d+)$/", "method" => "GET", "action" => "getUser"),
array("regexp" => "/^car\/(\d+)$/", "method" => "GET", "action" => "getCar"),
array("regexp" => "/^user\/(\d+)$/", "method" => "DELETE", "action" => "deleteUser"),
array("regexp" => "/^car$\/(\d+)/", "method" => "DELETE", "action" => "deleteCar"),
);