php - 如何构建 RESTful API?

标签 php authentication rest

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

我的问题是:

  1. 作为应用的开发者,我该如何构建这些 URI?我需要在那个 URI 上编写 PHP 代码吗?
  2. 如何构建 JSON 对象以作为响应返回?

最佳答案

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

有 2 个文件 client.phpapi.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/

相关文章:

azure - 将 localhost 添加到 Azure AD/应用程序注册重定向 URL 是否存在安全风险?

laravel - 无模型的授权策略

php - 使用带有 php 的 https 构建安全登录 require 或 include

java - 什么是好的嵌入式java应用服务器

javascript - 如何在javascript中连接php数据库文件?

php - 使用mysqli登录系统

java - Jersey Rest 服务何时实际启动/关闭?

facebook - 上传照片 Rest API 而不张贴到墙上

php - 如何在 Laravel 中合并两个请求

php - 获取 WooCommerce 属性值 (url) 以将其用作 href 链接