我正在创建一个使用 3rd 方 API(Web 服务)作为数据源的 ASP.NET MVC 网站。它是只读的,迄今为止,个人使用桌面应用程序(大多数在 C# 中)都可以访问它。我想通过网站使用这个 API,以便集中信息并为用户提供历史信息,自动执行某些重复性任务,并更轻松地允许用户之间共享信息。
今天的桌面客户端会遇到限制,如果您使用客户端向 API 发出重复请求,您的 IP 将被限制和/或禁止。我认为如果我从我的网站向 API 发出请求,它的 IP 将在它看到任何重大用途的那一刻被禁止。
假设我无法与 API 所有者一起解决问题。解决此问题的最简单方法可能是使用 AJAX 进行所有 API 访问。当用户访问该网站时,他使用 AJAX 向 API 发出请求,然后转身将它们发布到我的网站。我不喜欢这个想法有多种原因——首先,它会很慢,其次,我不能保证发送到我网站的数据是真实的。无论出于何种原因,恶意用户都可能向我发送不良信息。
所以我认为一个更好的主意是建立一个中间人。用户仍将被迫发出 AJAX 请求,但他们会将其发送到代理或我控制的其他东西,然后将其转发到真正的 API 并拦截响应,因此我可以更加确定我检索到的数据是真实的。
是否可以创建这样的“代理”?它会带来什么?我想使用 .NET 技术来实现,但我对任何想法都持开放态度。
编辑:似乎我使用“代理”这个词引起了混淆。我不想要代理,我想要的是允许我拦截来自 API 的响应的传递。我可以让客户端发出请求然后上传它,但我不想信任客户端,我想信任 API。
让我用简短的形式解释一下。用户机器上有一个客户端,它可以向 API 发出请求以获取当前信息。我想创建一个做同样事情的网站,但我正在考虑 API Web 服务可能会注意到,虽然以前它收到来自十个不同 IP 的十个用户的十个请求,但现在它收到十个请求十个来自一个 IP 的用户并阻止该 IP 将其视为机器人,即使每个请求都是由用户请求启动的,就像以前一样。解决此问题的最简单方法是让用户提出请求,然后将响应上传给我,但如果我这样做,我将被迫盲目地接受来自客户端的数据,这对于任何网站在任何情况下都是一个巨大的禁忌. 相反,如果我可以放置一些东西,将请求转发到保留用户 IP 的 API,但也能够拦截响应,从而证明数据是权威的,那将是首选。但是,我想不出一种软件机制来做到这一点——似乎需要在不同的层上完成。
至于法律问题,这是一个广泛使用的 API,有许多应用程序和用户(我发现还有其他网站使用该 API),但除了 API 技术中的论坛帖子之外,我无法找到任何法律信息,例如服务条款支持部分相当于“不要重复请求,遵守我们的缓存指令”等。我找不到任何表明这是非法或不正确使用 Web 服务的内容。