[python] aiohttp를 사용하여 RESTful API 호출하기

Python에서 RESTful API를 호출 및 처리하기 위해 aiohttp 라이브러리를 사용할 수 있습니다. aiohttp는 비동기 웹 클라이언트 및 서버를 구축하기 위한 빠르고 유연한 도구입니다. 이 튜토리얼에서는 aiohttp를 사용하여 RESTful API를 호출하는 방법을 살펴보겠습니다.

1. aiohttp 설치 및 import

먼저, aiohttp를 설치해야 합니다. 다음 명령을 사용하여 aiohttp를 설치합니다.

pip install aiohttp

그런 다음, 다음과 같이 aiohttp를 import합니다.

import aiohttp
import asyncio

2. RESTful API 호출

aiohttp를 사용하여 RESTful API를 호출하려면 다음 단계를 따르면 됩니다.

  1. aiohttp client session을 만듭니다.
  2. API 엔드포인트 URL을 지정합니다.
  3. 필요한 경우 요청 헤더 및 body를 설정합니다.
  4. aiohttp client session을 사용하여 API를 호출하고 응답을 받습니다.
  5. 응답을 처리하고 필요한 데이터를 추출합니다.

다음은 aiohttp를 사용하여 GET 요청을 보내고 응답을 처리하는 예제입니다.

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.json()

async def main():
    async with aiohttp.ClientSession() as session:
        url = 'https://api.example.com/users'
        response = await fetch(session, url)
        users = response['users']
        for user in users:
            print(user['name'])

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

위의 예제에서 fetch 함수는 aiohttp client session을 사용하여 GET 요청을 보내고 응답을 받습니다. main 함수에서는 fetch 함수를 호출하여 API를 호출하고 응답을 처리합니다. 이 예제에서는 응답에서 사용자의 이름을 출력합니다.

3. 요청 헤더 및 body 설정

요청 헤더 및 body를 설정하려면 aiohttp client session의 get, post, put, delete 등의 메소드를 사용하기 전에 headersdata 매개변수를 설정하면 됩니다. 예를 들어, 다음과 같이 POST 요청을 보낼 수 있습니다.

async def post_data(session, url, data):
    headers = {'Content-Type': 'application/json'}
    async with session.post(url, headers=headers, json=data) as response:
        return await response.json()

async def main():
    async with aiohttp.ClientSession() as session:
        url = 'https://api.example.com/users'
        data = {'name': 'John Doe', 'email': 'johndoe@example.com'}
        response = await post_data(session, url, data)
        print(response)

위의 예제에서 post_data 함수는 aiohttp client session을 사용하여 POST 요청을 보내고 응답을 받습니다. main 함수에서는 post_data 함수를 호출하여 API를 호출하고 응답을 출력합니다.

4. 에러 처리

RESTful API 호출 도중 발생하는 오류를 처리하려면 예외 처리를 사용할 수 있습니다. aiohttp는 ClientResponseErrorClientConnectionError와 같은 여러 가지 예외를 제공합니다. 예를 들어, 다음과 같이 예외를 처리할 수 있습니다.

async def fetch(session, url):
    try:
        async with session.get(url) as response:
            return await response.json()
    except aiohttp.ClientResponseError as e:
        print(f'Response error: {e}')
    except aiohttp.ClientConnectionError as e:
        print(f'Connection error: {e}')

async def main():
    async with aiohttp.ClientSession() as session:
        url = 'https://api.example.com/users'
        response = await fetch(session, url)
        if response:
            users = response['users']
            for user in users:
                print(user['name'])

위의 예제에서는 fetch 함수에서 발생하는 예외를 처리하여 오류 메시지를 출력합니다.

결론

이 튜토리얼에서는 aiohttp를 사용하여 Python에서 RESTful API를 호출하는 방법을 알아보았습니다. aiohttp를 사용하면 비동기 방식으로 API 호출을 수행할 수 있으며, 요청 헤더 및 body를 설정하고, 응답을 처리하고, 에러를 처리할 수 있습니다. aiohttp를 사용하여 RESTful API 호출을 자유롭게 실험해보세요!


참고 자료