카테고리 없음

Swift - RESTful, Open API, 기타 문법

Jihyeonnn 2025. 5. 6. 16:42
REST?

(REpresentational State Transfer)

HTTP 기반의 소프트웨어 아키텍처 스타일로, 로이 필딩이 이를 정의했다.

특징으로는 resource, URI, URL, HTTP 메서드(GET, POST, PUT, DELETE)가 있다.

 

RESTful?

REST 설계 지침을 따르는 웹 서비스를 RESTful이라고 한다.

ex) REST의 원칙대로 깔끔하게 잘 설계한 API를 'RESTful하다' 로 표현

정보를 어떻게 다룰 것인가 하는 동작에 관한 명세는 포함하지 않을 것을 권고

= 정보의 분류 체계만 포함되어야 한다.

 

REST vs SOAP
항목 REST 방식 SOAP 방식
기본 요청 URL http://www.kobis.or.kr/kobisopenapi/webservice/rest/boxoffice/searchDailyBoxOfficeList.xml 또는 .json http://www.kobis.or.kr/kobisopenapi/webservice/soap/boxoffice
WSDL URL 해당 없음 http://www.kobis.or.kr/kobisopenapi/webservice/soap/boxoffice?wsdl
Operation GET 방식으로 호출 searchDailyBoxOfficeList
응답 형식 XML 또는 JSON (확장자 .xml / .json) XML (SOAP 표준 형식)
요청 방식 HTTP GET (3번항의 요청 인터페이스 참조) SOAP 메시지 기반 POST 방식
조회 조건 영화 구분(다양성/상업), 국적(한국/외국), 상영지역 등 동일 조건
특징 간단하고 가벼움. 확장자로 포맷 구분 가능 구조화된 메시지 형식, 정형화된 호출

 

XML

(Extensibe Markup Language)

파싱(Parsing)은 XML 데이터를 추출하여 분석하는 것을 말한다.(파싱을 처리하는 모듈: Parser)

장점은 플랫폼이 독립적이라는 것, 단점은 마크업 태그를 사용하여 데이터량이 크다는 것이다.

 

JSON

(JavaScript Object Notation)

XML의 장점은 그대로, 단점을 극복하기 위해 만들어졌다. (경량의 데이터량)

사람이 읽고 쓰기에도, 기계가 분석하고 생성하기에도 용이

  구분 형식 명칭
집합 구조 여러 속성을 정의하는 순서 없는 집합 { 키: 값, 키: 값, … } JSON 객체
리스트 구조 비슷한 객체가 반복 나열되는 순서 있는 리스트 [ 객체1, 객체2, … ] JSON 배열

 

API

(Application Programming Interface)

두 개 이상의 컴퓨터 프로그램이 서로 통신하는 방법

UI는 컴퓨터와 사람을 연결하지만 API는 컴퓨터나 소프트웨어를 서로 연결

ex) printf, Java SE APIs, Windows API, SQLIte API, OpenGL API, Open API 등

 

Open API

일부 웹사이트에서 제공하는 SOAP 프로토콜이나 RESTful 형식을 사용한 공공 콘텐츠

ex) 서울 열린 데이터 광장, 공공데이터포털, 네이버 Open API 등등

 

present(_:animated:completion:)
func present(
	_ viewControllerToPresent: UIViewController,
	animated flag: Bool,
	completion: (() -> Void)? = nil
)

//ex)
present(alert, animated: true, completion: nil)
//aleat라는 창 띄우기, 애니메이션 효과와 함께, 그 후 실행할 것 X (없으면 생략 가능)

모달 방식으로 새로운 뷰컨트롤러를 보여 준다.

(모달: 해당 뷰 컨트롤러를 없애야 원래 컨트롤러를 볼 수 있음)

present(표시할 뷰 컨트롤러:애니메이션 여부:뷰 컨트롤러 보여진 후 실행할 블록)

 

reverseGeocodeLocation(_:completionHandler:)
func reverseGeocodeLocation(_ location: CLLocation, completionHandler: @escaping CLGeocodeCompletionHandler)
//escaping 클로저 (@escaping): 클로저가 인자로 전달되었을 때, 함수 실행 종료 후 실행되는 클로저
//Non-Escaping 클로저는 이와 반대. 함수의 실행이 종료되기 전에 실행

 

클로저의 여러 축약 표현들
// 1. 기본 클로저 (매개변수 타입, 반환 타입, return 모두 명시)
let multiply = { (a: Int, b: Int) -> Int in
    return a * b
}

var result = multiply(10, 20)
print(result) // 200

// 2. 또 다른 기본 클로저 (덧셈용)
let add = { (a: Int, b: Int) -> Int in
    return a + b
}

result = add(10, 20)
print(result) // 30

// 3. 클로저를 매개변수로 받는 함수 정의
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
    return cal(x, y)
}

// 4. 클로저 상수를 매개변수로 전달
result = math(x: 10, y: 20, cal: add)
print(result) // 30

result = math(x: 10, y: 20, cal: multiply)
print(result) // 200

// ↓↓↓ 아래부터 클로저 표현 축약 단계 ↓↓↓

/* 5. 클로저를 함수 인자에 직접 작성
   - 타입 명시
   - 반환 타입 명시
   - return 키워드 사용 */
result = math(x: 10, y: 20, cal: { (val1: Int, val2: Int) -> Int in
    return val1 + val2
})
print(result) // 30

/* 6. trailing closure 사용
   - 마지막 인자가 클로저이면 괄호 바깥으로 뺄 수 있음 */
result = math(x: 10, y: 20) { (val1: Int, val2: Int) -> Int in
    return val1 + val2
}
print(result) // 30

/* 7. 반환 타입 생략
   - Swift가 문맥으로 리턴 타입을 추론 */
result = math(x: 10, y: 20, cal: { (val1: Int, val2: Int) in
    return val1 + val2
})
print(result) // 30

/* 8. trailing closure + 반환 타입 생략 */
result = math(x: 10, y: 20) { (val1: Int, val2: Int) in
    return val1 + val2
}
print(result) // 30

/* 9. 단축 인자 이름 사용 ($0, $1)
   - 매개변수 이름도 생략 가능 */
result = math(x: 10, y: 20, cal: {
    return $0 + $1
})
print(result) // 30

/* 10. trailing closure + 단축 인자 이름 */
result = math(x: 10, y: 20) {
    return $0 + $1
}
print(result) // 30

/* 11. return 생략
   - 클로저 마지막 표현식이 결과로 자동 반환됨 */
result = math(x: 10, y: 20, cal: {
    $0 + $1
})
print(result) // 30

/* 12. 최종 축약형: trailing closure + 단축 인자 + return 생략 */
result = math(x: 10, y: 20) { $0 + $1 }
print(result) // 30

 


+ JSON 파일로 파싱하기

 

모든 출처: youtube - smile han