У меня есть веб-приложение, которое использует JSON-RPC. Есть файл rest.php, который содержит такой код:
$body = file_get_contents('php://input');
$jsonObj = json_decode($body);
switch ($jsonObj->method) {
case 'API1': //function1
header($_SERVER['SERVER_PROTOCOL']." 200 OK");
break;
case 'API2': //function2
header($_SERVER['SERVER_PROTOCOL']." 200 OK");
break;
default:
header($_SERVER['SERVER_PROTOCOL']." 400 Bad request");
break;
}
структура коммутатора отправляет запрос в соответствии с параметром «метод».
Я хочу изменить это. Я хочу создать один REST API для каждой функции, каждая со своим URI. Так что без параметра «метод».
Может кто-нибудь дать мне подсказку? Я должен создать файл для каждого API REST? Это первый раз, когда делают REST API в php.
Большое спасибо.
Есть несколько способов добиться этого. Лично я предпочитаю отправлять запросы через URI-маршрутизацию [1]. Если маршрутизация URI не является опцией, я бы реализовал таблицу поиска для отправки запросов. Например, если есть несколько ресурсов:
/books
/cars
/music
я обработал бы запросы, основанные на $ _SERVER [‘REQUEST_URI’], см. [2]. Пример:
$lookup_table = array(
'/books' => function($method) {
switch ($method) {
case 'GET': { // handle GET request
} break;
case 'POST': { // handle POST request
} break;
}
},
'/authors' => function($method) {
switch ($method) {
case 'GET': { // handle GET request
} break;
case 'PUT': { // handle PUT request
} break;
}
}
);
// this is simplification
// REQUEST_URI needs some work before used
$uri = $_SERVER['REQUEST_URI'];
if (isset($lookup_table[$uri])) {
$lookup_table[$uri]($_SERVER['REQUEST_METHOD']);
}
Я думаю, что этот упрощенный пример даст вам несколько советов.
Других решений пока нет …