问题标签 [http4s]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
509 浏览

scala - Http4s 客户端/资源的集成测试

我正在使用 Http4s 客户端在 Scala 中实现一个Vault 客户端。

我现在开始编写集成测试。到目前为止,我有这个:

然后我的测试看起来像这样(只显示一个测试):

这种方法有效,但感觉不对。对于每个测试,我都打开连接 ( clientResource.use) 并重新创建VaultClient.

有没有办法让我为 SysSpec 中的所有测试重用相同的连接和客户端。

请注意,这些是集成测试,而不是单元测试。

0 投票
1 回答
650 浏览

fs2 - http4s 收到过早的 EOF

我想实现一个http4s服务器,它从另一个服务接收内容,处理它并返回响应。

原始服务使用重定向,所以我添加了Follow 重定向中间件。我还添加了 Logger 中间件来检查生成的日志。

服务的骨架是:

当我尝试使用 curl 访问服务时:

响应包含原始内容的第一部分,并以:

查看日志,它们包含以下行:

这表明接收过早的 EOF 时出错。

我在这个问题上找到了一个可能的答案:但答案建议使用不推荐使用的方法,如 tohttpService。

我想我需要使用流重写代码,但我不确定更惯用的方法是什么。一些建议?

0 投票
1 回答
125 浏览

scala - F多态代码中如何使用guave缓存加载器

我有一项服务,它 从官方示例中返回笑话:

但我想用番石榴缓存缓存第一个请求的笑话(只是通过常量键,这没关系):

如您所见,cacheLoader需要“物化”值F[Joke] => Joke。并且缓存返回纯值而不F

如何在F多态代码中使用此缓存?

0 投票
0 回答
55 浏览

scala - 如何从响应中获取价值?

我想测试我的服务,它具有以下实现:

我想测试该服务,我已经尝试如下:

问题是,如何从响应体中获取值?

0 投票
1 回答
1150 浏览

scala - http4s中如何结合AuthedRoutes和HttpRoutes?

当两者结合时,http4s如何优先考虑有什么规则吗AuthedRoutesHttpRoutes<+>

因为我收到了 401 这样的组合authRoute <+> route,所以在调用时:

行为发生了变化,当我重新排序路由时,我收到了 200 个相同的请求route <+> authRoute

当您需要使用 5 个以上需要组合的路由并且其中一些可能同时包含常规和安全端点时,它可能会更加混乱。

0 投票
1 回答
1300 浏览

scala - 使用 ZIO 环境运行 http4s 服务器

试图学习使用 ZIO 库,所以我决定创建一个基本的 Web 服务应用程序。想法非常基本,使用 http4s lib 作为服务器和路由端点,在端点调用上打印“hello world”。

在我找到的文档和示例的帮助下,生成代码:

  • 我创建路由器:Router[AppTask]("/" ...
  • 我创建服务器:ZIO.runtime[AppEnvironment].flatMap ...
  • 然后尝试使用 ZIO 环境启动服务器,但我缺少这一行: _ <- ZManaged.environment[ZEnv] >>> server.toManaged_ 被错误纠正,并在构建时抛出错误:错误:(34、39)推断类型参数 [touch.Main.AppEnvironment,Throwable,Unit] 不符合方法 >>> 的类型参数界限 [R1 >: zio.ZEnv,E1,B] _ <- ZManaged.environment[ZEnv] >>> server.toManaged_

Error:(34, 39) inferred type arguments [touch.Main.AppEnvironment,Throwable,Unit] do not conform to method >>>'s type parameter bounds [R1 >: zio.ZEnv,E1,B]

Error:(34, 50) type mismatch; found : zio.ZManaged[touch.Main.AppEnvironment,Throwable,Unit] (which expands to) zio.ZManaged[zio.clock.Clock with zio.console.Console with touch.HelloRepository,Throwable,Unit] required: zio.ZManaged[R1,E1,B]

也许有人可以帮助我正确的语法?也将获得一些解释,或链接到解释这一点的文档。

0 投票
0 回答
501 浏览

scala - 存根 Http4s 0.20.x 客户端进行测试

我想测试一个 Http4sClient正在从我的类中调用ClassUnderTest(以发出 HTTP 请求)并且发出的请求包含我期望的标头。

0.18.x中,我做了类似下面的事情。使用副作用来存储标头的值,以便我可以在调用后进行断言。在下面的示例中,f.execute(...)预计将PUTclient实例一起创建,并且我正在尝试记录所有请求处理和存储标头。

真正的代码在这里,如果你有兴趣。

ClassUnderTest花了一个Client[IO]所以我可以得到上述工作。

在 Http4s 0.20.12中,我不得不将签名更改为:

...现在我不知道如何为测试存根客户端。我尝试过,JavaNetClientBuilder但这无济于事,因为我可以获得Client(after .create) 的实例,现在我需要一个Resource[IO, http4s.Client[IO]].

如何使用测试替身来代替Client/Resource[F, Client[F]]以便我可以测试它发出的请求?

文档上的测试页面并没有真正帮助我。我想要一个测试替身,而不是测试所有功能Service(我不想启动服务器)。

0 投票
1 回答
108 浏览

scala - http4s 路由模式匹配中的无法访问代码警告

我用http4s定义了这个简单的路由:

路线按预期工作。

有没有办法避免这个警告?

这是堆栈跟踪:

0 投票
1 回答
741 浏览

scala - 我怎么知道,需要哪个隐含的?

我有一个工作代码:

当我删除隐式 importimplicit cf: ConcurrentEffect[F]时,编译器会抱怨:

我怎么知道,implicit cf: ConcurrentEffect[F]缺少类型类?

0 投票
2 回答
1034 浏览

scala - 如何在 Http4s 中添加自定义错误响应?

每当我在我的 http4s 应用程序中遇到未知路由时,它都会返回 404 错误页面,其中包含Content-Type: text/plain和 body:

未找到

如何强制它始终将正文作为 JSON 返回Content-Type: application/json

{“未找到信息”}

我发现当我组装httpApp时,我可以映射它并“调整”响应:

其中ErrorTranslator仅检测带有客户端错误状态代码和非application/json的 Content-Type的响应,然后将正文包装到 JSON 中:

它有效,但我想知道是否有一些不那么复杂的解决方案?

如果解决方案可以“翻译”其他错误,例如400 Bad request到 JSON,类似于呈现的代码,那也很棒。