如何构建RESTful API?
问题是这样的:我有一个运行在PHP服务器上的Web应用程序。 我想为它构建一个REST API。
我做了一些研究,我发现REST api使用HTTP方法(GET,POST ...)为某些URI提供了一个身份验证密钥(不一定),并且信息以HTTP或XML响应形式返回, (我宁愿JSON)。
我的问题是:
这是一个简单的php中的简单例子。
有2个文件client.php & api.php 。 我把这两个文件放在同一个网址: http://localhost:8888/
,所以你必须改变链接到你自己的网址。 (该文件可以位于两台不同的服务器上)。
这只是一个例子,它非常快速和肮脏,再加上它已经很长时间了,因为我已经完成了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));
?>
我没有为这个例子调用数据库,但通常这是你应该做的。 你还应该用“curl”替换“file_get_contents”函数。
在2013年,你应该使用像Silex或Slim这样的东西
Silex例如:
require_once __DIR__.'/../vendor/autoload.php';
$app = new SilexApplication();
$app->get('/hello/{name}', function($name) use($app) {
return 'Hello '.$app->escape($name);
});
$app->run();
苗条的例子:
$app = new SlimSlim();
$app->get('/hello/:name', function ($name) {
echo "Hello, $name";
});
$app->run();
这与创建普通网站几乎一样。
一个php网站的正常模式是:
使用api,只需在3和4之间添加一个新的步骤。在3之后,创建一个包含所需信息的数组。 在json中对此数组进行编码并退出或返回此值。
$info = array("info_1" => 1; "info_2" => "info_2" ... "info_n" => array(1,2,3));
exit(json_encode($info));
这一切都是为了api。 对于客户端,您可以通过url调用api。 如果api只能在打电话的情况下工作,我认为可以做一个简单的(检查,我通常使用curl)。
$info = file_get_contents(url);
$info = json_decode($info);
但是使用curl库执行get和post调用更常见。 你可以问我是否需要卷发帮助。
一旦从api获取信息,就可以执行4和5步骤。
查看json函数和file_get_contents的php文档。
卷曲:http://fr.php.net/manual/fr/ref.curl.php
编辑
不,等等,我不明白。 “php API页面”你是什么意思?
API只是您项目的创建/恢复。 你永远不会直接发送HTML结果(如果你正在创建一个网站)抛出一个API。 您可以通过url,api返回信息调用api,然后使用此信息创建最终结果。
例如:你想写一个说hello xxx的html页面。 但要获取用户的名称,您必须从api获取信息。
假设你的api有一个函数,它有user_id作为参数,并返回这个用户的名字(比方说getUserNameById(user_id)),并且你只能在像/ api / ulr / getUser / id这样的url上调用这个函数。
Function getUserNameById(user_id)
{
$userName = // call in db to get the user
exit(json_encode($userName)); // maybe return work as well.
}
从客户端你做
$username = file_get_contents(your/api/url/getUser/15); // You should normally use curl, but it simpler for the example
// So this function to this specifique url will call the api, and trigger the getUserNameById(user_id), whom give you the user name.
<html>
<body>
<p>hello <?php echo $username ?> </p>
</body>
</html>
所以客户端永远不会直接访问数据库,即api的角色。
这更清楚吗?
链接地址: http://www.djcxy.com/p/1253.html