我目前正在探索构建一个不太复杂的Web应用程序的不同选项,其中涉及一些基于角色的访问控制。此外,必须对少数(约5个)不同数据库表执行读/写操作。
我一直在想着创建一个基于JSON的API,其中一个或几个PHP文件充当数据库之上的一个层。 webapp本身将是完全“静态”的HTML和javascript,使用XHR从服务器检索数据,并最终将内容写回其中。一个例子是当前的Twitter主页 - 当查看用户的时间线时,初始HTML中实际上没有传递推文:它都是由一些漂亮的javascript提取的。
我看到的一个重要缺点是,Googlebot很难将此类网站编入索引。该应用的多个组件应该像常规的已发布内容一样运行,这些内容可以毫无问题地显示在Google搜索结果中。例如,Twitter如何实现这一目标?当网络抓取工具接近他们的服务器时,他们是否提供不同的页面?
另外,我想听听一些关于这个概念的想法...对我而言,这似乎是一种将业务逻辑与演示分离的非常有趣和干净的方式,但是,一如既往,我可能会非常错误:-)
答案 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上验证用户身份的学校:
前者实现起来非常简单,但我建议您通过HTTPS完成,因为密码是通过网络明确发送的。
后者很棒,但实施起来更复杂。
但事实上,它可能是您正在寻找的完美之处,因为尽管您对用户进行了身份验证,但您可以让他们访问您API的某些部分并将其限制在其他部分。一个常见的例子是Facebook / Twitter如何为此工作,我相信你已经允许第三方应用程序使用你的Twitter / Facebook帐户。
现在,使用OAuth通常会强制您在数据库中存储登录/密码表。您可以使用OpenID,但这比简化用户更令人头疼: 您必须从OpenId提供商(如Google)对其进行身份验证,然后重定向到您的API以允许访问(如果这是第一次),那么您的用户将重定向到您的应用程序。
最后,我引用Fred Wilson,10 Golden Principles of Successful Web App是:
嗯,现在这样做,如果我有任何其他想法,我会编辑答案并添加评论。