创建一个插件,在其他网站上添加我的网站功能

时间:2012-04-05 17:27:27

标签: javascript api plugins iframe oauth

我有一个带有数据库的网站A和某个对象的搜索引擎,用户可以在我的网站上创建帐户,然后为这些对象添加注释。 我需要创建一个类似插件的api,这将导致在另一个网站B上使用搜索引擎。

我计划像fb或者twitter插件那样做:想要使用我的api的开发者只需要在网站B上添加一行js和一行html,然后它就会加载插件。但我想知道如何组织它。

这就是我猜到的:我在我的网站A上创建一个页面,将搜索引入它。我创建了一个js,它会在一个iframe上加载这个页面,在开发者页面(网站B)上,在他添加的div下面有我的插件。然后我实现了OAuth 2(带有提供者等等,所以人们可以发布请求来改变我的数据库),而作为网站B之一的人将能够在网站B上发布对搜索引擎对象的评论。

实际上它似乎与fb评论插件流程相同,但它似乎太复杂了所有这些东西。这是正确的方法吗?任何人都可以详细说明我在实施过程中应该面对的问题吗?

5 个答案:

答案 0 :(得分:1)

你需要开发一个合适的API,它可以返回JSON中的搜索结果(如果你想取悦每个人,还可以返回XML)。这已经为其他开发人员提供了使用您的站点功能的能力,这主要是后端工作。所以他们可以开发自己的小部件。

要将您自己的小部件开发为搜索小部件,您不需要那么多,您只需要一个设置目标(可能是必需元素)或/和您通过的初始化方法(开发人员更灵活)目标。

绑定搜索按钮,搜索术语搜索,调用您的API,当您获得结果时显示它们或/并执行自定义回调传递结果作为参数,灵活性)

如果你的javascript运行良好,你也可以在那里创建一个小API,以便通过javascript使用你的API。然后甚至可以轻松地将它移植到jQuery插件或类似的东西。

在提供JSON时,请务必记住为API设置标题以允许跨域或转换为jsonp。

答案 1 :(得分:1)

你的问题意味着一个架构方向,但这种选择的要求太宽泛了。我会先缩小你的要求。 OAuth 2.0可能有助于满足您的需求,但至少要问自己以下几点:

  • 需要保护哪些用户数据?
  • 需要哪些第三方数据访问?什么功能?
  • 如果您使用OAuth 2.0,您是否准备遵循仍在变化的规范?您是否愿意成为身份验证提供商?
  • 可接受哪些服务器端语言/平台?
  • 还有哪些其他安全因素对您很重要? (例如社交分享,第三方应用信任级别......)
  • 您愿意依赖第三方工具多少钱?或者自己写一下?

我同意在FB或Twitter或Google上设计你的设计并不是一个坏主意,因为他们已经做了这类事情。

您可以查看新书Getting Started with OAuth 2.0

答案 2 :(得分:0)

以下是向用户提供自定义搜索的两种简单方法。

最简单的选择是执行Google的工作 - 您网站上的搜索将遵循简单明确的API - 以便

www.mysite.com/search?q=keyword1+keyword2

以HTML格式返回结果列表。

然后,您会告诉您的用户包含一小段HTML:

<form action="http://www.mysite.com/search" method="get">
   <input name="q" type="text" value="Search">
</form>

虽然在这个时刻,你可能希望用更好的搜索选项,搜索表单的javascript包装器,返回数据的JSON或XML格式,安全性,更好的解决方案来改善考虑到这些。

另一种方法是使用javascript并使用回调工具提供数据,因此URL:

www.mysite.com/js-search?q=keyword1+keyword2&callback=someHandle

将返回包含JSON数据的javascript文件,并在加载时调用“someHandle”。使用您的API的开发人员必须编写自己的方式来生成请求和处理程序。请记住,由于XSS,查询可能来自您的合作伙伴的服务器。最简单的可能是让您自己的搜索提供简单且记录良好,以便其他人可以利用它。

答案 3 :(得分:0)

如果您允许网站B在后台向网站A发出POST请求,那么OAuth 2可能会有所帮助。

相反,如果您希望允许访问网站B的用户发布评论,那么带有指向网站A的表单的iframe就足够了。

答案 4 :(得分:0)

更简单的赌注,但不一定是最明智的,是创建一些使用JSONP在您的网站上调用的JS。

iFrames不是W3C标准,尽可能避免使用它们。使用一些事件对Javascript进行编码,这些事件将对您自己的服务器执行一些JSONP调用,并相应地在Javascript中返回结果,因此它可以与页面进行交互。