📦 SwiftyEndpoint

SwiftyEndpoint 是一个轻量级的、面向协议的 Swift 包,它可以帮助您轻松构建类型安全的 API 端点。它提供了一种简洁且灵活的方式来定义您的 API 端点、处理配置和管理查询参数。

Buy Me a Coffee at ko-fi.com

🔧 安装

Swift Package Manager

您可以通过 Swift Package Manager 安装 SwiftyEndpoint。

使用 Packages.swift

将 SwiftyEndpoint 添加到您的 Package.swift

dependencies: [ 
	.package(url: "https://github.com/cembaykara/SwiftyEndpoint.git", from: "1.0.0")
]

🚀 使用

1. 定义您的配置

首先,创建一个符合 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
	}
}

2. 创建您的端点

通过符合 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"
		}
	}
}

3. 定义查询参数 (可选)

通过符合 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)
            }
        }
    }

4. 使用您的端点

// 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

生成没有端点特定路径的基础 URL

let baseURL = MovieEndpoint.baseURL()
// Result: https://api.example.com/api/v2/movies

🔬 高级用法

自定义 URL 构建

您可以使用 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 文件以获取完整详细信息。