Переход от JSON-RPC к простому RESTful API

У меня есть веб-приложение, которое использует 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.

Большое спасибо.

1

Решение

Есть несколько способов добиться этого. Лично я предпочитаю отправлять запросы через 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']);
}

Я думаю, что этот упрощенный пример даст вам несколько советов.

  1. http://symfony.com/doc/current/components/routing/introduction.html
  2. http://php.net/manual/en/reserved.variables.server.php
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]