0

我目前正在开发一个将使用大量 ajax 进行数据检索的 Web 应用程序。只有在用户通过身份验证后,才能访问数据的某些部分。我希望将来有一个易于使用的 API 用于其他应用程序,但目前 API 的唯一用途是驱动 Web 应用程序。

与更定制的传统 API 相比,我实现 REST API 是否值得?

我已经研究过使用休息,到目前为止,我发现了以下内容

  • 由于服务器不存储状态,用户身份验证会更加困难
  • api 将无法在同一个请求中提供多个数据项,从而导致更大的开销
  • Rest api 将具有更大的可扩展性
4

1 回答 1

2

好吧,你已经给出了我能想到的 3 个最好的理由来回答你的问题。它归结为只有你才能对这些问题给出的答案。

我的方法是在我们的每个客户站点中为“他们的”东西提供一个“迷你”API,而我们的“主”API 则成为超越“只是他们的”的通用或重要功能的存储库。它们都建立在相同的基础上,因此可以根据需要轻松切换和交换它们。

此外,通过将结果编码为 json,我们能够在一次调用中返回很多很多数据项(如果需要,可以同时返回整个表的列)。如果您想看看他们是谁做的,我建议您查看Luracast 的 ReSTLER - 这是一个不错的起点。

编辑显示非常简单的多值返回:

if(is_array($result)) {
    echo json_encode(array_values($result));
}else{
    echo json_encode($result);
}

使用 Luracast ReSTLer,此代码将在一次调用中返回 PHPInfo 包含的所有内容:

    ob_start();
    phpinfo($module);
    $info_arr = array();
    $info_lines = explode("\n", strip_tags(ob_get_clean(), "<tr><td><h2>"));
    $cat = "General";
    foreach($info_lines as $line)
    {
        preg_match("~<h2>(.*)</h2>~", $line, $title) ? $cat = $title[1] : null;
        if(preg_match("~<tr><td[^>]+>([^<]*)</td><td[^>]+>([^<]*)</td></tr>~", $line, $val))
        {
            $info_arr[$cat][$val[1]] = $val[2];
        }
        elseif(preg_match("~<tr><td[^>]+>([^<]*)</td><td[^>]+>([^<]*)</td><td[^>]+>([^<]*)</td></tr>~", $line, $val))
        {
            $info_arr[$cat][$val[1]] = array("local" => $val[2], "master" => $val[3]);
        }
    }
    return Utilities::arrayToObject($info_arr);
于 2012-06-02T14:18:50.063 回答