SwiftyEndpoint 是一个轻量级的、面向协议的 Swift 包,它可以帮助您轻松构建类型安全的 API 端点。它提供了一种简洁且灵活的方式来定义您的 API 端点、处理配置和管理查询参数。
您可以通过 Swift Package Manager 安装 SwiftyEndpoint。
https://github.com/cembaykara/SwiftyEndpoint.git
将 SwiftyEndpoint 添加到您的 Package.swift
dependencies: [
.package(url: "https://github.com/cembaykara/SwiftyEndpoint.git", from: "1.0.0")
]
首先,创建一个符合 SwiftyConfiguration
协议的配置。
import SwiftyEndpoint
struct NetworkConfiguration: SwiftyConfiguration {
let host: String? = "api.example.com"
let port: Int?
let disableSecureConnection: Bool = false
init(port: Int? = nil) {
self.port = port
}
}
通过符合 SwiftyEndpoint
协议来定义您的端点。
enum MoviesEndpoint: SwiftyEndpoint {
case mostPopular
case topRated
static let configuration: NetworkConfiguration = NetworkConfiguration()
static var basePath: String { "/api/v2/movies" }
var path: String {
switch self {
case .mostPopular: "/most_popular"
case .topRated: "/top_rated"
}
}
}
通过符合 SwiftyOptions
协议来创建查询参数。
enum MovieOptions: SwiftyOptions {
case page(Int)
case language(String)
func toQueryParameter() -> URLQueryItem {
switch self {
case .page(let value): URLQueryItem(name: "page", value: String(value))
case .language(let value): URLQueryItem(name: "language", value: value)
}
}
}
// Basic usage
let popularMoviesURL = MovieEndpoint.mostPopular.url()
// Result: https://api.example.com/api/v2/movies/most_popular
// With query parameters
let options: [MovieOptions] = [.page(1), .language("en-US") ]
let urlWithParams = MovieEndpoint.popular.url(with: options)
// Result: https://api.example.com/api/v2/movies/most_popular?page=1&language=en-US
生成没有端点特定路径的基础 URL
let baseURL = MovieEndpoint.baseURL()
// Result: https://api.example.com/api/v2/movies
您可以使用 url(with:custom:)
方法自定义 URL 构建。
let customURL = endpoint.url(with: options) { components, path in
var modified = components
modified.path = "/custom" + path
return modified
}
欢迎贡献!请随时提交 Pull Request。
SwiftyEndpoint 基于 Apache License 2.0 许可发布。
查看 LICENSE 文件以获取完整详细信息。