CMCKit
CMCKit 是 CoinMarketCap 的新版 V2 API 的封装。V1 版本仍然支持,但将很快 下线。 CMC Kit 通过所有支持的端点和请求参数提供对 CoinMarketCap V2 API 的完整功能的访问。此外,它还通过使用自定义请求参数来提高可用性,提供对某些端点的访问。
特性
- 简单易用
- 完全用 Swift 4 开发,不依赖任何外部库
- 提供 CoinMarketCap V2 REST API 的全部功能
- 自定义请求参数以简化数据检索
- Codable 序列化数据
- 与 CoinMarketCap API 的每一次更新保持同步
要求
- iOS 9.0+
- Xcode 9.0+
示例
获取比特币当前价格
let apiClient = CMCClient()
apiClient.tickerByName("Bitcoin"){ response in
switch response {
case .success(let responseObject):
print(responseObject.data.quotes.usd.price)
case .failure(let error):
print(error);
}
}
使用方法
请参考CoinMarketCap提供的文档,了解可用的接口。
关于序列化JSON响应中对象的表示,请参阅下面的数据模型部分。
通过名称和符号获得单个标记符是本人开发的自定义请求,以便更易于数据检索。
初始化
let apiClient = CMCClient()
列表
apiClient.request(ListingsRequest()){ response in
switch response {
case .success(let responseObject):
//use responseObject of type ListingsResponse
case .failure(let error):
print(error);
}
}
所有标记符
apiClient.request(TickersRequest()){ response in
switch response {
case .success(let responseObject):
//use responseObject of type TickersResponse
case .failure(let error):
print(error);
}
}
按名称单个标记符
apiClient.tickerByName("Bitcoin"){ response in
switch response {
case .success(let responseObject):
//use responseObject of type TickerResponse
case .failure(let error):
print(error);
}
}
按符号单个标记符
apiClient.tickerBySymbol("BTC"){ response in
switch response {
case .success(let responseObject):
//use responseObject of type TickerResponse
case .failure(let error):
print(error);
}
}
按列表ID单个标记符
apiClient.request(TickerRequest(id: 1)){ response in
switch response {
case .success(let responseObject):
//use responseObject of type TickerResponse
case .failure(let error):
print(error);
}
}
全局数据
apiClient.request(GlobalDataRequest()){ response in
switch response {
case .success(let responseObject):
//use responseObject of type GlobalDataResponse
case .failure(let error):
print(error);
}
}
数据模型
在所有上述情况下,响应对象由两个结构组成:**data(数据**)和**metadata(元数据**)。这些结构只是 CoinMarketCap 提供的 JSON 响应的快速对象表示。您可以在存储库中找到所有数据模型,但它们也示例如下。
顶层响应协议
public protocol CMCResponse: Codable{
associatedtype D
associatedtype M
var data: D {get}
var metadata: M {get}
}
所有不同的响应(如列表响应、行情响应、币种响应和全局数据响应)都符合 CMC 响应协议。这意味着,下面的所有数据对象和元数据对象(例如列表数据、列表元数据等)都可以通过任何类型为 CMCResponse 的响应对象的 .data 和 .metadata 属性进行引用。
列表响应
public struct ListingsData: Codable {
public let id: Int
public let name, symbol, websiteSlug: String
}
public struct ListingsMetadata: Codable {
public let timestamp, numCryptocurrencies: Int
}
所有币种响应
public struct TickerData: Codable {
public let id: Int
public let name, symbol, websiteSlug: String
public let rank: Int
public let circulatingSupply, totalSupply: Double
public let maxSupply: Double?
public let quotes: TickerQuotes
public let lastUpdated: Int
}
public struct TickersMetadata: Codable {
public let timestamp, numCryptocurrencies: Int
}
单个币种响应
public struct TickerData: Codable {
public let id: Int
public let name, symbol, websiteSlug: String
public let rank: Int
public let circulatingSupply, totalSupply: Double
public let maxSupply: Double?
public let quotes: TickerQuotes
public let lastUpdated: Int
}
public struct TickerMetadata: Codable {
public let timestamp: Int
}
全局数据响应
public struct GlobalDataData: Codable {
public let activeCryptocurrencies, activeMarkets: Int
public let bitcoinPercentageOfMarketCap: Double
public let quotes: GlobalDataQuotes
public let lastUpdated: Int
}
public struct GlobalDataMetadata: Codable {
public let timestamp: Int
}
贡献
如果您有任何关于额外自定义请求或新特性的想法,请随意发送拉取请求或创建新问题。
作者
Ashwin Swaroop