gpt4 book ai didi

javascript - 如何在 Backbone Marionette 这样的单页框架中使用公共(public)的、跨域的 json 数据?

转载 作者:行者123 更新时间:2023-11-30 06:27:31 25 4
gpt4 key购买 nike

老兄,这是一个很难正确陈述的问题,因为我在“公共(public) API”和“跨域”领域的知识有很多空白。

也许最好的方法就是举一个真实世界的例子:

我有一个主干 Marionette 应用程序。这很酷。它正在做很多我想让它做的事情。

我还有一些非常酷的图表 - 一个商业 HTML5 图表库。我想在我的 bb marionette 应用程序中使用图表库。

这是关键。我想在图表中显示的数据不是我的。这是纽约时报 API (http://developer.nytimes.com/docs) 提供的竞选财务数据。它也是其他公共(public) api 中提供的其他数据。

在我的脑海里,我认为我只需将我的 bb marionette 数据模型连接到纽约时报提供的 json URL,调用 model.fetch(),解析返回的 json 数据,将数据绑定(bind)到我的图表,然后我'我是金色的。但是无法获取数据,因为这是一个跨域请求——在 JavaScript 中是不行的。所以人们说“简单,只需实现 cors”。不能那样做。我不控制纽约时报的服务器,所以我不能在资源的标题中添加“允许访问控制”。我尝试使用的其他公共(public) api 也是如此。我认为“实现 cors”适用于“您”控制服务器的情况。

所以其他人写道“......你可以在你的网站上编写一个调用纽约时报 API 的服务器端包装器。然后你让你的客户端 JavaScript 调用你的包装器。因为它们在同一个域中,你避免了跨站点脚本问题。

您的客户端代码 --> 您的服务器端包装器 --> NYT API

理论上是有道理的。此类 API 的发布者(如纽约时报、天气服务或金融数据服务等)是否希望人们在说“我们的 API 是公开的”时这样做?这是假设的工作流程 - 使用您的服务器应用程序并中继到您的 Marionette 客户端应用程序吗?这是执行此操作的“bb Marionetty”方法吗?关于所涉及的约定,我在这里缺少什么?如果不通过客户端 JavaScript 调用(如 model.fetch()),开发人员通常如何使用公共(public) API?

我的 bb marionette 应用程序的服务器后端是 ASP.NET Web API。我应该如何将我的 bb Marionette 模型连接到我自己的 ASP.NET Web API 并让我的 Web API 调用纽约时报服务?我对一般“公共(public) API”原则的理解在这里并不扎实,因此我无法得出最佳实践。

最佳答案

我认为他们将其称为“公共(public) API”是有道理的,因为它对每个用户都是开放的。无需使用特殊帐户或凭据登录。

问题来自客户端,在本例中是浏览器。这是 Same-origin policy出于安全考虑。这不是“在 Javascript 中不行”,您也可以在 node.js 环境中执行此操作。

您解决这个问题的方法是一个名为代理的好方法,您可以从this article 获得更多详细信息。 .它被许多网站普遍使用。

另一种方式是JSONP .大多数 js 库/框架(例如 JQuery)都有一个包装器。它有一些限制,但无需额外的服务器端代码即可完成。

在您的情况下,我认为代理几乎是最佳实践(也许有更好的实践)。您可以精细地控制结果、处理错误、修饰它们,甚至将它们保留在您的网页中。

关于javascript - 如何在 Backbone Marionette 这样的单页框架中使用公共(public)的、跨域的 json 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20209366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com