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