ในการเข้าถึง REST API อย่างรวดเร็ว เราต้องทำตามขั้นตอนต่างๆ โดยใช้วิธีการดั้งเดิมของเครือข่ายอย่างรวดเร็ว ซึ่งก็คือการใช้เซสชัน URL และงานข้อมูล
Rest ย่อมาจาก Representational State Transfer ซึ่งกำหนดข้อจำกัดบางชุดที่จะใช้โดยบริการบนเว็บ เราสามารถเข้าถึงบริการเว็บได้อย่างรวดเร็วด้วยวิธีต่อไปนี้
ก่อนอื่น เราต้องสร้างเซสชันวัตถุ ซึ่งเป็นการกำหนดค่าเริ่มต้น
let configuration = URLSessionConfiguration.default let session = URLSession(configuration: configuration)
จากนั้นเราต้องสร้างคำขอ URL แบบที่เราต้องการ สามารถรับ โพสต์ ลบ หรือใส่ได้ ในตัวอย่างนี้ เราเห็นประเภท ”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")
เมื่อเราสร้างวัตถุคำขอแล้ว เราจำเป็นต้องดำเนินการ dataTask ด้วย URL ที่เราเพิ่งสร้างขึ้นด้านบน นี่คือลักษณะวิธีการ 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() }
หมายเหตุ − คุณอาจต้องอนุญาตข้อยกเว้น Transport Security ในไฟล์ info.plist เพื่อเข้าถึง API บางตัว
ไม่มีผลลัพธ์ที่แสดงในตัวอย่างนี้ เนื่องจากจำเป็นต้องใช้ API เพื่อรับข้อมูล