: Application Programing Interface, 프로그램들이 소통할 수 있는 인터페이스
: HyperText Transfer Protocol, 컴퓨터들의 통신규약 중 하나
한 컴퓨터가 다른 컴퓨터에 리소스 요청을 보낼 때 사용
요청하는 컴퓨터는 클라이언트라고 부르고 요청 받는 컴퓨터는 서버라고 부름
Create
데이터 생성 - post
Read
데이터 읽기 - get
Update
데이터 수정patch
일부 수정put
전체 수정 like replace
Delete
데이터 삭제 - delete
클라이언트 측에서 요청을 보내게 된 경우 서버 측에서도 다양한 응답 보내게 됨
이때 각 응답은 상태코드라는 것을 가지고 있음
🔎 추가적인 내용은
HTTP google status
쳐보기
(창에서 F12 > network탭
에서 확인 가능)
Request URL
: 누가 요청을 하고있는지를 담고 있음Request Method
: 이전에 봤던 HTTP 요청 메소드 중에 GET, 리소스를 가져온다는 뜻인 메소드를 사용하고 있음Status Code
: 200 숫자 앞에 초록불. 200은 'OK'으로 성공했다는 뜻. 여기에서는 GET요청이 성공적이었다는 뜻이 됨Remote Address
: 어느 리모트 서버에 요청을 하고 있는지 알려주고 있음. 현재는 142.250.206.196의 443 포트에 요청을 보내고 있음Referrer Policy
: 요청을 보내는 곳이 당사자인지, 타 웹사이트에서 연결된 건지 등을 알려줌. 현재는 origin으로 현 웹사이트에서 보내고 있음: REpresentational State of Transfer
일종의 가이드라인을 제시해서 웹 API 혼란 속에 질서를 세우는 것
→ API가 다 따라야하는 것은 아님
RESTful API
라고 부를 수 있음GET
요청은 REST 에서 정보나 리소스를 가지고 올 때만 사용하라고 제시된다
즉, 서버에 기록된 데이터나 리소스를 변경할 때 사용해서는 안된다는 뜻
이처럼 기존 리소스에 대한 변경을 하지 않고 그저 가져오는 역할을 하기 때문에 '안전한' 메소드라고도 볼 수 있습니다. 또한 하나의 GET 요청은 매번 동일한 결과를 나타내야 합니다 (서버의 리소스가 변경되지 않았다는 가정하에).
GET 요청 예시:
1. HTTP GET http://www.appdomain.com/users
2. HTTP GET http://www.appdomain.com/users?size=20&page=5
3. HTTP GET http://www.appdomain.com/users/123
4. HTTP GET http://www.appdomain.com/users/123/address
주소만 봐도 어떤 리소스를 가져올 수 있는지 파악가능
기존 HTTP 상태 코드에서 더 사용이 되는 부분들이 있다는 점 참고
Weather API - OpenWeatherMap 을 사용해서 활용
weather api
가입API 탭
에서 current weather data 이용https://api.openweathermap.org/data/2.5/weather?q={city}&appid={my_api_key}&lang=kr(lang은 생략가능)
각 부분을 채워주면 아래와 같이 확인 가능
import requests
import json
API_URL = "https://api.openweathermap.org/data/2.5/weather?lat=37.5666791&lon=126.9782914&appid={api_key}&lang=kr"
raw_data = requests.get(API_URL)
parsed_data = json.loads(raw_data.text)
print(parsed_data)
import requests
import json
API_URL = "https://api.openweathermap.org/data/2.5/weather?lat=37.5666791&lon=126.9782914&appid={api_key}&lang=kr"
raw_data = requests.get(API_URL)
parsed_data = json.loads(raw_data.text)
print(parsed_data['weather'][0]['description']) # 각 부분에 접근 가능
cities = [
"London",
"Seoul",
"Berlin",
"Sydney"
]
for city in cities:
url = f"https://api.openweathermap.org/data/2.5/weather?q={city}&appid={api_key}&lang=kr"
response = requests.get(url)
parsed_data = json.loads(response.text)
print(f"도시:{city} \t 날씨:{parsed_data['weather'][0]['description']}")
#https://www.javatpoint.com/weather-api-python
import requests
def get_weather_data(api_key, city_id):
api_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"id": city_id,
"units": "metric",
"appid": api_key
}
response = requests.get(api_url, params=params)
data = response.json()
return data
api_key = "my_api_key"
city_id = "1835847" # Moscow 1835847 city_id: https://m.blog.naver.com/wideeyed/221335980042
data = get_weather_data(api_key, city_id)
print(data)
import json
def get_temperature(data):
temperature = data["main"]["temp"]
return temperature
temperature = get_temperature(data)
print(f"Temperature: {temperature}°C")
def create_weather_report(data):
report = "Weather Report:\n"
city = data["name"]
report += f"City: {city}\n"
temperature = data["main"]["temp"]
report += f"Temperature: {temperature}°C\n"
humidity = data["main"]["humidity"]
report += f"Humidity: {humidity}%\n"
wind_speed = data["wind"]["speed"]
report += f"Wind Speed: {wind_speed} m/s\n"
return report
report = create_weather_report(data)
print(report)
🎠 오늘의 회고
과제 없이 실습만 조금 따라해볼 수 있는건 좋다... 내일 이걸 활용해서 과제하려고 일부러 오늘꺼는 빼주신 것 같긴한데... 그래도 하루라도 과제 없어서 못한 과제 할 수 있는게 어디냐!!!!! ㅠ_ㅠ
API개념을 그냥 쓰고는 있었는데 구체적으로 알게된건 처음이다. 어렴풋이는 알겠는데 설명하기가 어렵다. 결국 잘 모르겠다는 이야기ㅋㅋ. 근데 이건 처음부터 내가 코드를 짜서 쓰는건 아니고 되어있는 걸로 활용만 하면 되는거라서 좀 낫다. 카카오 로그인 api 받을 때도 친절하게 설명이 잘되있어서 (그래도 어려웠지만,,, 이틀넘게 걸렸지만,,,,) 그나마 편히 사용했던 기억이 있다. 꾸역꾸역했던 졸작이 그래도 의미가 있었다! 그걸로 기분 좋아짐. 내일이 되봐야겠지만, 개념은 조금 아리송하지만 이정도인걸로 만족... 이것도 사실 새발의 피겠지만 ㅋ