http4s
苦しんでいる人をちらほら見たので解決策を示しておく。 tl;dr このように、http4sでサーバを書くとき、バックエンド実装がEmber(デフォルト)の場合はwithDefaultTimeout()を使って短いタイムアウトを指定するようにしてください。 import scala.concurrent.…
ScalaでHTTPエンドポイントを定義するためのライブラリであるTapirは最近よく使われており、Star数もとても多い(今見たら1.2kだった)。具体的なHTTPライブラリから独立した定義ができるため、メンテナビリティが高いのが特徴である。OpenAPIの定義を生成する…
zenn.dev こういう良い記事がある。しかしこの構成を実行すると、SIGINTを受け付けないサーバになってしまう(以下引用)。 object Main extends IOApp { val echo = HttpRoutes.of[IO] { case GET -> Root / "echo" / arg => Ok(arg) }.orNotFound def run(ar…
http4sでは、ルーティングされた先で例外を投げても安全に握り潰されるので、アプリが落ちることも他の接続に影響したりすることもない。 例として、触れるもの全てを傷付けてしまうcrashEverythingRoutesを用意した。 def crashEverythingRoutes(): HttpRou…
自分が書いている趣味プロダクトに、HTTPクライアントとして外部と通信するコードがあった。タイムアウトを指定しつつ通信させたかったがあまり資料が無かったのでメモしておく。 http4sとは タイムアウトを設定する withTimeout withIdleTimeInPool .withId…