适用于Restful API的适配器代理

这是一个普遍的’什么技术可用’的问题.

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

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

所以它需要做一些事情:

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

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

>修复某些回复的标题 – 例如内容类型,基于路径
>例如,对某些大型内容进行流处理

GET / records / id / attachments / 1234

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

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

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

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

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

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

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

> Play framework(Java Scala)
> express Node.js(Javascript)
> Sinatra(ruby)

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

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

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

点赞