2

有没有更好的方法来完成这个例子?我的意思是我下面的简单例子是好的做法,以及它在现实世界中是如何使用的?我知道我的有点太基础了,但我正在尝试了解 Web 服务的基本概念。

谢谢

客户端.php:

$word       = 'A';
$url        = 'http://localhost/server.php?word=' . $word;
$data       = @file_get_contents($url);
$result     = json_decode($data);

echo '<pre>'; print_r($result);

服务器.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));
4

1 回答 1

1

如果您只期望 GET 请求,那么您所拥有的本身并没有错。有没有更好的方法?根据您需要做什么,当然有不同的方法可能被认为更好。由于您试图了解 Web 服务的基本概念,我将解决这个问题。

实现 Web 服务的方法有很多种,但其中大多数方法对于基本应用程序来说都是多余的。我认为最容易理解和实现的是 REST。

REST 是一种用于设计网络应用程序的架构风格。这个想法是,不是使用复杂的机制,如 CORBA、RPC 或 SOAP 来连接机器,而是使用简单的 HTTP 在机器之间进行调用。—学习 REST:教程

也看看:

还有其他我没有经验的方法(例如 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,我知道如果发生错误,响应将是描述错误的字符串。如果没有错误,那么我可以假设响应将是一个数组。至于实际数据,我一般使用对象或关联数组,这样每条数据都有一个标签。

有关更多信息,请参阅:如何设计一个好的 API 及其重要性视频讲座

最终,构建 Web 服务的方法与构建 Web 服务的人一样多。最好的方法取决于您的需求以及将来升级和维护它的难易程度。

于 2013-07-04T18:37:39.080 回答