본문 바로가기
iOS_Swift 앱개발👍

[iOS_Swift] HTTP 통신하기! (feat. API) _ 15

by 개발하는윤기사 2022. 8. 2.
728x90
반응형

안녕하세요! 개발하는 윤기사입니다!

 

오늘은 오랜만에 HTTP를 이용한 통신에 대한 포스팅을 준비해 왔습니다!!

 

바로 시작해 보시지요!

 

정...정신좀 차리고...!

 

HTTP : Hyper Text Transfer Protocol의 약자.

인터넷에서 데이터를 주고받을 수 있는 프로토콜

 

Request - Response의 방식을 가지고 있는데, 클라이언트의 요청이 있을 때 서버가 응답하는 방식을 뜻합니다! (단방향 통신)

 

서버가 클라이언트에게 먼저 정보를 주지 못하고, 꼭 클라이언트가 서버에 요청을 해서 데이터를 받아야 합니다. 

 

🍎 2가지 특징 

1. 비연결성(모든 클라이언트 요청에 대해 항상 새롭게 연결 & 해제)

2. 무상태(서버가 클라이언트의 정보를 기억하지 않음) 

 

 

HTTP 메서드는 GET, POST, PUT, DELETE 방식이 있습니다.

 

이번 포스팅에서 다뤄볼 것은 GET 방식입니다!

 

서버에 정보를 요청할 때 주로 사용되는 방식이지만, GET 방식은 URL에 데이터를 포함하여 요청하기 때문에, URL에 데이터가 노출되어 보안에 취약합니다!! 

 

 

 

예시를 하나 들어보겠습니다! 

 

버튼을 누르면 랜덤으로 맥주를 추천해주는 앱을 하나 만든다고 가정해보겠습니다.

 

그럼 이 앱에는 버튼을 누를 때마다 맥주 이름과, 맥주 이미지, 맥주에 대한 설명이 바뀌어야겠죠? 이 값을 API를 통해서 가져올 겁니다!

 

맥주 추천 해주는 앱!

 

사용한 오픈소스 라이브러리는 Alamofire와 SwiftyJSON 그리고 Kingfisher 3가지의 오픈소스 라이브러리를 사용했습니다.

오픈소스 라이브러리

 

 

1. 맥주 추천 뷰 컨트롤러를 하나 만들고, 맥주 이름은 Label, 맥주 이미지는 ImageView, 맥주에 대한 설명은 TextView, 맥주 랜덤 추천 Button을 스토리보드 상에 만들었습니다.

 

Label, ImageView, TextView, Button 추가!

 

2. 가져온 오픈소스 라이브러리에 대한 import를 필수로 해주고, 각 오브젝트를 연결해 줍니다. 

 

import 잊지 않기!!

 

저 같은 경우에는 Snippet을 이용해 저장을 해놨습니다.

 

Snippet 적극 활용!!

 

3. Postman 혹은 Insomnia를 이용해 URL을 입력해서 API를 가져옵니다! 

 

url : https://api.punkapi.com/v2/beers/random

Insomnia 이용

 

여기 한 가지 주의해야 할 점은 맥주의 "name"과 "description", "image_url"은 2차원 배열 안에 있다는 것입니다!

2차원 배열 안에 있는 정보를 가져와야 하기 때문에 주의해야 합니다!

 

2차원 배열이다!!

 

4. 오픈소스 라이브러리를 이용해 가져올 수 있다! (func requestBeerAPI()는 버튼이 눌렸을 때 @IBAcion에 실행시켜주면 되겠죠?)

 

- beerName 은 json의 0번째 배열의 "name"값을 String 타입으로 가져온다.

- beerDescription 은 json의 0번째 배열의 "description"값을 String 타입으로 가져온다.

- beerImageView는 json의 0번째 배열의 "image_url"값을 String 타입으로 가져와 Kingfisher를 통해 ImageView에 넣어준다.

 

완성!

 

🍎  추가 꿀팁!!

SSL 인증이 되지 않는 사이트에 관해서는 기본적으로 막고 있습니다.

Info.plist 에 들어가서 다음과 같이 설정을 진행해주면, https:// 와 http:// 둘 다 사용이 가능합니다!

info.plist -> Information Property List -> App Transport Security Settings -> Allow Arbitrary Loads 값을 YES로 바꿔주면 됩니다.

App Transport Security Settings

 

이상 HTTP를 통한 통신, API에 대한 포스팅을 마치겠습니다!

 

다음 포스팅에서는 더욱 알찬 내용 가지고 돌아오겠습니다!

 

과자도 좀 먹으면서... :)

 

728x90
반응형