从JSON-RPC迁移到简单的RESTful API

时间:2015-10-02 09:28:13

标签: php web-services rest json-rpc

我有一个使用JSON-RPC的Web应用程序。有一个文件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。所以没有参数"方法"。

有人可以给我一个提示吗?我必须为每个REST API创建一个文件?这是第一次在php中创建REST API。

非常感谢。

1 个答案:

答案 0 :(得分: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