从 JSON-RPC 移动到简单的 RESTful API
Move from JSON-RPC to simple RESTful API
我有一个使用 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;
}
switch结构根据参数"method"调度请求。
我想改变它。我想为每个函数创建一个 REST API,每个函数都有它的 URI。所以没有参数"method"。
有人可以给我提示吗?我必须为每个 REST 创建一个文件 API?第一次在php.
中制作REST API
非常感谢。
有几种方法可以实现这一点。我个人更喜欢通过 URI 路由 [1] 来分派请求。如果 URI 路由不是一个选项,我会实现 lookup table 来分派请求。例如,如果有多个资源:
/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']);
}
我想这个简化的例子会给你一些提示。
我有一个使用 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;
}
switch结构根据参数"method"调度请求。 我想改变它。我想为每个函数创建一个 REST API,每个函数都有它的 URI。所以没有参数"method"。
有人可以给我提示吗?我必须为每个 REST 创建一个文件 API?第一次在php.
中制作REST API非常感谢。
有几种方法可以实现这一点。我个人更喜欢通过 URI 路由 [1] 来分派请求。如果 URI 路由不是一个选项,我会实现 lookup table 来分派请求。例如,如果有多个资源:
/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']);
}
我想这个简化的例子会给你一些提示。