[DE] API(2)

박경국·2022년 1월 31일
0

Data Engineering

목록 보기
9/16
post-thumbnail

이번 포스팅은 API에 대해 정리하려 합니다. API는 개념 자체가 추상적이기 때문에 구체적인 work flow를 구현하기는 어렵지만, API로 받은 데이터를 DB에 저장하는 것까지 정리해보겠습니다.

1. API

  • API는 서로 다른 프로그램이 소통할 수 있도록 하는 일종의 약속이자 체계입니다.
  • 클라이언트가 서버에 무언가를 요청하면 클라이언트의 요청을 서버가 해석할 수 있어야 합니다.
  • 서버가 클라이언트의 요청을 해석할 수 있도록 사전에 약속한 체계가 API입니다.
  • 이 API에 따라 클라이언트와 서버는 서로 필요한 데이터를 주고 받을 수 있으며, 데이터 수정, 삭제 등의 CRUD를 수행할 수도 있습니다.
  • 우리가 서버에 특정 데이터를 요청하면 우리는 json 형태의 데이터를 받을 확률이 높습니다.

2. HTTP

  • 앞서 설명한 API는 아주 넓은 개념입니다. 서로 다른 두 객체가 소통할 수 있는 인터페이스라면 모두 API라고 부를 수 있습니다.
  • 범위를 조금 좁혀서, 우리가 주로 데이터를 얻는 웹에서 사용할 API를 web API라고 합니다.
  • 그리고 web API를 서로 일정한 약속에 따라 사용하자고 만든 가이드라인이 HTTP(HyperText Transfer Protocl)입니다. 하나의 컴퓨터(클라이언트)가 다른 컴퓨터(서버)와 소통할 때 정해진 규칙과 틀에 따라 소통할 수 있도록 정한 가이드라인입니다.

3. REST API

  • REST는 HTTP로 소통할 때 더 세분화된 가이드라인을 제시합니다.
  • HTTP의 메소드(API)를 REST의 기준에 따라 만들면 REST(ful) API라고 부릅니다.
  • 즉, API가 REST의 가이드라인을 모두 따르면 RESTful API라고 부르고, API가 REST 가이드라인을 일부 따르면 REST API라고 부릅니다.

  • 보통, API를 제공하는 web에서는 API 사용법을 안내합니다.
  • 개발자 입장에서는 자신만 알아볼 수 있도록 API를 만들면 편하겠지만, 사용자 입장에서는 API를 사용할 때마다 개발자가 만든 사용 규칙을 찾아야하는 번거로움이 생깁니다.
  • 이런 번거로움을 줄이고, 웹 API의 질서를 세우려는 시도에서 REST 아키텍처가 등장했습니다.
  • 보통 REST API를 작성했다고 하면, HTTP 메소드를 다음과 같이 사용합니다.
    • GET : 데이터 조회
    • POST : 데이터 생성
    • PATCH : 데이터 일부 업데이트
    • PUT : 데이터 전체 업데이트
    • DELETE : 데이터 삭제

4. API로 데이터 얻기

  • API로 데이터를 얻기 위해서는 key가 필요합니다.
  • 공개된 형태의 API도 많지만, ID와 PW를 이용하거나, OAuth, 공개 키 암호화 방식을 이용하기도 합니다.
  • 이번 포스팅에서는 공개된 형태의 API를 이용하겠습니다.
import requests

#API를 통해 서버로부터 데이터를 받습니다.
data = ''
response = requests.get("https://api.github.com/users/octokit/repos")

#응답이 성공적이라면(200), 데이터를 json 형태로 파싱합니다.
if response.status_code == 200:
    data = response.json()
  • 파싱한 데이터를 MongoDB에 INSERT 하겠습니다.
!pip install pymongo
!pip install dnspython
from pymongo import MongoClient

#MONGO DB에서 생성한 DB의 URI를 입력하여 client를 생성합니다. 
client = MogoClient({MONGO_URI})

#client에서 사용할 DB를 생성합니다.
database = client[{DATABASE_NAME}]

#DB 안에 collection(sql의 테이블과 유사)을 생성합니다.
collection = database[{COLLECTION_NAME}]

#collection에 데이터를 INSERT합니다.

collection.insert_one({data})

#하나 이상의 데이터를 한 번에 입력한다면 insert_many를 사용합니다.

collection.insert_many({datas})
  • 이렇게 API, HTTP, REST API 순으로 API에 대해 정리해봤습니다.
  • 모든 건 필요해서 만들어졌다는 관점에서 API는 프로그램 간의 소통을 위해, HTTP는 웹 소통을 위해, REST API는 일관성 있고 질서 있는 소통을 위해 만들어졌다고 이해할 수 있을 것 같습니다.

다음 포스팅에서는 MongoDB와 같은 NOsql에 대해 정리해보도록 하겠습니다.

0개의 댓글