[N423] API

쥬쥬스·2023년 3월 28일
0

section4

목록 보기
8/15

API

: Application Programing Interface, 프로그램들이 소통할 수 있는 인터페이스

  • Interface : 소통수단. 물리적인 표준. 소프트웨어적인 프로토콜 정의
    소프트웨어간에 데이터를 주고받는 규칙

1. HTTP API

: HyperText Transfer Protocol, 컴퓨터들의 통신규약 중 하나

  • HTTP : 웹 통신을 하기 위한 프로토콜

HTTP Request

한 컴퓨터가 다른 컴퓨터에 리소스 요청을 보낼 때 사용
요청하는 컴퓨터는 클라이언트라고 부르고 요청 받는 컴퓨터는 서버라고 부름

CRUD에 사용되는 HTTP method

  • Create 데이터 생성 - post
  • Read 데이터 읽기 - get
  • Update 데이터 수정
    • patch 일부 수정
    • put 전체 수정 like replace
  • Delete 데이터 삭제 - delete

HTTP Response

클라이언트 측에서 요청을 보내게 된 경우 서버 측에서도 다양한 응답 보내게 됨
이때 각 응답은 상태코드라는 것을 가지고 있음

  • 100번대 : 정보응답
  • 200번대 : 성공응답
  • 300번대 : 리다이렉션 메시지, 추가 동작 필요
  • 400번대 : 클라이언트 에러 응답, 내가 어떤 것을 잘못함
  • 500번대 : 서버 에러 응답, 내가 아닌 서버에서 잘못됨

🔎 추가적인 내용은 HTTP google status 쳐보기

HTTP 예시

(창에서 F12 > network탭 에서 확인 가능)

  • Request URL : 누가 요청을 하고있는지를 담고 있음
  • Request Method : 이전에 봤던 HTTP 요청 메소드 중에 GET, 리소스를 가져온다는 뜻인 메소드를 사용하고 있음
  • Status Code : 200 숫자 앞에 초록불. 200은 'OK'으로 성공했다는 뜻. 여기에서는 GET요청이 성공적이었다는 뜻이 됨
  • Remote Address : 어느 리모트 서버에 요청을 하고 있는지 알려주고 있음. 현재는 142.250.206.196의 443 포트에 요청을 보내고 있음
  • Referrer Policy : 요청을 보내는 곳이 당사자인지, 타 웹사이트에서 연결된 건지 등을 알려줌. 현재는 origin으로 현 웹사이트에서 보내고 있음

2. REST API

: REpresentational State of Transfer
일종의 가이드라인을 제시해서 웹 API 혼란 속에 질서를 세우는 것
→ API가 다 따라야하는 것은 아님

  • 웹에서 활용하게 되는 API가 REST의 6가지 가이드라인을 모두 잘 따르면 해당 API를 RESTful API라고 부를 수 있음
  • REST는 가이드라인, 해당 가이드라인의 특징을 기반으로 API를 만들기 시작하면 REST API라고 부를 수 있음
  • tool : postman, curl

REST API 활용 예시 - GET 요청

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

주소만 봐도 어떤 리소스를 가져올 수 있는지 파악가능

  • 1번 같은 경우에는 /users 로 끝나고 서버에 기록된 유저들을 가져올 거라고 예상할 수 있음
  • 2번 같은 경우에는 마찬가지로 유저를 가지고 오지만 추가 쿼리 파라미터 (? 뒤에 오는 항목들)를 통해 페이지와 개수를 정해주고 있음
  • 3번 같은 경우에는 유저를 가지고 오지만 유저 목록 중에서 123 에 일치하는 유저를 가지고 올 거라는 예상을 할 수 있음
  • 4번 같은 경우에는 3번의 유저 정보에서 address 정보만 가지고 올 거라는 예상을 할 수 있음

HTTP Response

기존 HTTP 상태 코드에서 더 사용이 되는 부분들이 있다는 점 참고

  • 200 : OK
  • 201 : Created
  • 202 : Accepted
  • 204 : No Content
  • 301 : Moved Permanently

3. API 활용

Weather API - OpenWeatherMap 을 사용해서 활용

  1. weather api 가입
  2. API 탭에서 current weather data 이용
  3. 가이드라인대로 활용
  4. 내 api key 확인 (바로 활성화X, 시간이 조금 걸릴 수 있음)

① web site

https://api.openweathermap.org/data/2.5/weather?q={city}&appid={my_api_key}&lang=kr(lang은 생략가능)

각 부분을 채워주면 아래와 같이 확인 가능

② vscode

  1. 날씨 받아오기
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)

  1. 날씨 부분 접근
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']) # 각 부분에 접근 가능

  1. for문으로 접근
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']}")

  1. 오후 세션++
#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란?
REST API


🎠 오늘의 회고

과제 없이 실습만 조금 따라해볼 수 있는건 좋다... 내일 이걸 활용해서 과제하려고 일부러 오늘꺼는 빼주신 것 같긴한데... 그래도 하루라도 과제 없어서 못한 과제 할 수 있는게 어디냐!!!!! ㅠ_ㅠ
API개념을 그냥 쓰고는 있었는데 구체적으로 알게된건 처음이다. 어렴풋이는 알겠는데 설명하기가 어렵다. 결국 잘 모르겠다는 이야기ㅋㅋ. 근데 이건 처음부터 내가 코드를 짜서 쓰는건 아니고 되어있는 걸로 활용만 하면 되는거라서 좀 낫다. 카카오 로그인 api 받을 때도 친절하게 설명이 잘되있어서 (그래도 어려웠지만,,, 이틀넘게 걸렸지만,,,,) 그나마 편히 사용했던 기억이 있다. 꾸역꾸역했던 졸작이 그래도 의미가 있었다! 그걸로 기분 좋아짐. 내일이 되봐야겠지만, 개념은 조금 아리송하지만 이정도인걸로 만족... 이것도 사실 새발의 피겠지만 ㅋ

profile
느려도... 꾸준히.....🐌

0개의 댓글