2015-10-02 28 views
1

我有一个使用JSON-RPC的Web应用程序。有一个包含这样的代码文件rest.php:从JSON-RPC移到简单的RESTful API

$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

有几种方法可以实现这一点。我个人更喜欢通过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