HN 日本語サマリー

← 一覧へ戻る
プログラミング

Codes – KotlinおよびJava向けの型付けされたアプリケーション結果

Codes – typed application outcomes for Kotlin and Java (github.com)

5 pointsby aalsanie1 コメント

要約

Codesは、JVMアプリケーション向けの安定したアプリケーション結果識別子と明示的な境界マッピングを提供するライブラリです。HTTPやgRPCなどのプロトコルに依存せず、アプリケーション固有の結果モデルをシステム全体で一貫して扱うことを可能にします。GradleやMavenでの依存関係の追加方法や、カスタム結果の定義、標準結果、およびHTTPやgRPCへのマッピング方法が示されています。

全文翻訳

Codes Java 17+. ランタイム依存関係ゼロ。 Codesは、JVMアプリケーション向けの安定したアプリケーション結果識別子と明示的な境界マッピングを提供します。 アプリケーションは独自のドメイン結果またはエラーモデルを維持し、システム内の複数の部分がHTTP、gRPC、シリアライゼーション、またはフレームワークにその意味を結合することなく、結果の意味について合意する必要がある場合にCodesを使用します。 ドメインの結果は、境界を越えて同じ識別子を維持できます:com.example.payments:PAYMENT_DECLINED | +-- HTTP 422 +-- gRPC FAILED_PRECONDITION +-- logs/metrics keep Payment_DECLINED インストール Gradle: dependencies { implementation("io.github.aalsanie:codes:0.3.1") } Maven: <dependency> <groupId>io.github.aalsanie</groupId> <artifactId>codes</artifactId> <version>0.3.1</version> </dependency> Java 17+. ランタイム依存関係ゼロ。 Kotlinアプリケーションは、JSpecify nullabilityメタデータを使用して同じJava APIを利用します。 カスタム結果 OutcomeDefinition paymentDeclined = OutcomeDefinition.custom( "com.example.payments", "PAYMENT_DECLINED", OutcomeState.FAILED, "The payment was declined." ); Outcome outcome = Outcome.of(paymentDeclined); HttpOutcomeMapper http = HttpOutcomeMapper.standard() .withMapping(paymentDeclined, HttpStatusCode.of(422)); GrpcOutcomeMapper grpc = GrpcOutcomeMapper.standard() .withMapping(paymentDeclined, GrpcStatusCode.FAILED_PRECONDITION); OutcomeCode は安定したマシン識別子です。プロトコルマッピングはその識別子を変更しません。 標準結果 OK INVALID_ARGUMENT UNAUTHENTICATED PERMISSION_DENIED NOT_FOUND ALREADY_EXISTS FAILED_PRECONDITION OUT_OF_RANGE RATE_LIMITED CANCELLED DEADLINE_EXCEEDED ABORTED UNIMPLEMENTED UNAVAILABLE INTERNAL DATA_LOSS RESOURCE_EXHAUSTED OK は標準の成功結果です。 標準カタログが操作に一致しない場合、アプリケーションはドメイン固有の成功、保留中、および失敗の結果を定義します。 ランタイム発生例 Outcome outcome = Outcome.of( StandardOutcomes.NOT_FOUND, "customerId=123" ); System.out.println(outcome.getCode()); System.out.println(outcome.getMessage()); System.out.println(outcome.getDetail()); メッセージは再利用可能な定義から来ます。詳細はその発生例に属します。 構造化された問題 ValidationResult validation = ValidationResult.invalid( Issue.at("email", "Invalid email address.") ); Outcome outcome = validation.toOutcome(StandardOutcomes.INVALID_ARGUMENT); ValidationResult は問題を集約するための小さな便利なクラスです。アプリケーションの結果、検証、または関数型プログラミングモデルを置き換えることを意図したものではありません。 HTTP HttpStatusCode status = HttpOutcomeMapper.standard() .map(StandardOutcomes.NOT_FOUND) .orNull(); assert status == HttpStatusCode.NOT_FOUND; 一部の標準結果は、正しいステータスがアプリケーションに依存するため、HTTPに対して意図的にマッピングされていません。 gRPC GrpcStatusCode status = GrpcOutcomeMapper.standard() .map(StandardOutcomes.NOT_FOUND) .orNull(); assert status == GrpcStatusCode.NOT_FOUND; 標準gRPCマッパーはすべての標準結果をカバーしています。 Kotlin Javaのgetterとスタティックファクトリは、Kotlinのプロパティと呼び出しとして直接使用できます: val outcome = Outcome.of(StandardOutcomes.NOT_FOUND, "customerId=123") val status = HttpOutcomeMapper.standard().map(outcome).orNull() check(outcome.code == StandardOutcomes.NOT_FOUND.code) check(status?.value == 404) 参照 セマンティック契約 HTTPおよびgRPCマッピング 互換性ポリシー ライセンス Apache License 2.0。