Restful API的适配器代理

Restful API的适配器代理,rest,proxy,adapter,Rest,Proxy,Adapter,这是一个一般性的“什么技术可用”问题 我的公司提供了一个带有RESTful API的web应用程序。然而,对于我的需求来说,它太慢了,而且一些结果的格式很糟糕 我想用一个代理/适配器服务器包装他们的restful服务器,因此当您连接到代理时,您会得到restful API,我希望真正的API能够提供 因此,它需要做几件事: 通过大多数请求 缓存一些请求 在原始服务器上执行一些额外请求,以检测请求是否可缓存 例如:有一个对记录中某个字段的请求:GET/records/id/field,这

这是一个一般性的“什么技术可用”问题

我的公司提供了一个带有RESTful API的web应用程序。然而,对于我的需求来说,它太慢了,而且一些结果的格式很糟糕

我想用一个代理/适配器服务器包装他们的restful服务器,因此当您连接到代理时,您会得到restful API,我希望真正的API能够提供

因此,它需要做几件事:

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

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

  • 修复某些响应的标题-例如,基于路径的内容类型
  • 例如,对一些大型内容进行流处理
获取/records/id/attachments/1234

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

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


虽然我可以修改客户机以实现此功能,但这样的代码对于其他客户机(不同的语言)是不可重用的,并且会使客户机逻辑复杂化


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


我看了一下squid是否能做到这一点,但我不熟悉这项技术,它似乎主要关注的是传递请求,而不是动态修改请求



我正在寻找可能找到正确技术来实现这一点的提示。如果学习一门新的语言能让我获得一种非常简单的方法,我对语言基本上是不可知的。

看起来很有用——尽管我还不知道它是否能流式处理代码转换。

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

  • (Java+Scala)
  • +Node.js(Javascript)
  • (红宝石)
我更熟悉Play,我知道它为缓存提供了实用工具,您可能会发现它很有用,并且可以通过许多插件进行扩展

如果您熟悉Scala,还可以看看。这是一个由Twitter的基础设施团队构建的框架,用于提供协议无关的连接。对于REST-to-REST代理来说,这可能是一种过分的杀伤力,但它提供了您可能会发现有用的抽象

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

完全满足您的需求。它插入您的web应用程序和原始API之间,以路由请求

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

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

Wow,6年前被问到,但仍然没有被接受的答案。我正在考虑做同样的事情,并期望这会被多次解决。如果可能的话,我会尽量避免从头开始写代理。如果你解决了这个问题,请告诉我!