RTWebService 0.2.4

RTWebService 0.2.4

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

Rajan Twanabashu 维护。



 
依赖
Alamofire~> 4.3
AEXML~> 4.0
 

RTWebService

简介

RTWebService 是 Alamofire 的包装器,以便以最简单的方式实现 RESTSOAP 调用。RTWebService 还专注于通过 SSHFTP 等其他协议连接到服务器。目前,我们处于该库开发的测试阶段,很快我们将提供一种非常令人印象深刻的方法来从您的 iOS 应用程序与服务器通信。

安装

RTWebService 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:

pod "RTWebService"

示例

要运行示例项目,请克隆仓库,然后从 Example 目录首先运行 pod install

用法

1. Rest GET (JSON 格式的响应)

       /*
       //Get single user
        let payload = RTPayload.init(parameter:nil, parameterEncoding:.defaultUrl)
        let req = RTRequest.init(requestUrl: "https://reqres.in/api/users/2",
                                 requestMethod: .get,
                                 header: ["language":"en"],
                                 payload: payload)
       */
        //Get user list
        let payload = RTPayload.init(parameter: ["page":2], parameterEncoding:.defaultUrl)
        let req = RTRequest.init(requestUrl: "https://reqres.in/api/user",
                                 requestMethod: .get,
                                 header: ["language":"en"],
                                 payload: payload)

        RTWebService.restCall(request: req) { (response) in
            print("actual output ------------------------")
            switch response {
            case .success(let res):
                    print("response value")
                    print(res)
            case .failure(let error):
                    print("error value")
                    print(error)

            }
        }

在这个示例中,除了 parameterEncoding 之外,一切都很简单易懂。`.defaultUrl` 会将您的查询参数作为 urlEncoding 发送,例如 http://demo0947187.mockable.io/get?name=rajan

2. Rest POST (JSON 格式的响应)

表单数据:创建用户

$ curl -i \
    -X POST \
    -H "language: en" \
    -H "User-Agent: RTWebService_Example/1.0 (org.cocoapods.demo.RTWebService-Example; build:1; iOS 10.2.0) Alamofire/4.3.0" \
    -d "job=leader&name=morpheus" \
    "https://reqres.in/api/users"
        let payload = RTPayload.init(parameter: ["name": "morpheus",
                                                 "job": "leader"], parameterEncoding:.bodyUrl)
        let req = RTRequest.init(requestUrl: "https://reqres.in/api/users",
                                 requestMethod: .post,
                                 header: ["language":"en"],
                                 payload: payload)

JSON 格式的正文数据

$ curl -i \
    -X POST \
    -H "language: en" \
    -H "User-Agent: RTWebService_Example/1.0 (org.cocoapods.demo.RTWebService-Example; build:1; iOS 10.2.0) Alamofire/4.3.0" \
        -d "{\"job\":\"leader\",\"name\":\"morpheus\"}" \
    "https://reqres.in/api/users"
        let payload = RTPayload.init(parameter: ["name": "morpheus",
                                                 "job": "leader"], parameterEncoding:.defaultJson)
        let req = RTRequest.init(requestUrl: "https://reqres.in/api/users",
                                 requestMethod: .post,
                                 header: ["language":"en"],
                                 payload: payload)

XML 格式的正文数据

$ curl -i \
    -X POST \
    -H "language: en" \
    -H "User-Agent: RTWebService_Example/1.0 (org.cocoapods.demo.RTWebService-Example; build:1; iOS 10.2.0) Alamofire/4.3.0" \
        -d "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
            <!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">
           <plist version=\"1.0\">
            <dict>
         <key>job</key>
         <string>leader</string>
         <key>name</key>
         <string>morpheus</string>
           </dict>
          </plist>" \
    "https://reqres.in/api/users"
        let payload = RTPayload.init(parameter: ["name": "morpheus",
                                                 "job": "leader"], parameterEncoding:.xmlProperty)
        let req = RTRequest.init(requestUrl: "https://reqres.in/api/users",
                                 requestMethod: .post,
                                 header: ["language":"en"],
                                 payload: payload)

1. SOAP Web 服务处理

为了进行 SOAP 调用,我们需要在发出服务调用之前设置以下事项:

  • 主机地址
  • SOAP 操作
  • SOAP 消息正文

Webservicex 提供了大量的 SOAP 请求。

SOAP GET 请求

let soapPayload = RTPayload(parameter: ["IPAddress" : "124.41.219.215"], parameterEncoding: .defaultUrl)
        let req1 = RTRequest.init(requestUrl: "http://www.webservicex.net//geoipservice.asmx/GetGeoIP",
                                  requestMethod: .get,
                                  header: ["language":"en",
                                           "Content-Type": "text/xml"],
                                  payload: soapPayload)

        RTWebService.soapCall(request: req1) { (response) in
            print("actual output ------------------------")
            switch response {
            case .success(let res):
                print("response value")
                print(res)
            case .failure(let error):
                print("error value")
                print(error)

            }
        }

SOAP POST 请求

让我们使用以下请求配置来发起一个 SOAP 请求:

POST /geoipservice.asmx HTTP/1.1
Host: www.webservicex.net
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://www.webservicex.net/GetGeoIP"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetGeoIP xmlns="http://www.webservicex.net/">
      <IPAddress>string</IPAddress>
    </GetGeoIP>
  </soap:Body>
</soap:Envelope>

通过 RTWebservice

// Create XML Document
        let soap = AEXMLDocument()
        let envelope = soap.addChild(name: "soap:Envelope",
                                     attributes: ["xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance",
                                                  "xmlns:xsd":"http://www.w3.org/2001/XMLSchema",
                                                  "xmlns:soap":"http://schemas.xmlsoap.org/soap/envelope/"])

        //let header = envelope.addChild(name: "soap:Header")
        let body = envelope.addChild(name: "soap:Body")
        let geoIp = body.addChild(name:"GetGeoIP", attributes:["xmlns":"http://www.webservicex.net/"])
        geoIp.addChild(name: "IPAddress", value: "124.41.219.215", attributes: [:])




        let soapPayload = RTPayload(parameter: ["soapdata" : soap.xml], parameterEncoding: .defaultUrl)
        let req1 = RTRequest.init(requestUrl: "http://www.webservicex.net/geoipservice.asmx",
                                 requestMethod: .post,
                                 header: ["language":"en",
                                          "SOAPAction":"http://www.webservicex.net/GetGeoIP",
                                          "length": String(soap.xml.characters.count),
                                          "Content-Type": "text/xml"],
                                 payload: soapPayload)





        RTWebService.soapCall(request: req1) { (response) in
            print("actual output ------------------------")
            switch response {
            case .success(let res):
                print("response value")
                print(res)
            case .failure(let error):
                print("error value")
                print(error)

            }
        }

作者

rajan, [email protected]

贡献

我们欢迎任何形式的贡献。

许可证

RTWebService可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。