是否需要使用RESTful Api作为自定义Web应用程序后端?

时间:2012-06-02 13:54:12

标签: php ajax rest

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

对我来说,实施REST API与更加自定义的传统API是否值得?

我已经研究过使用休息,到目前为止我已经找到了以下

  • 由于服务器未存储状态
  • ,用户身份验证会更加困难
  • api将无法在同一请求中为多个数据项提供服务,从而导致更大的开销
  • 休息api将是更大范围的扩展

1 个答案:

答案 0 :(得分:2)

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

我的方法是在我们的每个客户站点都有一个“迷你”API用于“他们”的东西,我们的“主要”API成为常见或重要功能的存储库,超出“仅仅他们的”。它们都建立在相同的基础上,因此在必要时切换和交换它们非常容易。

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

编辑显示非常 simnple多值返回:

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