Back to OSS
Swift Package 通信 / サーバー
swift-http-transport
URLSession をプロトコル背後に隠し、リトライ / レート制限 / SSE を一元化する通信基盤
Swift
httpurlsessionsse
English | 日本語
swift-http-transport
The single raw-HTTP seam for the NOPROBLEM stack. Places URLSession behind a
protocol and centralises retry, rate-limit parsing, and SSE decoding so that
higher layers (swift-api-client, providers) depend only on this abstraction.
Installation
Add to Package.swift:
.package(url: "https://github.com/no-problem-dev/swift-http-transport", from: "1.0.0")
Add to your target's dependencies:
.target(name: "MyTarget", dependencies: ["HTTPTransport"])
Usage
Basic request
import HTTPTransport
let transport = URLSessionTransport()
let request = HTTPRequest(method: "GET", url: URL(string: "https://api.example.com/data")!)
let response = try await transport.send(request)
if response.isSuccess {
// use response.body
}
Retry
let transport = RetryingTransport(
base: URLSessionTransport(),
policy: ExponentialBackoff(maxAttempts: 3),
rateLimitMapping: RateLimitHeaderMapping(
remainingRequests: "x-ratelimit-remaining-requests",
requestsReset: "x-ratelimit-reset-requests",
resetFormat: .durationSuffix
)
)
Server-Sent Events
let transport = URLSessionTransport()
let request = HTTPRequest(method: "POST", url: url, headers: ["Accept": "text/event-stream"])
for try await event in transport.sseEvents(request) {
print(event.data)
}
Testing
let mock = MockTransport(status: 200, body: Data("{\"ok\":true}".utf8))
let response = try await mock.send(request)
print(mock.recordedRequests.count) // 1
Module overview
| Type | Role |
|---|---|
HTTPTransport / HTTPStreamingTransport |
Core protocols (send / stream) |
URLSessionTransport |
Default concrete implementation (URLSession-backed) |
MockTransport |
Deterministic testing (scripted/closure responses, request recording) |
RetryPolicy / ExponentialBackoff / NoRetry |
Single retry abstraction (status + error + rate-limit) |
RetryingTransport |
Decorator that centralises retry at the transport layer |
RateLimitHeaderMapping / RateLimitSnapshot |
Rate-limit extraction via header-name mapping (seconds / milliseconds / RFC 3339 / duration suffix) |
SSEParser / SSEEvent / sseEvents(_:) |
WHATWG SSE frame splitting and decoding |
HTTPRequest / HTTPResponse / HTTPHeaders (case-insensitive, insertion-ordered) are minimal Foundation value types.
License
MIT
同じカテゴリの OSS — 通信 / サーバー
swift-api-client
Swift Packageasync/await 対応の軽量 HTTP クライアント。型安全な API 通信を Swift で
Swift
· 通信 / サーバーhttp-clientasync-awaitnetworking
swift-api-contract
Swift PackageSwift マクロで型安全な API 契約を定義する
Swift
· 通信 / サーバーswift-macroapitype-safe
swift-api-server
Swift PackageVapor を抽象化し、アプリケーションコードをフレームワーク実装から独立させるサーバー層
Swift
· 通信 / サーバーservervaporbackend
swift-firebase-server
Swift Packageサーバーサイド Swift 向けの Firestore REST API クライアント
Swift
· 通信 / サーバーfirebasefirestoreserver
swift-persistence
Swift PackageKeyValue / Secure / Document / Registry を束ねるプロトコル指向の永続化抽象レイヤー
Swift
· 通信 / サーバーpersistencekeyvaluestorage