AlamofireXMLRPC 2.2.0

AlamofireXMLRPC 2.2.0

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布日期最后发布日期2017年9月
Swift 版本Swift 版本3.0
SPM支持 SPM

Jérémy Marchand 维护。



 
依赖项
Alamofire>= 0
AEXML>= 0
 

AlamofireXMLRPC








codebeat badge

AlamofireXMLRPC 将 XML RPC 功能带到了 Alamofire。它的目标是提供一个简单的方法来执行 XMLRPC 调用并平滑地检索响应。

XML 是通过 AEXML 内部处理的。

示例

以下是一个请求和响应处理程序的示例

let data: NSData = ...
let params: [Any] = [42, "text", 3.44, Date(), data]
AlamofireXMLRPC.request("https://:8888/xmlrpc", methodName: "foo", parameters: params).responseXMLRPC { (response: DataResponse<XMLRPCNode>) -> Void in
       switch response.result {
      case .success(let value):
            if let message = value[0].string, age = value[1]["age"].int32  {
              ...
            }
      case .failure:
            ...
      }

它将生成以下调用,并让您从 XMLRPC 服务中解析相应的答案

<!-- request -->
<methodCall>
    <methodName>foo</methodName>
    <params>
        <param>
            <value>
                <int>42</int>
            </value>
        </param>
        <param>
            <value>
                <string>text</string>
            </value>
        </param>
        <param>
            <value>
                <double>3.44</double>
            </value>
        </param>
        <param>
            <value>
                <dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
            </value>
        </param>
        <param>
            <value>
                <base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>
            </value>
        </param>
    </params>
</methodCall>

<!-- response -->
<methodResponse>
  <params>
    <param>
      <value>
        <string>Hello world!</string>
      </value>
    </param>
    <param>
      <value>
        <struct>
          <member>
            <name>name</name>
            <value>
              <string>John Doe</string>
            </value>
          </member>
          <member>
            <name>age</name>
            <value>
              <int>36</int>
            </value>
          </member>
        </struct>
      </value>
    </param>
  </params>
</methodResponse>

要求

  • iOS 9.0+ / Mac OS X 10.11+
  • Xcode 9

请求

方法请求

// Call XMLRPC service with the sharedManager of Alamofire
AlamofireXMLRPC.request("https://xmlrpcservice", method:"foo" parameters: [1,2.0,"ddd",["key":"value"]])
// Call XMLRPC service with your custom manager
manager.requestXMLRPC("https://xmlrpcservice", method:"foo" parameters: [1,2.0,"ddd",["key":"value"]])

XMLRPC 请求可转换

实现 XMLRPCRequestConvertible 协议的类型可以用来构造 XMLRPC 调用。

public protocol XMLRPCRequestConvertible {
    var url: URLConvertible { get }
    var methodName: String { get }
    var parameters: [Any]? { get }
    var headers: [String : String]? { get }
}

struct MyRequest: XMLRPCRequestConvertible {
  ...
}

let request =  MyRequest(...)
Alamofire.request(request) // Call XMLRPC service with Alamofire

映射

AlamofireXMLRPC 使用以下映射将 Swift 值映射到 XML RPC 值

Swift 示例 XMLRPC 注意
String “foo” <string>foo</string>
Int, Int32, Int16, Int8, UInt16, UInt8 42 <int>42</int> XML RPC 整数是 32 位,Int 值将被转换为 Int32
Bool true <boolean>1</boolean>
Double, Float 3.44 <double>3.44</double>
Date Date() <dateTime.iso8601>19980717T14:08:55</dateTime.iso8601>
Data Data() <base64>eW91IGNhbid0IHJlYWQgdGhpcyE=</base64>

默认情况下,其他类型将被映射为 XML RPC 字符串并使用默认的字符串表示。但是,您可以通过采用协议 XMLRPCRawValueRepresentable 来为自定义类型提供自己的映射。

enum XMLRPCValueKind: String {
    case integer = "int"
    case double = "double"
    case boolean = "boolean"
    case string = "string"
    case dateTime = "dateTime.iso8601"
    case base64 = "base64"
}

protocol XMLRPCRawValueRepresentable {
    static var xmlrpcKind: XMLRPCValueKind { get }
    var xmlrpcRawValue: String { get }
    init?(xmlrpcRawValue: String)
}

集合

Swift 数组 [Any] 可转换为 XMLRPC 数组。

[1,"too"]

同样,字典 [String:Any] 可转换为 XMLRPC 结构。

["name":"John Doe","age":35]

响应

响应

XMLRPC 响应通过方法 responseXMLRPC(completionHandler: DataResponse<XMLRPCNode> -> Void) 处理。响应的 XMLRPC 参数被映射到 XMLRPCNode。这允许您轻松地从复杂结构或树中提取数据。

索引

对于每个 XMLRPCNode,您可以通过索引或通过字符串键访问子节点。内部将检索 XMLRPC 数组和结构的子项。

aRequest.responseXMLRPC{ (response: DataResponse<XMLRPCNode>) -> Void in
      switch response.result {
      case .success(let value):
            if let message = value[0]["aKey"][9].string  {
              ...
            }
      case .failure:
            ...
      }
}

无需担心解包和检查值类型或存在性。选项管理仅在您使用可选获取器请求 Swift 值时才执行。

例如,您可以在不担心对象树实际是否存在的情况下调用 value[0]["aKey"][9]

可选获取器

var array: [XMLRPCNode]?
var dictionary: [String:XMLRPCNode]?
var string: String?
var int32: Int32?
var double: Double?
var bool: Bool?
var date: Date?
var data: Data?
var count: Int?

许可证

AlamofireXMLRPC 在 MIT 许可下发布。有关详细信息,请参阅 LICENSE