在webapp中实现自定义RESTful接口时需要考虑哪些事项?

时间:2011-05-31 16:30:01

标签: json web-applications rest web-crawler

我目前正在探索构建一个不太复杂的Web应用程序的不同选项,其中涉及一些基于角色的访问控制。此外,必须对少数(约5个)不同数据库表执行读/写操作。

我一直在想着创建一个基于JSON的API,其中一个或几个PHP文件充当数据库之上的一个层。 webapp本身将是完全“静态”的HTML和javascript,使用XHR从服务器检索数据,并最终将内容写回其中。一个例子是当前的Twitter主页 - 当查看用户的时间线时,初始HTML中实际上没有传递推文:它都是由一些漂亮的javascript提取的。

我看到的一个重要缺点是,Googlebot很难将此类网站编入索引。该应用的多个组件应该像常规的已发布内容一样运行,这些内容可以毫无问题地显示在Google搜索结果中。例如,Twitter如何实现这一目标?当网络抓取工具接近他们的服务器时,他们是否提供不同的页面?

另外,我想听听一些关于这个概念的想法...对我而言,这似乎是一种将业务逻辑与演示分离的非常有趣和干净的方式,但是,一如既往,我可能会非常错误:-)

1 个答案:

答案 0 :(得分:3)

嗯,这是一个需要大答案的全球性问题:)

首先,关于你的Twitter问题,他们使用hashbang uri风格。 例如,当您转到twitter.com/cx42net时,系统会自动将您重定向到twitter.com/#!/cx42net

如果它是抓取工具,例如Google机器人,则抓取工具会#!更改?_escaped_fragment=。 对于Twitter,它会产生:http://twitter.com/?_escaped_fragment=/cx42net

我不会更深入地了解细节,为了避免出错,一个好的链接是首选,所以我们走了:SEOMoz: How To: Allow Google to Crawl your AJAX Content

现在,对于RESTful中的Web应用程序,我非常喜欢将客户端与服务器分离的想法,我也尝试这样做。

您正在谈论基于角色的访问,这意味着您必须识别您的用户才能允许/拒绝访问您的api的某些部分。 有两个关于如何在API上验证用户身份的学校:

  • “使用基本HTTP身份验证”学校
  • “使用OAuth身份验证/授权”学校

前者实现起来非常简单,但我建议您通过HTTPS完成,因为密码是通过网络明确发送的。

后者很棒,但实施起来更复杂。

但事实上,它可能是您正在寻找的完美之处,因为尽管您对用户进行了身份验证,但您可以让他们访问您API的某些部分并将其限制在其他部分。一个常见的例子是Facebook / Twitter如何为此工作,我相信你已经允许第三方应用程序使用你的Twitter / Facebook帐户。

现在,使用OAuth通常会强制您在数据库中存储登录/密码表。您可以使用OpenID,但这比简化用户更令人头疼: 您必须从OpenId提供商(如Google)对其进行身份验证,然后重定向到您的API以允许访问(如果这是第一次),那么您的用户将重定向到您的应用程序。

最后,我引用Fred Wilson10 Golden Principles of Successful Web App是:

  • 速度
  • Instant Utility
  • 少即是多
  • 使其可编程
  • 清洁
  • ...

嗯,现在这样做,如果我有任何其他想法,我会编辑答案并添加评论。