如何在iOS/iPhone中访问RESTful服务?


为了在swift中访问REST API,我们需要使用swift原生网络方式(即使用URL会话和数据任务)完成一系列步骤。

Rest代表表现层状态转移,它定义了一组要由Web服务使用的约束。在swift中,我们可以通过以下方式访问Web服务。

  • 首先,我们需要创建一个具有默认配置的会话对象。

let configuration = URLSessionConfiguration.default
let session = URLSession(configuration: configuration)
  • 然后,我们需要创建一个我们需要的类型的URL请求,它可以是get、post、delete或put。在这个例子中,我们看到的是“GET”类型。

let url = URL(string: URLString)
//let url = NSURL(string: urlString as String)
var request : URLRequest = URLRequest(url: url!)
request.httpMethod = "GET"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
request.addValue("application/json", forHTTPHeaderField: "Accept")
  • 创建请求对象后,我们需要使用上面创建的URL执行dataTask。这是我们完整dataTask方法现在应该的样子。

let dataTask = session.dataTask(with: url!) {
data,response,error in
   guard let httpResponse = response as? HTTPURLResponse, let receivedData = data
   else { print("error: not a valid http response")
      return
   }
   switch (httpResponse.statusCode) {
      case 200: //success response.
      break
    case 400: break
      default: break
   }
}
dataTask.resume()
  • 现在我们可以将其嵌入到一个函数中并在我们的代码中使用它。

func hitAPI(_for URLString:String) {
   let configuration = URLSessionConfiguration.default
   let session = URLSession(configuration: configuration)
   let url = URL(string: URLString)
   //let url = NSURL(string: urlString as String)
   var request : URLRequest = URLRequest(url: url!)
   request.httpMethod = "GET"
   request.addValue("application/json", forHTTPHeaderField: "Content-Type")
   request.addValue("application/json", forHTTPHeaderField: "Accept")
   let dataTask = session.dataTask(with: url!) {
      data,response,error in
      // 1: Check HTTP Response for successful GET request
      guard let httpResponse = response as? HTTPURLResponse, let
      receivedData = data
      else {
         print("error: not a valid http response")
         return
      }
      switch (httpResponse.statusCode) {
         case 200:
            //success response.
            break
         case 400:
            break
         default:
            break
      }
   }
   dataTask.resume()
}

注意 - 您可能需要在info.plist文件中允许传输安全异常才能访问某些API。

此示例未显示任何输出,因为需要API才能获取一些数据。

更新于: 2020年6月30日

117 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告

© . All rights reserved.