[iOS] REST API 사용, Entity 작성

김상우·2022년 5월 23일
0
post-custom-banner

ref : 얄코 https://www.youtube.com/watch?v=iOueE9AXDQQ
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html


API 란

  • API (Application Programming Interface)

먼저 Interface 의 개념을 정리해보자. 어떤 기계를 만들면, 사용자가 그 기계를 전부 활용할 수 있도록 제어장치를 마련해야 한다. 예를들어, TV 를 만들었다면 사용자가 TV 를 켜거나 끄고, 음량, 채널을 제어할 수 있어야 한다. 그래서 리모콘이 있다. 컴퓨터에는 키보드와 마우스가 있다. 이런 것들을 "인터페이스 (Interface)"라고 한다.

소프트웨어의 영역에서 다시 보면, 웹 사이트가 있을 때 사용자는 '스크롤 바' 를 이용해서 올리거나 내릴 수 있어야 하고 '버튼'을 클릭해서 다음 페이지로 넘어가거나 할 수 있는 제어권이 있어야 한다. 이런걸 "UI (User Interface)" 라고 한다.

API 는 말 그대로 '애플리케이션 을 프로그래밍하는데 필요한 인터페이스' 다. 예를들어 기상청 서버는 '날씨에 대한 데이터'를 가지고 있다. 기상청 서버에서 날씨 데이터를 가져와 '날씨 사이트' 혹은 '날씨 앱'등을 개발하고 싶은 개발자는 '데이터를 가져와 사용하는 제어권, 설명서' 가 필요할 거다. 그게 바로 API 다.

다시 말하면 API 는 데이터를 주고 받는데 필요한 명세서, 국룰 이라고 이해할 수 있다. 개발자야, 너가 날씨 데이터를 가져다 쓰고 싶다면, 너 마음대로 신호를 보내지말고 "date:191031|place:seoul|which:temperature" 라는 우리가 약속한 형식으로 데이터를 보내. 그럼 내가 "17degree" 라는 형식으로 응답을 보낼게. 라는 국룰을 정한거다.


REST API 란

  • REST API 는 RESTful 한 API
  • RESTful 하다 : 서버에 요청을 보낼때 HTTP 라는 규약에 따라 신호를 전송한다. GET, POST, DELETE, PUT 등을 사용한다.
  • REST API 는 정보들이 주고 받아지는데 있어서 개발자들 사이에 널리 쓰이는 일종의 형식, 어떤 URI 에 어떤 메소드를 사용할지 개발자들 사이에 널리 지켜지는 약속
  • REST API 의 큰 특징 중 하나는 각 요청이 어떤 동작이나 정보를 위한 것인지를 그 요청의 모습 자체로 추론이 가능하다는 것.

Postman 으로 REST API 살펴보기

  • Postman 을 사용하면 API 데이터를 간편하게 살펴볼 수 있다.
  • 예를들어, 카카오의 로컬 API 같은 경우에는 이렇게 사용한다.

Host (또는 baseURL) 을 입력하고, 메소드(GET, POST 등 path) 입력해준다.

그리고 Params (파라미터)에 여러가지 값을 넣어준다.

Authorization 은 Headers 에 넣어준다.


Entity 작성

  • Entity 는 클린 아키텍처에서 가장 안쪽 영역인 Domain 영역에 해당하는 데이터

  • Swift 에서는 Codable 프로토콜을 사용해서 Entity 를 작성한다. 그리고 CodinggKey 프로토콜을 사용해서 네이밍을 변경할 수 있다.
import Foundation

struct KLDocument: Decodable {
	let placeName: String
  	let addressName: String
 	let roadAddressName: String
  	let x: String
  	let y: String
  	let distance: String
  
  	enum CodingKeys: String, CodingKey {
		case x, y, distance	// api 파라미터와 똑같으면 그대로
  		case placeName = "place_name" 	// 다르면 대입
  		case addressName = "address_name"
  		case roadAddressName = "road_address_name"
  	}
}
profile
안녕하세요, iOS 와 알고리즘에 대한 글을 씁니다.
post-custom-banner

0개의 댓글