- 프로토콜 (Protocol)
URL은 일반적으로 http:// 또는 https:// 와 같은 프로토콜로 시작한다.
- http:// -> 보안 없는 통신
- https:// -> SSL/TLS 암호화를 사용하여 보안된 통신을 나타낸다- 도메인 (Domain)
API 서버가 호스팅되는 서버의 주소를 나타낸다- 포트 (Port, 옵션)
포트 번호는 서버에서 API 요청을 수신하는데 사용되는 포트를 나타낸다. 대부분의 HTTP 기본 포트는 80이고, HTTPS의 기본 포트는 443 이다. 일반적인 경우, 기본 포트는 생략하다.- 경로 (Path)
서버에서 요청된 자원이나 서비스의 위치를 나타낸다. /users 경로는 사용자 지원에 대한 요청을 나타낸다. 경로는 엔드포인트와 관련되어 특정 지원이나 서비스를 식별한다- 쿼리 매개변수 (Query Parameters, 옵션)
URL에 추가 정보를 전달하는데 사용
?page=2&sort=desc 와 같이 사용자가 원하는 페이지 번호나 정렬 방법을 서버에 전달할 수 있다
REST는 HTTP 프로토콜을 기반으로 하며, 클라이언트와 서버 간의 통신을 위한 규칙을 정의한다
REST API에서는 모든 데이터가 자원으로 표현된다
이러한 자원은 고유한 식별자(URL)를 갖고 있다
자원은 고유한 식별자인 URI를 갖는다. URI는 자원을 찾을 수 있는 주소를 나타낸다.
- URL과 URI의 차이
URI는 리소스를 식별하기 위한 일반적인 용어이며, URL은 리소스의 위치를 나타내는 구체적인 형태의 URI라는 점에서 차이가 있다. https://example.com/users/123
자원의 상태는 여러 형식으로 표현될 수 있다. 일반적으로는 JSON 형식을 사용하여 데이터를 표현한다.
REST API는 클라이언트와 서버 간의 통신을 위해 연결을 유지하지 않는다. 각 요청은 독립적으로 처리된다
네트워크 데이터를 가져오거나 보내는 작업을 수행한다
import Foundation
// URLSession 인스턴스 생성
let session = URLSession.shared
// URL 생성
if let url = URL(String: "https://api.example.com/data") {
let task = session.dataTask(with.url) { (data, response, error) in
if let error = error {
print("Error: \(error)")
} else if let data = data {
print("Received data: \(data)")
}
}
task.resume()
}
import Foundation
// URLSession 인스턴스 생성
let session = URLSession.shared
// URL 생성
if let url = URL(string: "https://api.example.com/data") {
// URLSessionDataTask를 사용하여 비동기적으로 데이터 요청
// URLRequest 생성
var request = URLRequest(url: url)
// HTTP 메서드 설정 (POST)
request.httpMethod = "POST" // GET / PUT / DELETE 사용 가능
// HTTP 헤더 설정
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
// HTTP Body에 보낼 데이터 설정 (JSON 형식)
let parameters: [String: String] = [
"value1": "example value",
"value2": "example value"
// 추가적인 필요한 데이터 추가 가능
]
// HTTP Body에 JSON 데이터 설정
request.httpBody = try? JSONEncoder().encode(parameters)
let task = session.dataTask(with: request) { (data, response, error) in
if let error = error {
print("Error: \(error)")
} else if let data = data {
// 데이터를 받아온 후 처리하는 로직을 작성
print("Received data: \(data)")
}
}
// 네트워크 요청 시작
task.resume()
}