API
'Application Programming Interface'์ ์ฝ์๋ก, ํ๋ก๊ทธ๋จ๋ค์ด ์ํตํ ์ ์๋ ์ธํฐํ์ด์ค๋ผ๊ณ ํฉ๋๋ค.
(ํ๋ก๊ทธ๋จ๋ค์ ์ํต์ ๋น์ฐํ code๋ก ํ๊ฒ ์ฃ ?!) ๐ฉ๐ป๐ป
๊ทธ๋ ๋ค๋ฉด ์ธํฐํ์ด์ค๋ ๋ญ๊น์?!
์ฌ์ ์ ์๋ฏธ๋ก๋ '์ด๋ ํ ๋ ๊ฐ์ง์ ์์ฌ์ํต์ ๋ชฉ์ ์ผ๋ก ๋ง๋ค์ด์ง ๋ฌผ๋ฆฌ์ , ๊ฐ์์ ๋งค๊ฐ์ฒด'์ ๋๋ค.
๊ต์ฅํ ์ถ์์ ์ธ ์๋ฏธ์ด๊ธด ํ์ง๋ง, ์ ํฌ๋ ์ด๋ฏธ ๋ง์ ์ธํฐํ์ด์ค๋ค์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค!
๊ทธ์ค์ ํ๋๋ก UI(User Interface : ์ฌ์ฉ์ ์ธํฐํ์ด์ค)์ ํ๋์ธ GUI(Graphic User Interface)๊ฐ ์์ต๋๋ค.
์ง๋ ํฌ์คํ ์์, CLI์ GUI์ ๋ํ ์ฐจ์ด์ ๋ํด์ ์ด์ผ๊ธฐํ์์ต๋๋ค :)
์ง๊ด์ ์ผ๋ก UI๋ ๋์งํธ ๊ธฐ๊ธฐ์ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค! ์๋ฅผ ๋ค์ด, ์ ํฌ๊ฐ ์ฑ์ ์ฌ์ฉํ ๋ ๋ง์ฃผํ๋ ๋ชจ๋ ๋์์ธ, ๊ธฐ์ ๋ฑ์ ์ ๋ฐ์ ์ธ ๋ชจ๋ ๊ฒ๋ค์ ํฌํจํ๋ ๊ฑฐ์ฃ !
์ฐ์ ์ธํฐํ์ด์ค์ ๋ํ ์ค๋ช ์ ์ฌ๊ธฐ๊น์ง ํ๊ณ ์ค๋์ ์ฃผ์ ์ธ API๋ก ๊ฐ๋ด ์๋ค.
์ฒ์ ๊ณต๋ถํ๋ฉด์ ์ ๋ API์ ๋ํ ์ง๊ด์ ์ธ ์ดํด๋ฅผ ํ๊ณ ์ถ์ด์ ๋ง์ ์๋ฃ๋ฅผ ์ฐพ์๋ดค๋๋ฐ, ์ด ๋ง์ด ๋ฑ ์๋ฟ์์ต๋๋ค.
"API๋ ํค๋ณด๋์ ์ ์ฌํ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค!" - ๋ ธ๋ง๋ ์ฝ๋
ํค๋ณด๋์ ๊ธฐ๋ฅ๋ค์ด ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์์ ํ๋์ง๋ ์ ์ ์์ง๋ง, ์ด๋ ํ ๋ฒํผ์ ๋๋ฅด๋ฉด ๊ฒฐ๊ณผ๊ฐ์ ๋๋ ค๋ฐ์ ์ ์์ด์!
์์ฆ ํ์๊ฐ์ ํ ๋ ์นด์นด์ค๋ก ๋ก๊ทธ์ธ, ๊ตฌ๊ธ๋ก ๋ก๊ทธ์ธ, ๋ค์ด๋ฒ๋ก ๋ก๊ทธ์ธ ๋ฑ์ ์๋น์ค๊ฐ ๊ต์ฅํ ๋ง์ฃ ?
์ด๋ค ์ฝ๋๋ก ํด๋น API๊ฐ ์ด๋ฃจ์ด์ง๋์ง๋ ์ ์ ์์ง๋ง, ํด๋น ๊ธฐ๋ฅ์ ์ด์ฉํ ์๋ ์์ฃ ?
HTTP์ HTTPS ๊ทธ๋ฆฌ๊ณ REST API
HTTP(HyperText 1 Transfer Protocol)๋ ์ปดํจํฐ๋ค์ ํต์ ๊ท์ฝ(protoco) ์ค ํ๋๋ก, ์น์์ ์ฌ์ฉํ๋ ํ๋กํ ์ฝ 2์ ๋๋ค.
์ฝ๊ฒ ๋งํด ์ปดํจํฐ๋ค์ด ํต์ ๊ฐ์ ์ฌ์ฉํ๋ "ํ์"์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฌ์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์๋ ์ด๋ฏธ์ง๋ ์ฌ๋์ด ์๋ ํ์์ ๋๋ค. ๋ณด๋ด๋ ์ฌ๋, ์ด๋ฆ, ์ฐํธ๋ฒํธ ๋ฑ์ ์ ๋ ํ์!
ํ์ง๋ง ์ปดํจํฐ๋ ๋ชป ์์๋ฃ๊ฒ ์ฃ ? HTTP๋ ์ปดํจํฐ๊ฐ ์์๋ค์ ์ ์๋ ํ์! ์ธ ๊ฒ๋๋ค!
๊ทธ๋ ๋ค๋ฉด ๊ตฌ๊ธ ํํ์ด์ง URL ์์ https๋ ๋ฌด์์ผ๊น์?
HTTPS(HyperText Transfer Protocol Secure)
HTTPS์ S๋ Secure ๋จ์ด ๊ทธ ๋ป ์์ฒด๋ก ์์ , ๋ณด์์ ๋๋ค.
HTTP์์ S, ์์ ์ด ์ถ๊ฐ๋์ด HTTP protocol์ ์ํธํ๋ ๋ฒ์ ์ผ๋ก ์๊ฐํ์๋ฉด ๋๋๋ฐ์,
๋ฏผ๊ฐํ ์ ๋ณด๋ฅผ ์๋ฒ์ ์์ ํ๊ฒ ์ฃผ๊ณ ๋ฐ๋๋ก ๋์์ค๋ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๊ธ์ต ํ๋์ด๋ ์จ๋ผ์ธ ์ผํ!
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๋์ค๋ ๊ฐ๋ ์ด ๋ฐ๋ก ์ํธํ! ๋์นญํค, ๋น๋์นญํค ๊ฐ๋ ์ ๋๋ค. ํด๋น ๊ฐ๋ ์ ๋ค์ ํฌ์คํ ์ ๊ฐ๋ณ๊ฒ ๋ค๋ฃจ๊ฒ ์ต๋๋ค!(์๊ณ ํธ)
REST API (REpresentational State of Transfer)
REST(REpresentational State)
- HTTP ๋ฅผ ์ฌ์ฉํ ๋ ํน์ ๊ฐ์ด๋๋ผ์ธ๋ค์ ์ ์ํ๋ ๊ฒ
- ์ฆ, REST ์ํคํ ์ณ๋ HTTP๋ฅผ ์ฌ์ฉํ ๋ ์ผ์ข ์ ๊ฐ์ด๋๋ผ์ธ์ ์ ์ํด์ ์น API ์ ํผ๋ ์์ ์ง์๋ฅผ ์ธ์ฐ๋ ค๊ณ ํ๋ ๊ฒ
- HTTP ์์ฒญ์ ๋ณด๋ผ ๋, ์ด๋ค URI์ ์ด๋ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ง ๋ฑ์ ๋ํ ๊ฐ๋ฐ์๋ค ์ฌ์ด์์ ๋๋ฆฌ ์ง์ผ์ง๋ ์ฝ์๐ค
REST API
- REST ๊ธฐ๋ฐ์ผ๋ก ์๋น์ค API๋ฅผ ๊ตฌํํ ๊ฒ
- ์น์์ ์ฌ์ฉํจ(HTTP ๊ฐ์ด๋๋ผ์ธ์ด๊ธฐ ๋๋ฌธ์ ๋น์ฐํ๊ฒ ์ฃ ?!)
RESTful API
- REST๋ผ๋ ๊ฐ์ด๋๋ผ์ธ์ ๋ชจ๋ ์งํค๋ API
์ ๊ฐ ์ดํดํ ์ธ์ด๋ก ๊ฐ๋จํ๊ฒ REST์ ๋ํด ์์๋ณด์์ต๋๋ค! ์ถ๊ฐ์ ์ธ ๋ด์ฉ์ HTTP ๋ฉ์๋๋ฅผ ์ง์ ์ฌ์ฉํด ๋ณด๋ฉฐ ํฌ์คํ ์ผ๋ก ์ค๋นํด๋ณด๊ฒ ์ต๋๋ค :) ๋ฉ์๋๋ฅผ ์กฐ๊ธ ๋ ์๊ณ ์ถ์ ๋ถ๊ป๋ ํ๋จ reference์ ์๋ ์์ฝ ์ ํ๋ธ ์ถ์ฒ๋๋ฆฝ๋๋ค!
python์ผ๋ก API ์ฌ์ฉํด๋ณด๊ธฐ
OpenWeather์ด๋ผ๋ ์ฌ์ดํธ์์ ์งํํ๊ฒ ์ต๋๋ค. ํ์๊ฐ์ ๋ง ํ์๋ฉด ๋ฌด๋ฃ๋ก API key๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
์๋ ์ฌ์ง์ฒ๋ผ ํ์๊ฐ์ -> ๋ณธ์ธ์ ๋๋ค์ ํด๋ฆญ -> My API Keys์ ๋ค์ด๊ฐ์๋ฉด default๋ก ์ด๋ฏธ ์ฃผ์ด์ ธ์๊ณ , ์ถ๊ฐ๋ก ๋ง๋ค ์๋ ์์ต๋๋ค!
์ฌ์ดํธ์์ API๋ผ๋ ๋ฉ๋ด๋ฐ๋ฅผ ๋๋ฅด๋ฉด, ๋ค์ํ API๋ฅผ ํ์ธํ์ค ์ ์๊ณ , ์ ๋ Current Weather Data API๋ฅผ ์ฌ์ฉํ์ต๋๋ค!
Current Weather Data API๋ฅผ ํด๋ฆญํ๋ฉด, API call, Parameter ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์๊ฐ๋์ด ์์ต๋๋ค.
์ ๋ ๋์์ ์ด๋ฆ์ผ๋ก ๋ ์จ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ 'By city name'์ผ๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
์ฐธ๊ณ ๋ก Parameters์์ required๋ ํ์๋ก ์ ๋ ฅ์ด ๋์ด์ผ ํ ๊ฐ, optional์ ์ ํ์ฌํญ์ด์์!
ํํ์ด์ง์ ์๋ ์ฝ๋์์ ํ์ธํ ์ ์๋ฏ์ด ๋์์ ์ด๋ฆ๊ณผ ๋ณธ์ธ์ API key๋ฅผ ์ ๋ ฅํ๋ฉด ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์ ์์ต๋๋ค.
(์๋ ์ฝ๋์์๋ https๊ฐ ๋ช ์๊ฐ ์ ๋์ด์์ง๋ง, ๊ธฐ๋ณธ์ ์ธ ์ฌํญ์ด๋ผ ์๋ตํ ๊ฒ์ ๋๋ค)
api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}
์ฐธ๊ณ ๋ก ์๋ ์ด๋ฏธ์ง์ฒ๋ผ ํด๋น ์ฃผ์๋ฅผ ๊ทธ๋๋ก ๋ธ๋ผ์ฐ์ ์ฐฝ์ ์ ๋ ฅํ๋ฉด json ํํ๋ก ๋ฐ๋ก ํ์ธ๋ ๊ฐ๋ฅํด์!
์ ๋ optional์ผ๋ก ํ๊ตญ์ด 3๋ก ์ ๊ณตํ๋๋ก ์ต์ ์ ์ถ๊ฐํ์ด์:)
๊ทธ๋ฌ๋ฉด ์ด์ ํ์ด์ฌ์์ ๊ฐ์ง๊ณ ์๋ณผ๊ฒ์!
import requests
import json
API_URL = "https://api.openweathermap.org/data/2.5/weather?q={city name}&appid={API key}"
response = requests.get(API_URL)
print(response.text)
ํ์ด์ฌ์์๋ ์ ๊ฐ์ง๊ณ ์์ง๋๋ค! ์ฝ๋๋ฅผ ๋ณด์๋ฉด ์์๊ฒ ์ง๋ง txt ์ฆ, ํ ์คํธ ํ์ผ๋ก ๊ฐ์ง๊ณ ์์ด์!
ํด๋น txt๋ฅผ json์ด๋ dictionary๋ก ๋ฐ๊พธ๋ ์ฝ๋๋ฅผ ์๊ฐํฉ๋๋ค!
response = requests.get(url)
# print(response.text)
parsed_data = json.loads(response.text) # JSON -> dictionary
to_json = json.dump(parsed_data) # dictionary -> JSON
cities = [
"London",
"Seoul",
"Sydney"
]
for city in cities:
city_url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={myAPIkey}&lang=kr"
response = requests.get(city_url)
parsed_data = json.loads(response.text)
print(f"๋์ : {city}\t๋ ์จ : ", parsed_data['weather'][0]['description'])
cites๋ผ๋ list๋ฅผ ๋ง๋ค๊ณ , for ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํ์ฌ ๋ฝ์๋ณด์์ต๋๋ค.
์ ์ฝ๋์์ {myAPIkey}๋ผ๊ณ ์ ํ ๋ถ๋ถ์๋ ๊ผญ ์์ ์ key๋ฅผ ์ ์ด์ฃผ์ ์ผ ํฉ๋๋ค! :)
์ด์ API์ ๋ํด ๊ณต๋ถํ๊ณ , ๊ฐ๋จํ ์ค์ตํ ๋ด์ฉ์ ๋ํ ๊ธฐ๋ก์ ๋๋ค:)
๋ค์ ํฌ์คํ ์์ ๋ค๋ฅธ API, ๋ ์ฌํ๋ ์ค์ต์ ๊ธฐ๋กํ๊ฒ ์ต๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
REFERENCE
- ๊ณต์ ์๋ฃ
- HTTP : https://ko.wikipedia.org/wiki/HTTP
- HTTPS : https://developer.mozilla.org/ko/docs/Glossary/https
- HTTP method : https://restfulapi.net/http-methods/
- ์ ํ๋ธ ์์
- ์ด๋ฏธ์ง ์ฐธ์กฐ
- HyperText๋ ์ฐธ์กฐ(ํ์ดํผ๋งํฌ)๋ฅผ ํตํ์ฌ ํ ๋ฌธ์์์ ๋ค๋ฅธ ๋ฌธ์๋ก ์ฆ์ ์ ๊ทผํ ์ ์๋ ํ ์คํธ๋ฅผ ๋งํจ. [๋ณธ๋ฌธ์ผ๋ก]
- ํ๋กํ ์ฝ์ ์ข ๋ฅ๋ ๋งค์ฐ ๋ง๋ค. ์น์์ ์ฌ์ฉํ๋ HTTP ์ธ์๋ ์ด๋ฉ์ผ๊ณผ ๊ด๋ จ๋ ์์ ์ ํ๋ IMAP, SMTP๋ฑ ๋ค์ํ ์ข ๋ฅ๊ฐ ์์ต๋๋ค. [๋ณธ๋ฌธ์ผ๋ก]
- lang=kr [๋ณธ๋ฌธ์ผ๋ก]
'๐ฉ๐ปโ๐ป Programming > programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[home brew&git] Mac M1pro home brew๐บ & git ์ค์นํ๊ธฐ (0) | 2021.12.18 |
---|---|
[HTTPS]๋์นญํค์ ๋น๋์นญํค & ๊ณต๊ฐํค ์ํธํ ๋ฐฉ์ (0) | 2021.11.30 |
[๊ฐ์ํ๊ฒฝ] ๊ฐ์ํ๊ฒฝ์ด๋ & ์๋์ฝ๋ค ์ค์ต๊ณผ ๋ช ๋ น์ด ๋ชจ์๐ (0) | 2021.11.27 |
[git] git๊ณผ github๋ & git ๋ช ๋ น์ด ๋ชจ์zip in CLI (2) | 2021.11.19 |
์ ๋์ค ์ปค๋งจ๋ ๋ผ์ธ ์์๋ณด๊ธฐ๐ (0) | 2021.11.16 |