API(Application Programming Interface)란
응용 프로그램(어플리케이션)에서 사용할 수 있도록 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스입니다.
쉽게 말해, 소프트웨어와 소프트웨어가 서로 소통할 수 있게 해주는 '약속' 혹은 '규칙'입니다.
- API의 필요성
코드 재사용성: 이미 만들어진 기능을 다시 개발하지 않아도 됨
표준화: 여러 개발자가 동일한 방식으로 기능을 사용할 수 있음
유지보수 용이: 내부 구현이 바뀌어도 API만 유지된다면 외부 프로그램에는 영향이 없음
- API의 종류
3.1 오픈 API (Public API)
- 누구나 사용할 수 있도록 공개된 API 예) 구글 맵 API, 트위터 API
3.2 프라이빗 API (Private API)
- 특정 조직 내부에서만 사용하는 API
3.3 파트너 API (Partner API)
- 특정 파트너에게만 공개하는 API
- API의 동작 방식
- 클라이언트가 API에 요청(Request)을 보냄
- 서버가 요청을 받아 처리
- 처리 결과를 응답(Response)으로 반환
영화진흥위원회 오픈API
https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do
[영화진흥위원회 오픈API
OPEN API 서비스 영화진흥위원회 영화관입장권통합전산망에서 제공하는 오픈API 서비스로 더욱 풍요롭고 편안한 영화 서비스를 즐겨보세요.
www.kobis.or.kr](https://www.kobis.or.kr/kobisopenapi/homepg/main/main.do)

2025년 05월 01일 영화 일별 박스오피스


RESTful
- REST(REpresentational State Transfer)는 HTTP 기반의 소프트웨어 아키텍처스타일
- REST 설계 지침을 따르는웹서비스를RESTful이라함
REST(REpresentational State Transfer)
- 웹에서 정보를 주고받는 방법(아키텍처 스타일)
- 웹에서 컴퓨터들이 데이터를 주고받는 규칙
REST의 특징
- 리소스(resource)
- 인터넷에 존재하는 모든정보(회원, 게시글 등)
- 예: /users/1 (1번 회원), /posts (게시글 전체)
- 주소(URI, URL):
- 리소스마다 주소가 있음
- 예: https://site.com/users/1
- 행동(HTTP 메서드):
- 어떤 행동을 할지 정하는 방법
- GET (가져오기), POST (생성), PUT (수정), DELETE (삭제)
- 1번 유저 정보 가져오기
- GET/users/1
RESTful
- REST의 규칙을 최대한 잘 지켜서 만든 서비스
- REST의 원칙대로 주소(URI)와 동작(HTTP 메서드)을 깔끔하게 잘 설계한 API는 “RESTful”하다.
- RESTful한 API 예
- GET /users → 회원 목록 보기
- GET /users/1 → 1번 회원 정보 보기
- POST /users → 새 회원 추가
- PUT /users/1 → 1번 회원 정보 수정
- DELETE /users/1 → 1번 회원 삭제
- RESTful하지 않은 예
- 주소에 동작이 섞여있음
- POST /users/getUser → 회원 정보 보기
- GET /users/deleteUser → 회원 삭제
RESTful API 와 HTTP 전송방식

RESTful API 에서 HTTP 메소드의 종류

REST vs SOAP

XML(Extensible Markup Language)
- 파싱(Parsing)
- XML데이터를 추출하여 분석
- 파싱을 처리하는 모듈을 파서(parser)라 함
- 장점 - 플랫폼 독립적
- 단점 - 마크업 태그를 사용하므로 데이터량 큼
JSON(JavaScript Object Notation)
- XML의 단점을 극복하기 위해 만들어진 경량의 데이터 교환 형식
- 집합구조: 여러가지 속성을 다양하게 정의할 수 있는 집합구조 { }
- 리스트구조: 비슷한 상황이 반복되는 리스트 구조 [ ]
JSON의 구조
- name/value 형태의 쌍
- collection 타입
- 프로그래밍 언어에서 object, record, struct, dictionary, hash table, 키가 있는 list 등
{ "이름": "김컴소", "나이": 20, "성별": "남" }
{ "이름": "김컴소",
"나이": 20,
"성별": "남",
"전화": {"휴대" :"010-1111-2222", "집" : "02-1111-2345"}
}
Open API를 이용한 앱개발단계
- 원하는 정보를 제공하는 웹 서비스와 사용할 Open API 선정
- Open API 사용을 위한 신청과 인증키 발급
- 네트워크를 통해 데이터 요청
- 받은 데이터를 파싱하여 앱에서사용

- 버스 도착 알림 / 푸시 서비스를 만들어 보고 싶습니다
1급 객체 (first class object) / 1급 시민 (first class citizen)
- Swift의 함수는 1급 객체이다.
- 1) 변수에 저장할 수 있다.
- 2) 매개변수로 전달할 수 있다.
- 3) 리턴값으로 사용할 수 있다.
func up(num: Int) -> Int {
return num + 1
}
func down(num: Int) -> Int {
return num - 1
}
let toUp = up
print(up(num: 10))
print(toUp(10))
let toDown = down
func upDown(fun: (Int) -> Int, value: Int) {
let result = fun(value)
print("결과 = \(result)")
}
upDown(fun: toUp, value: 10)
upDown(fun: toDown, value: 10)
func decideFun(x: Bool) -> (Int) -> Int {
if x {
return toUp
} else {
return toDown
}
}
let r = decideFun(x: true)
print(type(of: r)) // (Int) -> Int
print(r(10))
클로저 ( Closure)

클로저표현식

후행클로저(trailing closure)

후행클로저(trailing closure) 예
func mul(a: Int, b: Int) -> Int {
return a * b
}
let multiply = { (a: Int, b: Int) -> Int in
return a * b
}
print(mul(a: 10, b: 20))
print(multiply(10, 20))
let add = { (a: Int, b: Int) -> Int in
return a + b
}
print(add(10, 20))
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
var result = math(x: 10, y: 20, cal: add) // return add(10, 20)
print(result)
result = math(x: 10, y: 20, cal: multiply) // return multiply(10, 20)
print(result)
result = math(x: 10, y: 20, cal: { (a: Int, b: Int) -> Int in
return a + b
}) // 클로저 소스를 매개변수에 직접 작성
print(result)
result = math(x: 10, y: 20) { (a: Int, b: Int) -> Int in
return a + b
} // trailing closure
print(result)
- 클로저가 함수의 마지막 argument라면 마지막 매개변수이름(handler:)을 생략한 후 함수 소괄호 외부에 클로저를 구현
클로저의축약표현들
let multiply = { (a: Int, b: Int) -> Int in
return a * b // 연산자 띄어쓰기 수정
}
var result = multiply(10, 20)
print(result)
let add = { (a: Int, b: Int) -> Int in
return a + b // 연산자 띄어쓰기 수정
}
result = add(10, 20)
print(result)
func math(x: Int, y: Int, cal: (Int, Int) -> Int) -> Int {
return cal(x, y)
}
result = math(x: 10, y: 20, cal: add)
print(result)
result = math(x: 10, y: 20, cal: multiply)
print(result)
result = math(x: 10, y: 20, cal: { (val1: Int, val2: Int) -> Int in
return val1 + val2
}) // 클로저 소스를 매개변수에 직접 작성
print(result)
result = math(x: 10, y: 20) { (val1: Int, val2: Int) -> Int in
return val1 + val2
} // trailing closure
print(result)
result = math(x: 10, y: 20, cal: { (val1: Int, val2: Int) in
return val1 + val2
}) // 리턴형 생략
print(result)
result = math(x: 10, y: 20) { (val1: Int, val2: Int) in
return val1 + val2
} // trailing closure, 리턴형 생략
print(result)
result = math(x: 10, y: 20, cal: {
return $0 + $1
}) // 매개변수 생략하고 단축인자(shorthand argument name) 사용
print(result)
result = math(x: 10, y: 20) {
return $0 + $1
} // trailing closure, 매개변수 생략하고 단축인자 사용
print(result)
result = math(x: 10, y: 20, cal: {
$0 + $1
}) // 클로저에 리턴값이 있으면 마지막 줄을 리턴하므로 return 생략
print(result)
result = math(x: 10, y: 20) { $0 + $1 } // return 생략
print(result)
디폴트 매개변수 정의


출처 - Smile Han