【问题标题】:Create a plugin to add my website functionalities on another website创建一个插件以在另一个网站上添加我的网站功能
【发布时间】:2012-04-19 11:04:28
【问题描述】:

我有一个网站 A 有一个数据库和一些对象的搜索引擎,用户可以在我的网站上创建帐户然后为这些对象添加评论。 我需要用插件之类的东西创建一个 api,这将导致在另一个网站 B 上拥有搜索引擎。

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

这就是我的猜测:我在我的网站 A 上创建了一个页面,将搜索引擎放在上面。我创建了一个js,它将在开发者页面(网站B)上的iframe中加载这个页面,在他添加的div下拥有我的插件。然后我实现了 OAuth 2(使用提供者等,因此人们可以发布请求以更改我的数据库),并且网站 B 中的一个人将能够在网站 B 上对搜索引擎的对象发表评论。

其实好像和fb评论插件流程一样,但是做这些东西好像太复杂了。这是正确的方法吗?谁能详细说明我在实施过程中应该面临的问题?

【问题讨论】:

  • 您的问题非常广泛...请更具体...您尝试了什么?你被困在哪里了?您需要支持哪些浏览器?您的数据库/网站 A 的可扩展性如何(请注意,任何此类系统都会向 DDos 敞开大门)?
  • 你试过挥手代替写代码吗?
  • @Yahia 任何网络浏览器(桌面非移动设备)我已经尝试过:做了一个 json api 来访问我的数据,无论是否受保护(oauth2)。而且我想知道为我的搜索引擎提供一个“开箱即用”的插件是否简单,而不是告诉人们通过 api 写一些东西
  • @tahir 这种“插件”需要做一些跨域的东西,而这又只能通过 JSONP 实现,这本身并不是一件非常安全的事情......并且取决于浏览器/security 设置这可能有效也可能无效!再次:你的问题到底是什么?

标签: javascript api plugins iframe oauth


【解决方案1】:

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

要开发自己的小部件作为搜索小部件,您不需要那么多,您只需要一个设置目标(可能是必需的元素)或/和一个初始化方法(对开发人员来说更灵活),然后传递给它一个目标。

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

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

在提供 JSON 时,请务必记住为 API 设置标头以允许跨域或改为使用 jsonp。

【讨论】:

    【解决方案2】:

    您的问题暗示了架构方向,但要求太宽泛,无法做出这样的选择。我会先缩小你的要求。 OAuth 2.0 可能有助于满足您的需求,但请至少问问自己以下问题:

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

    我同意将您的设计建模为 FB、Twitter 或 Google 并不是一个坏主意,因为他们已经做过这种事情。

    你可以看看新书Getting Started with OAuth 2.0

    【讨论】:

      【解决方案3】:

      这里有两种让用户可以使用自定义搜索的简单方法。

      最简单的选择是按照 Google 的做法 - 您网站上的搜索将遵循一个简单、定义明确的 API - 这样

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

      以 HTML 格式返回结果列表。

      然后您会告诉您的用户包含 HTML 的 sn-p:

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

      这样就可以了,尽管此时您可能希望通过更好的搜索选项、用于搜索表单的 javascript 包装器、用于返回数据的 JSON 或 XML 格式、安全性、更好的 API 来改进事情考虑到这些。

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

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

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

          iFrame 不是 W3C 标准,请尽量避免使用它们。编写带有一些事件的 Javascript 代码,这些事件将对您自己的服务器进行一些 JSONP 调用,并相应地以 Javascript 的形式返回结果,以便它能够与页面进行交互。

          【讨论】:

            猜你喜欢
            • 2017-03-09
            • 1970-01-01
            • 1970-01-01
            • 2020-11-28
            • 2015-09-16
            • 2019-05-11
            • 2016-09-12
            • 2015-12-25
            • 1970-01-01
            相关资源
            最近更新 更多