본문 바로가기
코드스테이츠 AI 부트캠프/Section 4

API(Application Programming Interface)

by yunyoung424 2023. 5. 31.

API (2023.05.31)

 


[ 주요 개념]

API(Application Programming Interface)

: 프로그램들이 소통할 수 있는 인터페이스, 프로그램 간 소통, 조작방법, 매뉴얼 느낌

촐처 : 코드스테이츠 AIB

  • 클라이언트 = 손님
  • API = 메뉴
    → 실체 X, 문서
  • API Server = 웨이터
    → Service server의 결과 전달, 없이 service server와 client가 직접 소통 가능, 늘리는 것도 가능하다
  • Service Server = 요리사
    → 요청받은 서비스 구동, 처리

Why API ??

- 사용성 면에서 정제(가공)되어 있으므로 가져오기 용이하고 간편하다.
- 검증된 데이터로 스크레이핑을 통해 가져온 데이터보다 신뢰성이 있음
   ⇒ 웹에서 데이터를 수집할 때 API와 스크레이핑 모두 가능할 경우 API가 더 좋은 선택

 

API 종류

  • DB API → DB와 파이썬 소통
    • DB : 주는 역할
    • 파이썬(프로그램) : 받는 역할
  • WEB API → 서버와 클라이언트 소통
    • 서버 : 주는 역할
    • 클라이언트 : 받는 역할

 

API 응답

  • API 입력 값과 결과 값에 제한된 형식 X
  • csv, 문자열, json, xml 등 모두 사용가능
  • Web API는 주로 JSON을 사용

 

JSON(Javascript Object Notation)

  • 말 그대로 자바스크립트에서 Object 표기하는 방식
  • 파이썬 Dictionary 형식과 비슷하게 생김
  • 자바스크립트에 국한되지 않고 널리 쓰임 → 표준처럼 자리잡음
# 예시

{
  "glossary":{
    "title":"example glossary",
    "GlossDiv":{
      "title":"S",
      "GlossList":{
        "GlossEntry":{
          "ID":"SGML",
          "SortAs":"SGML",
          "GlossTerm":"Standard Generalized Markup Language",
          "Acronym":"SGML",
          "Abbrev":"ISO 8879:1986",
          "GlossDef":{
            "para":"A meta-markup language, used to create markup languages such as DocBook.",
            "GlossSeeAlso":[
              "GML",
              "XML"
            ]
          },
          "GlossSee":"markup"
        }
      }
    }
  }
}

 

HTTP(HyperText Transfer Protocol)

  • 인터넷에서 통신하기 위해 만든 약속, 규칙
  • API는 정해진 규칙이 없어서 API를 사용할 때마다 어려움이 생겼고, 해결하기 위해 HTTP가 있음

 

HTTP Request

: 한 컴퓨터가 다른 컴퓨터에 리소스 요청

 

CRUD에 사용되는 HTTP 메서드

  • Create : 새로운 데이터 생성 (ex. 새로운 회원 가입)
  • Read : 데이터 조회 (ex. 회원 정보 조회)
  • Update : 기존 데이터 수정 (ex. 회원 정보 수정)
  • Delete : 기존 데이터 삭제 (ex. 회원 탈퇴)

 

HTTP Response

: 요청에 대한 응답

 

Status Code → HTTP 응답에 대한 상태

  • 100번대 : 요청 처리 중
  • 200번대 : 성공
  • 300번대 : Redirection error(추가 동작 필요)
  • 400번대 : Client error(내가 잘못)
  • 500번대 : Server error(저쪽에서 잘못)

 

HTTP API

: HTTP를 지켜서 만든 API

Ex. Import pandas as pd 여기서 pd 가 아니어도 되는데 pd로 적는 느낌

HTTP 규약이 지켜지지 않으면 소통 비용이 증가!!
HTTP 규약을 더 잘 지키게 하기 위해 REST 가이드라인이 생김

 

REST(REpresentational State of Transfer)

분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 형식 중 하나

소프트웨어 아키텍처를 어떻게 형성할 지에 대한 가이드라인으로 6개의 가이드라인 존재

 

RESTful API

: REST의 6가지 가이드라인을 모두 지킨 API

 

REST API 요청 보낼 때 사용하는 메서드

  • GET : 데이터 조회
  • POST : 데이터 생성
  • PATCH : 데이터 업데이트(일부변경)
  • PUT : 데이터 업데이트(전체변경)
  • DELETE : 데이터 삭제

→ 각 메서드의 기능이 제한된 것은 아니지만 이렇게 쓰기로 약속한 것! ( patch를 이용해서 데이터 전체를 변경하는 것도 가능)

 

POSTMAN

API 활용할 때 데이터를 요청하고 응답받는 GUI 기반의 플랫폼, 프로그램

직관적으로 볼 수 있어 편하게 이해할 수 있도록 해주는 프로그램 → 프런트앤드에 더 유용

 


실습

파이썬 호환성

몇몇 API 들은 파이썬을 위한 패키지만 그렇지 않은 경우들도 많다.

이럴 때에는 데이터를 받아와 파이썬에서 작업할 수 있는 형태로 변경해 주는 과정을 거쳐야 한다.

 

  • OpenWeather API
import requests
import json

API_URL = '<https://api.openweathermap.org/data/2.5/weather?q=Seoul&appid={API_KEY}>'

raw_data = requests.get(API_URL)
parsed_data = json.loads(raw_data.text)

print(parsed_data)

 

  • 공공데이터포털
# 가져온 Json 파일을 이용해서 3,999번째 데이터를 호출, xml 태그를 'bs4.element.Tag' 클래스로

API_KEY = '발급받은 API_KEY'
URL = request_url()

params ={'serviceKey' : API_KEY, 
         'type' : 'xml, json', 
            'pageNo' : '3999', #3,999번째 데이터
                'numOfRows' : '1', 
                    'centerNm' : '국립암센터', 
                        'fromYear' : '2010', 
                            'toYear' : '2019' }

response = requests.get(URL, params=params)
soup = BeautifulSoup(response.content, 'xml') #xml
result = soup.find('items')

댓글