测试已测试 | ✗ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2017年2月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Rajan Twanabashu 维护。
依赖 | |
Alamofire | ~> 4.3 |
AEXML | ~> 4.0 |
RTWebService 是 Alamofire 的包装器,以便以最简单的方式实现 REST 和 SOAP 调用。RTWebService 还专注于通过 SSH 和 FTP 等其他协议连接到服务器。目前,我们处于该库开发的测试阶段,很快我们将提供一种非常令人印象深刻的方法来从您的 iOS 应用程序与服务器通信。
RTWebService 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中:
pod "RTWebService"
要运行示例项目,请克隆仓库,然后从 Example 目录首先运行 pod install
。
/*
//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
表单数据:创建用户
$ 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)
为了进行 SOAP 调用,我们需要在发出服务调用之前设置以下事项:
Webservicex 提供了大量的 SOAP 请求。
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 /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文件。