有没有更好的方法来完成这个例子?我的意思是我的简单例子,以下是良好的实践,以及如何在现实世界中使用它?我知道我的有点过于基本,但我正在努力获得网络服务的基本概念。
由于
client.php:
$word = 'A';
$url = 'http://localhost/server.php?word=' . $word;
$data = @file_get_contents($url);
$result = json_decode($data);
echo '<pre>'; print_r($result);
server.php:
//If user request is not valid
if ($_SERVER['REQUEST_METHOD'] != 'GET')
{
exit(json_encode('Invalid HTTP request'));
}
//If URL not set with parameter(s)
if (! isset($_GET['word']))
{
exit(json_encode('Invalid URL parameter'));
}
if ($_GET['word'] == 'A')
{
$array = array('aa', 'ab', 'ac', 'ad', 'ae');
}
else
{
$array = array('bb', 'bc', 'bd', 'be', 'bf');
}
exit(json_encode($array));
答案 0 :(得分:1)
如果您只想要GET请求,那么本身的内容并没有错。有没有更好的方式?肯定有不同的方式可能会被视为更好,具体取决于您需要做什么。既然您试图了解Web服务的基本概念,我将解决这个问题。
有许多方法可以实现Web服务,其中大部分都是基本应用程序的过度杀伤。我认为最简单的理解和实现是REST。
REST是一种用于设计网络应用程序的架构风格。 这个想法是,而不是使用CORBA之类的复杂机制, 用于在机器之间连接的RPC或SOAP,用于制作简单的HTTP 机器之间的通话。 - Learn REST: A Tutorial
另请看:
还有其他方法(例如 SOAP)我没有经验,所以我不能聪明地谈论它们或它们的优点。
接下来要考虑的是你的API。我理解你的问题中的代码是一个例子,所以我会这样使用它。你所拥有的东西告诉客户没有关于返回的数据。它可以是数组或字符串。理想情况下,您将围绕要返回的数据创建一些结构。例如,您可能会返回一个错误标志,指示客户端是否发生错误。
您的服务器代码可以写成:
<?php
$data = new stdClass;
$data->error = false;
if ($_SERVER['REQUEST_METHOD'] != 'GET') {
$data->error = true;
$data->response = 'Invalid HTTP request';
}
if (!isset($_GET['word'])) {
$data->error = true;
$data->response = 'Invalid URL parameter';
}
if (!$data->error) {
if ($_GET['word'] == 'A') {
$data->response = array('aa', 'ab', 'ac', 'ad', 'ae');
} else {
$data->response = array('bb', 'bc', 'bd', 'be', 'bf');
}
}
header('Content-Type: application/json; charset=utf-8');
echo json_encode($data);
?>
有错误的回应
{
"error": true,
"response": "Invalid URL parameter"
}
无错误的响应
{
"error": false,
"response": [
"aa",
"ab",
"ac",
"ad",
"ae"
]
}
现在,客户端代码可以确定是否发生了错误以及错误是什么。使用这个简单的API,我知道如果发生错误,响应将是描述错误的字符串。如果没有错误,那么我可以假设响应将是一个数组。至于实际数据,我通常使用对象或关联数组,以便每个数据都有一个标签。
有关详细信息,请参阅:How to Design a Good API & Why it Matters(视频讲座)
最终,有许多方法可以构建Web服务,因为有人可以构建它们。 最佳方式取决于您的需求以及将来升级和维护它的难易程度。