Python 및 요청을 사용하여 API 사용

안녕하세요 여러분!. 이 게시물에서는 Python 및 requests 을 사용하여 API를 사용하는 방법을 보여주는 작은 가이드를 공유하고 싶습니다.

다음 APIhttps://jsonplaceholder.typicode.com/를 사용합니다. 게시물을 위한 간단한 API입니다.

요구 사항



  • Python (Python 3.8.2를 사용합니다)
  • 핍(Pip 20.1.1 사용)

  • 설치 프로젝트



    프로젝트를 생성하기 위해 virtualenv 을 사용하여 이 프로젝트를 위한 격리된 파이썬 환경을 생성할 것입니다. 그러나 pyenv 또는 venv 을 사용할 수도 있습니다.

    따라서 먼저 virtualenv 를 설치해야 합니다.

    pip3 install virtualenv
    


    이제 프로젝트 폴더를 만들고 virtualenv를 설정해야 합니다.

    # Creating a project folder
    mkdir apis-example
    cd apis-example
    
    # Creating the virtual environment
    virtualenv env
    
    # Activate the virtual environment
    source env/bin/activate
    
    # Create our main file
    touch main.py
    


    참고: 환경을 종료하려면 deactivate 를 작성하면 됩니다.

    종속성 설치



    HTTP 요청을 하기 위해 requests 모듈을 사용할 것입니다. 다음 명령을 사용하여 이 모듈을 설치할 수 있습니다.

    pip install requests
    


    다음 명령으로 설치된 종속성을 확인할 수 있습니다.

    # Installed dependencies
    pip freeze
    
    # The above mentioned command will list something like the following
    certifi==2020.6.20
    chardet==3.0.4
    idna==2.10
    requests==2.24.0
    urllib3==1.25.10
    


    또한 종속성을 내보낼 수도 있습니다.

    pip freeze > requirements.txt
    


    그리고 requirements.txt 파일에서 종속성을 설치합니다.

    pip install -r requirements.txt
    


    게시물 나열



    이제 필요한 모듈이 설치되었으므로 코드 작성을 시작할 수 있습니다. 먼저 API를 사용하는 데 도움이 되는 requests 모듈을 가져와야 합니다.

    # main.py
    # import section ....
    import requests            # import python module
    import json
    # ....
    


    이제 기본 URL을 정의합니다.

    # main.py
    
    # Constants section ....
    # API base URL
    BASE_URL = "https://jsonplaceholder.typicode.com"
    


    좋아요, 모든 게시물을 표시하는 get_all라는 함수를 생성하겠습니다.

    # main.py
    
    # Methods section ....
    def get_all():
        """
        Make a GET request to the API rest to get all the items
        """
        url = BASE_URL + "/posts"
        response = requests.get(url)
    
        json_result = response.json()
        print(json_result)
    


    우리의 main 함수는 다음과 같습니다.

    # main.py
    # import section ....
    import sys
    
    # Main section ...
    if __name__ == "__main__":
        if len(sys.argv)> 1 :
            if sys.argv[1] == '--help':
                print('Info: ')
                print('--help List the options to send an email')
                print('--list Show all posts')
                print('--show Show a specific post')
                print('--create Create a post')
                print('--update Update a post')
                print('--delete Delete a post')
            elif sys.argv[1] == '--list':
                print("Listing all posts")
                get_all()
        else:
            print("Please give the type of message to send.")
            print("For help execute `python main.py --help`")
    


    터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.

    python main.py --list
    
    # Listing all posts
    # [{'userId': x, 'id': x, 'title': 'xxxxxxx', 'body': 'xxxxxxxxxx'}, ....]
    


    게시물 작성



    여기서는 POST 요청을 사용하여 게시물을 작성합니다. 먼저 create_post 라는 메서드를 만듭니다.

    # main.py
    
    # Methods section ....
    def create_post():
        """
        Make a post request to the API rest to create an item
        """
        url = BASE_URL + "/posts"
    
        # Request headers
        headers = { "Content-type": "application/json; charset=UTF-8" }
    
        # Request body
        body = {
          "title": 'foo',
          "body": 'bar',
          "userId": 1
        }
    
        data = json.dumps(body) # parse a dictionary to json string format
    
        response = requests.post(url, headers=headers, data=data)
    
        json_result = response.json()
    
        print(json_result)
    


    기본 기능에 옵션을 추가합니다.

    # main.py
    
    # Main section ...
    if __name__ == "__main__":
        # ....
    
        if len(sys.argv)> 1 :
            # if ....
            elif sys.argv[1] == '--create':
                print("Create a post")
                create_post()
        else:
            # ....
    


    터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.

    python main.py --create
    
    # Create a post
    # {'title': 'foo', 'body': 'bar', 'userId': x, 'id': x}
    


    게시물 표시



    여기서는 GET 요청을 사용하여 특정 게시물을 보여줍니다. show_post 라는 메서드를 생성합니다.

    # main.py
    
    # Methods section ....
    def show_post(id=1):
        url = BASE_URL + "/posts/" + str(id)
        response = requests.get(url)
    
        json_result = response.json()
        print(json_result)
    


    기본 기능에 옵션을 추가합니다.

    # main.py
    
    # Main section ...
    if __name__ == "__main__":
        # ....
    
        if len(sys.argv)> 1 :
            # if ....
            elif sys.argv[1] == '--show':
                print("Show a post")
                show_post(1)
        else:
            # ....
    


    터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.

    python main.py --show
    
    # Show a post
    # {'userId': x, 'id': x, 'title': 'xxxxxxxxx', 'body': 'xxxxxxxxxx'}
    


    게시물 업데이트



    여기서는 PUT 요청을 사용하여 게시물을 업데이트합니다. update_post 라는 메서드를 생성합니다.

    # main.py
    
    # Methods section ....
    def update_post(id = 1):
        """
        Make a post request to the API rest to create an item
        """
        url = BASE_URL + "/posts/" + str(id)
    
        # Request headers
        headers = { "Content-type": "application/json; charset=UTF-8" }
    
        # Request body
        body = {
          "title": 'fooz',
          "body": 'barz',
          "userId": 1,
          "id": id
        }
    
        data = json.dumps(body) # parse a dictionary to json string format
    
        response = requests.put(url, headers=headers, data=data)
    
        json_result = response.json()
    
        print(json_result)
    


    기본 기능에 옵션을 추가합니다.

    # main.py
    
    # Main section ...
    if __name__ == "__main__":
        # ....
    
        if len(sys.argv)> 1 :
            # if ....
            elif sys.argv[1] == '--update':
                print("Update a post")
                show_post(1)
        else:
            # ....
    


    터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.

    python main.py --update
    
    # Update a post
    # {'userId': x, 'id': x, 'title': 'xxxxxxxx', 'body': 'xxxxxxxx'}
    


    게시물 삭제



    여기에서는 DELETE 요청을 사용하여 게시물을 업데이트합니다. delete_post 라는 메서드를 생성합니다.

    # main.py
    
    # Methods section ....
    def delete_post(id = 1):
        url = BASE_URL + "/posts/" + str(id)
        response = requests.delete(url)
    
        json_result = response.json()
        print(json_result)
    


    기본 기능에 옵션을 추가합니다.

    # main.py
    
    # Main section ...
    if __name__ == "__main__":
        # ....
    
        if len(sys.argv)> 1 :
            # if ....
            elif sys.argv[1] == '--delete':
                print("Delete a post")
                show_post(1)
        else:
            # ....
    


    터미널에서 다음 명령을 실행하여 기능을 테스트할 수 있습니다.

    python main.py --delete
    
    # Delete a post
    # {'userId': x, 'id': x, 'title': 'xxxxxxxxxxx', 'body': 'xxxxxxxxxxx'}
    


    마지막 단어



    이 게시물을 읽어주셔서 감사합니다. 이 가이드의 코드here를 찾을 수 있습니다.

    좋은 웹페이지 즐겨찾기