如何在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.