通过传递参数从服务器获取响应

时间:2013-07-04 16:38:40

标签: php web-services

有没有更好的方法来完成这个例子?我的意思是我的简单例子,以下是良好的实践,以及如何在现实世界中使用它?我知道我的有点过于基本,但我正在努力获得网络服务的基本概念。

由于

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));

1 个答案:

答案 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服务,因为有人可以构建它们。 最佳方式取决于您的需求以及将来升级和维护它的难易程度。