swift에서 REST API에 액세스하려면 swift의 기본 네트워킹 방식, 즉 URL 세션 및 데이터 작업을 사용하는 일련의 단계를 거쳐야 합니다.
나머지는 Representational State Transfer의 약자로 웹 서비스에서 사용할 몇 가지 제약 조건을 정의합니다. swift에서는 다음과 같은 방법으로 웹 서비스에 액세스할 수 있습니다.
우선 기본 구성인 세션 개체를 만들어야 합니다.
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") 요청 객체를 생성했으면 위에서 방금 생성한 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()
} 참고 − 일부 API에 액세스하려면 info.plist 파일에서 전송 보안 예외를 허용해야 할 수도 있습니다.
일부 데이터를 가져오려면 API가 필요하므로 이 예에서는 출력이 표시되지 않습니다.