问题是这样的:
我有一个在PHP服务器上运行的Web应用程序。我想为此构建一个REST api。
我进行了一些研究,发现REST api对带有身份验证 key (不一定)的某些URI使用HTTP方法(GET,POST ...),并且信息以HTTP响应的形式显示为XML或JSON信息。 (我宁愿使用JSON)。

我的问题是:

  • 作为应用程序的开发人员,我如何构建这些URI?我需要在该URI上编写PHP代码吗?
  • 如何构建JSON对象以作为响应返回?
  • 最佳答案

    这是简单php中的一个非常简单的示例。

    有2个文件 client.php api.php 。我将两个文件放在相同的url上:http://localhost:8888/,因此您必须将链接更改为您自己的url。 (该文件可以在两个不同的服务器上)。

    这只是一个例子,它非常快捷,肮脏,而且自从我完成php以来已经很长时间了。但这就是api的想法。

    client.php

    <?php
    
    /*** this is the client ***/
    
    
    if (isset($_GET["action"]) && isset($_GET["id"]) && $_GET["action"] == "get_user") // if the get parameter action is get_user and if the id is set, call the api to get the user information
    {
      $user_info = file_get_contents('http://localhost:8888/api.php?action=get_user&id=' . $_GET["id"]);
      $user_info = json_decode($user_info, true);
    
      // THAT IS VERY QUICK AND DIRTY !!!!!
      ?>
        <table>
          <tr>
            <td>Name: </td><td> <?php echo $user_info["last_name"] ?></td>
          </tr>
          <tr>
            <td>First Name: </td><td> <?php echo $user_info["first_name"] ?></td>
          </tr>
          <tr>
            <td>Age: </td><td> <?php echo $user_info["age"] ?></td>
          </tr>
        </table>
        <a href="http://localhost:8888/client.php?action=get_userlist" alt="user list">Return to the user list</a>
      <?php
    }
    else // else take the user list
    {
      $user_list = file_get_contents('http://localhost:8888/api.php?action=get_user_list');
      $user_list = json_decode($user_list, true);
      // THAT IS VERY QUICK AND DIRTY !!!!!
      ?>
        <ul>
        <?php foreach ($user_list as $user): ?>
          <li>
            <a href=<?php echo "http://localhost:8888/client.php?action=get_user&id=" . $user["id"]  ?> alt=<?php echo "user_" . $user_["id"] ?>><?php echo $user["name"] ?></a>
        </li>
        <?php endforeach; ?>
        </ul>
      <?php
    }
    
    ?>
    

    api.php
    <?php
    
    // This is the API to possibility show the user list, and show a specific user by action.
    
    function get_user_by_id($id)
    {
      $user_info = array();
    
      // make a call in db.
      switch ($id){
        case 1:
          $user_info = array("first_name" => "Marc", "last_name" => "Simon", "age" => 21); // let's say first_name, last_name, age
          break;
        case 2:
          $user_info = array("first_name" => "Frederic", "last_name" => "Zannetie", "age" => 24);
          break;
        case 3:
          $user_info = array("first_name" => "Laure", "last_name" => "Carbonnel", "age" => 45);
          break;
      }
    
      return $user_info;
    }
    
    function get_user_list()
    {
      $user_list = array(array("id" => 1, "name" => "Simon"), array("id" => 2, "name" => "Zannetie"), array("id" => 3, "name" => "Carbonnel")); // call in db, here I make a list of 3 users.
    
      return $user_list;
    }
    
    $possible_url = array("get_user_list", "get_user");
    
    $value = "An error has occurred";
    
    if (isset($_GET["action"]) && in_array($_GET["action"], $possible_url))
    {
      switch ($_GET["action"])
        {
          case "get_user_list":
            $value = get_user_list();
            break;
          case "get_user":
            if (isset($_GET["id"]))
              $value = get_user_by_id($_GET["id"]);
            else
              $value = "Missing argument";
            break;
        }
    }
    
    exit(json_encode($value));
    
    ?>
    

    在此示例中,我没有对数据库进行任何调用,但是通常这是您应该执行的操作。您还应将“file_get_contents”功能替换为“curl”。

    关于php - 如何构建RESTful API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4684075/

    10-12 12:52
    查看更多