这是一个普遍的“可用的技术”问题。
我的公司提供带有RESTful API的Web应用程序。但是,它对我的需求来说太慢了,而且有些结果是笨拙的。
我想用代理/适配器服务器包装他们的restful服务器,所以当你连接到代理时,你得到了我想要的希望的RESTful API。
所以它需要做一些事情:
例如:记录中有一个字段请求:GET / records / id / field可能很慢,但是指纹请求GET / records / id / fingerprint总是很快。如果指纹feedbeef
存在GET / records / 1 / field2的缓存,那么我需要在提供缓存版本之前检查原始服务器是否仍具有指纹feed beef
。
GET / records / id / attachments / 1234
以文本格式返回100Mb日志文件
从文件中删除空字符 可选地重新编码日志以过滤掉不相关的行,从而减少客户端的负载 缓存过滤后的版本以供以后的请求使用。
虽然我可以修改客户端以实现此功能,但这些代码不能重复用于其他客户端(不同语言),并使客户端逻辑复杂化。
我看看clojure / ring是否能够做到这一点,虽然有一个很好的小代理中间件,但据我所知,它不能处理流媒体内容 - 整个100Mb必须下载。此外,它还没有包含任何缓存逻辑。
我看一下鱿鱼是否可以做到,但我对这项技术并不熟悉,而且似乎主要关注的是传递请求而不是动态修改它们。
我正在寻找提示,我可能会找到正确的技术来实现这一点。如果学习一门新语言让我能够访问一种非常简单的方法,那么我主要是语言无关。
答案 0 :(得分:1)
我相信您应该选择一个更容易实现自定义业务逻辑的平台。以下Web应用程序框架提供了与REST API的轻松连接,并允许您创建可用作REST代理的Web应用程序:
我对Play更熟悉,我知道它提供了一些有用的缓存工具,并且还可以通过一些插件进行扩展。
如果您熟悉Scala,也可以查看Finagle。它是一个框架构建,是Twitter的基础架构团队,提供与协议无关的连接。 REST到REST代理可能有点过分,但它提供了您可能觉得有用的抽象。
您还可以查看一些第三方服务,例如Apitools,它允许以编程方式创建代理(在lua中)。 Apirise是一项类似的服务(其中我是联合创始人),打算通过用户友好的用户界面提供类似的功能。
答案 1 :(得分:1)
Beeceptor完全符合您的要求。它插入您的网络应用程序和原始API之间以路由请求。
(注意:它是一个无耻的插件,我是Beeceptor的作者,并认为它应该帮助你和其他开发人员。)
答案 2 :(得分:0)
https://github.com/nodejitsu/node-http-proxy看起来很有用 - 虽然我还不知道它是否可以流转码进行转码。