这是一个普遍的“可用的技术”问题。
我的公司提供了一个带有 RESTful API 的 Web 应用程序。但是,它对我的需求来说太慢了,而且一些结果的格式很尴尬。
我想用代理/适配器服务器包装他们的 RESTful 服务器,所以当你连接到代理时,你会得到 RESTful API,我希望真正的 API 提供。
所以它需要做几件事:
- 通过大多数请求
- 缓存一些请求
- 在原始服务器上执行一些额外请求以检测请求是否可缓存
例如:记录中的字段请求: GET /records/id/field 可能很慢,但有一个指纹请求 GET /records/id/fingerprint 总是很快。如果存在指纹的 GET /records/1/field2 缓存feedbeef
,那么我需要feed beef
在提供缓存版本之前检查原始服务器是否仍然具有指纹。
- 修复一些响应的标题 - 例如内容类型,基于路径
- 对一些大型内容进行流处理,例如
获取/记录/id/附件/1234
以文本格式返回一个 100Mb 的日志文件
从文件中删除空字符可以选择重新编码日志以过滤掉不相关的行,从而减少客户端缓存过滤版本以供以后请求的负载。
虽然我可以修改客户端来实现这个功能,但是这样的代码不能被其他客户端(不同的语言)重用,并且使客户端逻辑复杂化。
我查看了 clojure/ring 是否可以做到这一点,虽然有一个不错的小代理中间件,但据我所知,它不能处理流媒体内容 - 整个 100Mb 都必须下载。而且它还不包括任何缓存逻辑。
我看了一下 squid 是否可以做到这一点,但我对这项技术并不熟悉,而且它似乎主要关心的是传递请求而不是动态修改它们。
我正在寻找可以找到正确技术来实现这一点的提示。如果学习一门新语言能让我获得一种非常简单的方法,那么我主要是语言不可知论者。