繁体   English   中英

适用于Restful API的适配器代理

[英]Adapter Proxy for Restful APIs

这是一个普遍的'什么技术可用'的问题。

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

在此输入图像描述

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

在此输入图像描述

所以它需要做一些事情:

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

在此输入图像描述

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

  • 根据路径修复某些响应的标头 - 例如内容类型
  • 例如,对某些大型内容进行流处理

GET / records / id / attachments / 1234

在此输入图像描述

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

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


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


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


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


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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM