当前位置: 首页 > 面试题库 >

如何建立RESTful API?

松俊才
2023-03-14
问题内容

问题是这样的:我有一个在PHP服务器上运行的Web应用程序。我想为此构建一个REST API。
我进行了一些研究,发现REST api使用带有身份验证密钥(不一定)的某些URI的HTTP方法(GET,POST
…),并且信息以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”。



 类似资料:
  • 问题内容: 假设我要在5台计算机上运行Elasticsearch集群,并且它们都连接到共享驱动器。我将Elasticsearch的一个副本放到了该共享驱动器上,以便所有三个都可以看到它。我是否只是在我所有机器上的共享驱动器上启动Elasticsearch,并且集群将自动发挥作用?还是我必须配置特定设置以使Elasticsearch意识到它可以在5台计算机上运行?如果是这样,相关的设置是什么?我应该

  • 问题内容: 如何安排Jenkins构建,使其只能在每天的特定时间构建? 例如从下午4点开始 我的理解是:0分钟,每个月的星期一至星期日下午4点,但是它每分钟生成一次:( 如有任何建议,我将不胜感激。谢谢! 问题答案: 请阅读其他答案和评论,还有更多的信息和所描述的细微差别(哈希函数?),我在回答此问题时不知道。 根据詹金斯自己对计划任务的帮助(“?”按钮),指定了5个字段: 该字段遵循cron的语

  • 我有以下js代码: 下面的服务器代码(最后一行调用它): 有时前端会忽略

  • 在workerman中建立udp服务很简单,类似如下代码 $udp_worker = new Worker('udp://127.0.0.1:9090'); $udp_worker->onMessage = function($connection, $data){ var_dump($data); $connection->send('get'); }; Worker::runA

  • 问题内容: 我正在用StringBuilder构建一个String 然后我建立一个网址 然后我尝试连接 但是从我得到的结果来看,URL似乎不正确。就像某些参数被错误地传递了一样。这就是为什么我认为问题出在StringBuilder中。 问题出在我尝试传递的双参数中。 然后我把它放在URL中。但是,如果我将其作为字符串给出,则结果是正确的。 是否需要UrlEncoding?我将尝试以下建议。 问题答

  • 我想构建一个WAR文件(然后将其部署到Tomcat)。因此,作为练习,我在IDEA Intellij中使用Gradle开始了一个新的Spring启动项目。之后,我在文件中应用了这个插件,比如这个。 问题是,当我尝试在终端中运行时,没有得到war文件!唯一发生的事情是,它将生成一个,其中包含3个子组件、和,但在这些组件中没有战争。 我应该怎么做才能获得WAR文件?我看过这段视频,但这家伙使用Mave