【问题标题】:Move from JSON-RPC to simple RESTful API从 JSON-RPC 迁移到简单的 RESTful API
【发布时间】:2015-10-02 09:28:13
【问题描述】:

我有一个使用 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。所以没有参数“方法”。

谁能给我一个提示?我必须为每个 REST API 创建一个文件吗?第一次在php中制作REST API。

非常感谢。

【问题讨论】:

    标签: php web-services rest json-rpc


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2023-04-04
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-04
      • 2011-06-07
      • 1970-01-01
      相关资源
      最近更新 更多