适用于Restful API的适配器代理

时间:2013-07-03 17:00:18

标签: rest proxy adapter

这是一个普遍的“可用的技术”问题。

我的公司提供带有RESTful API的Web应用程序。但是,它对我的​​需求来说太慢了,而且有些结果是笨拙的。

enter image description here

我想用代理/适配器服务器包装他们的restful服务器,所以当你连接到代理时,你得到了我想要的希望的RESTful API。

enter image description here

所以它需要做一些事情:

  • 通过大多数请求
  • 缓存一些请求
  • 在原始服务器上执行一些额外请求以检测请求是否可缓存

enter image description here

例如:记录中有一个字段请求:GET / records / id / field可能很慢,但是指纹请求GET / records / id / fingerprint总是很快。如果指纹feedbeef存在GET / records / 1 / field2的缓存,那么我需要在提供缓存版本之前检查原始服务器是否仍具有指纹feed beef

  • 修复某些回复的标题 - 例如content-type,基于路径
  • 对某些大型内容进行流处理,例如

GET / records / id / attachments / 1234

enter image description here

以文本格式返回100Mb日志文件

从文件中删除空字符 可选地重新编码日志以过滤掉不相关的行,从而减少客户端的负载 缓存过滤后的版本以供以后的请求使用。


虽然我可以修改客户端以实现此功能,但这些代码不能重复用于其他客户端(不同语言),并使客户端逻辑复杂化。


我看看clojure / ring是否能够做到这一点,虽然有一个很好的小代理中间件,但据我所知,它不能处理流媒体内容 - 整个100Mb必须下载。此外,它还没有包含任何缓存逻辑。


我看一下鱿鱼是否可以做到,但我对这项技术并不熟悉,而且似乎主要关注的是传递请求而不是动态修改它们。


我正在寻找提示,我可能会找到正确的技术来实现这一点。如果学习一门新语言让我能够访问一种非常简单的方法,那么我主要是语言无关。

3 个答案:

答案 0 :(得分:1)

我相信您应该选择一个更容易实现自定义业务逻辑的平台。以下Web应用程序框架提供了与REST API的轻松连接,并允许您创建可用作REST代理的Web应用程序:

我对Play更熟悉,我知道它提供了一些有用的缓存工具,并且还可以通过一些插件进行扩展。

如果您熟悉Scala,也可以查看Finagle。它是一个框架构建,是Twitter的基础架构团队,提供与协议无关的连接。 REST到REST代理可能有点过分,但它提供了您可能觉得有用的抽象。

您还可以查看一些第三方服务,例如Apitools,它允许以编程方式创建代理(在lua中)。 Apirise是一项类似的服务(其中我是联合创始人),打算通过用户友好的用户界面提供类似的功能。

答案 1 :(得分:1)

Beeceptor完全符合您的要求。它插入您的网络应用程序和原始API之间以路由请求。

  • 对于缓存一些响应的用例,您可以创建规则。这样它就不会达到原始端点。
  • 可以模拟对原始API的请求,您可以检查响应
  • 您可以模拟延迟。

(注意:它是一个无耻的插件,我是Beeceptor的作者,并认为它应该帮助你和其他开发人员。)

答案 2 :(得分:0)

https://github.com/nodejitsu/node-http-proxy看起来很有用 - 虽然我还不知道它是否可以流转码进行转码。