问题标签 [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 回答
162 浏览

scala - 如何将 Scala HTTP4S 应用程序部署到 Heroku?

我正在尝试将 Scala HTTP4S 应用程序部署到 Heroku。

使用上述命令从 HTTP4S 获取 giter8 模板。

将 about 行放入我的 build.sbt 文件中。

将以上内容添加到我的 plugins.sbt 文件中

然后我创建了一个 Procfile,它具有以下内容

我的 application.conf 文件中没有任何内容,我不确定如何为上述 Procfile 指定端口。

我研究过:https ://devcenter.heroku.com/articles/deploying-scala以及一些 Youtube 视频。然而,所有的 Youtube 教程各不相同,没有一个使用 HTTP4S。

输入 heroku logs -a glacial-waters-76053 时出现的错误

邮递员返回 503 服务不可用错误。

这是回购的链接:https ://github.com/fullStackRyan/fsdeploy

0 投票
2 回答
613 浏览

scala - 使用 ZIO 测试套件集成测试 HTTP 服务器

我试图找出为支持两个端点的 Http4s 应用程序编写集成测试的习惯用法。我通过在新光纤上分叉它来启动Main应用程序类,然后在发布. 然后我将其转换为 a并通过具有多个s的整体传递它。ZManagedZManagedZLayerprovideCustomLayerShared()suitetestM

  1. 我在正确的轨道上吗?
  2. 它的行为不像我预期的那样:
  • 尽管以上述方式管理的 httpserver 已提供给包含两个测试的套件,但它在第一次测试后被释放,因此第二次测试失败
  • 测试套件永远不会完成,只是在执行两个测试后挂起

为下面的代码半生不熟的性质道歉。

测试的输出是第二个测试失败,而第一个测试成功。我进行了足够多的调试,发现 HTTPServer 在第二次测试之前已经关闭。

并且无论我是否在 sbt testOnly 上运行 Intellij 的测试,测试过程都会在这一切之后一直挂起,我必须手动终止它。

0 投票
2 回答
253 浏览

scala - HttpRoutes[RIO[E, *]] 和 HttpRoutes[zio.Task] 之间的编译问题

试图编译这个小型 ZIO 友好的 Tapir/Http4s 端点描述

并继续把它放在最后一行。

Type mismatch. Required: HttpRoutes[RIO[E, *]], found: HttpRoutes[zio.Task]

任务是 RIO 的子类型,所以这应该可以正常工作吧?或者我在这里错过了什么。这个世界有点菜鸟,所以非常感谢一些帮助。

0 投票
1 回答
478 浏览

scala - 如何将 http4s 服务器定义为 ZIO ZLayer,以便在主中注入和获取?

帮助我使用 ZLayers 定义一个 http4s。我正在学习,我很困惑。我想将 http 服务器作为一个组件。但我不知道如何组合 ZManageds 和 ZLayers 以便编译。

创建一个需要Runtime[ZEnv]? ZEnv或者创建一个需要 a 的层并为其生成运行时是否更有意义。

我不知道如何ZManaged[..., ..., Server]Layer这里主要访问。我不完全理解这些access方法。

也在底部,但重要性较低

PR 中的相同内容,请随时发表评论 https://github.com/kovacshuni/itsaren/pull/1

0 投票
1 回答
457 浏览

scala - Http4s 客户端以递归方式将实体编码为 x-www-form-urlencoded

我有如下要求

我正在查看源代码,它看起来像withEntity继承了嵌套的标题,EntityDecoder所以上面的代码默认为Content-Type: application/json. 好像我明确地传递了UrlForm一切都很好。

不幸的是,我遇到的 API 期望数据为x-www-form-urlencoded,并且考虑到目标 API 的复杂性以及所有不同的端点/请求,我想找到一种将给定案例类编码为表单的方法。最好的方法是什么?

我努力了:

  1. 显式指定Content-Type但这不起作用,因为继承的类型优先

  2. Product构建从to的隐式泛型转换UrlForm(目前的扩展方法)

这里的问题是UrlForm在映射的两边都需要一个字符串。如果我只是用.toString它转换东西,因为嵌套类型例如:

导致以下json无效

我试过asJson而不是,toString但circe无法决定正确的KeyEncoder

解决这个问题的正确方法是什么,以便将给定Product的内容编码到流中?

0 投票
1 回答
1018 浏览

scala - 如何将 java.util.UUID 转换为 doobie.syntax.SqlInterpolator.SingleFragment?

我正在尝试使用 doobie、http4s 和 circe 建立一个带有数据库的简单 scala 应用程序。

如何将 java.util.UUID 转换为 doobie.syntax.SqlInterpolator.SingleFragment ?

0 投票
1 回答
264 浏览

scala - 在 http4s 中记录 InternalServerError 请求的 url

如果发生未处理的错误,http4s 返回 InternalServerError。发生 InternalServerError 时是否可以记录请求的 url?如果是,最好的方法是什么?

0 投票
2 回答
130 浏览

scala - 在 Http4s API 中将 `Option[A]` 转换为 Ok() 或 NotFound()

我有一个如下所示的 API:

和一个看起来像这样的路由:

因此,当有 时None,它会转换为 404。由于有多个路由,因此.flatMap { ... }会重复。

问题:如何将其移动到.orNotFound特定于我的项目的单独帮助函数中?


我的尝试:

为了让我的事情变得简单(并避免F最初的参数化),我试图在里面定义这个comicsRoutes

但是???这里有什么?似乎不是ResponseStatus。此外,它.flatMap { ... }是在 下制作的import dsl._,但我想把它移到更远的地方。什么是好地方?它是进入路由文件,还是我把它放在一个单独的ExtendedSomething扩展文件中?(我希望这可能是相关的???Something但我对缺少的类型有点困惑。)

(同样重要的是,我如何找出???这里有什么?我希望???在类型级别可以给我一个“类型漏洞”,而 VSCode 的悬停功能提供了非常零星的文档价值。)

0 投票
1 回答
163 浏览

scala - 一种遍历分页响应 Http4s 的简单方法

我正在尝试在不使用字符串插值的情况下处理分页,并且还利用了 http4s 功能。我遇到过OptionalQueryParamDecoderMatcher,我不知道它是否适合我的用例。因此响应包含标题,该标题包含有关 Link 属性中的页数的信息。它的 rel 设置为 prev、next、first 或 last。如下 :

我的想法是获取指定为最后的页数(即总页数),然后加一以获得所有结果。我想到的第一种方法是字符串插值,但我相信会有一种更简单的方法来做到这一点,尤其是利用 http4s。

有人可以启发我吗?我对你的建议持开放态度。

注意:httpRoute 被指定为这个例子:

0 投票
1 回答
562 浏览

scala - 根主机上带有参数的 GET 请求的 http4s 路由匹配

我有简单的路由映射功能,它使用http4s

出于某种原因,当我尝试使用一些不是我的服务器的参数传递GETpublished请求时,我看到了showAll方法的结果。

例如,如果我发送获取请求http://{host}:{port}/?foo=somevalue

我希望看到类似org.http4s.dsl.impl.Status.BadRequestorg.http4s.dsl.impl.Status.NotFound的东西,Response但我发现它case GET -> Root实际上匹配。

为什么会发生这种情况以及如何避免这种匹配?

当我们只想为某些指定的参数(或类型)而不是所有可能的输入定义函数时,部分函数被用于这种情况。