Joo's
article thumbnail
Published 2024. 4. 26. 09:14
API 만들기 - 쌩기초 배운 내용/Python
반응형

요즘 회사에서 플랫폼 백엔드 개발자로 일하면서 API를 만들라는 말은 참 많이 듣는다.

 

솔직히 API가 뭔지 아직도 잘 모르겠다...느낌으로만 아는 그런 느낌?

 

아무튼 API를 만들다 보니 다른 사람이 만든 API를 이용해야 할 때가 있다.

 

일단 그냥 API를 만들어 보자.

(요즘은 ChatGPT가 다 해준다.)

 

API를 만들기 위한 다양한 라이브러리가 있다.

파이썬 FLASK를 이용한 간단한 ChatGPT가 짜준 API 코드

from flask import Flask, jsonify, request

app = Flask(__name__)

# 간단한 데이터베이스 역할을 할 딕셔너리
data = {
    "items": [
        {"id": 1, "name": "Apple", "price": 0.99},
        {"id": 2, "name": "Banana", "price": 0.50},
        {"id": 3, "name": "Cherry", "price": 1.99}
    ]
}

@app.route('/items', methods=['GET'])
def get_items():
    return jsonify(data)

@app.route('/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
    item = next((item for item in data['items'] if item['id'] == item_id), None)
    if item:
        return jsonify(item)
    else:
        return jsonify({"error": "Item not found"}), 404

@app.route('/items', methods=['POST'])
def add_item():
    if request.is_json:
        item = request.get_json()
        data['items'].append(item)
        return jsonify(item), 201
    else:
        return jsonify({"error": "Request must be JSON"}), 400

if __name__ == '__main__':
    app.run(debug=True)

ChatGPT가 짜준 간단한 API 코드

 

잠시 살펴보면 

@app.route('/items', methods=['GET'])
@app.route('/items/<int:item_id>', methods=['GET'])
@app.route('/items', methods=['POST'])

저 methods 부분이 중요하다. 흔히 말하는 RESTful 인데...그냥 규칙이다.

GET, POST, PUT, DELET를 언제 쓰는지 사람들이 정해놓은 것. API 주소를 어떻게 정하는지 정해놓은 것.

처음에 어려웠는데 그냥 대충 규칙 지키면 된다고 한다.

(프론트엔드 개발자분이랑 협업하는데 내용 수정하는 부분을 아무 생각 없이 POST로 했는데 오류난다고 하셔서 봤더니 당연히 PUT으로 했을 거라고 생각하셨다고 한다. 이렇듯 개발자 간의 규칙이라 보면 될 것 같다.)

 

app.route는 뒤에 있는 경로로 라우팅한다는 것이고 그 방법이 get이라는 거다.

보통 get은 조회할 때 쓰이고 post는 생성할 때 쓰인다.

이 예제에서는 get을 통해 임시로 만든 data dict에서 key:value 값을 가져온다는 것이고,

post를 통해 data dict에 새 내용을 추가하겠다는 것이다.

 

저 코드를 실행 후 postman을 이용해서 API에 요청을 보내보자.

https://www.postman.com/downloads/

 

Download Postman | Get Started for Free

Try Postman for free! Join 30 million developers who rely on Postman, the collaboration platform for API development. Create better APIs—faster.

www.postman.com

포스트맨은 API를 테스트하기 위한 좋은 프로그램이니까 꼭 쓰자.

포스트맨 화면에서 왼쪽에 GET, POST, PUT, DELETE 등을 선택할 수 있고 그 옆에 URL을 적으면 된다.

아까 코드 실행 시 나왔던 localhost:5000을 적은 후 코드에 있는 URL을 적어보자.

아래 코드의 경우 /items로 get 요청이 올 경우 코드를 실행하는 의미이다.

@app.route('/items', methods=['GET'])
def get_items():
    return jsonify(data)

send를 눌러서 요청을 보내보면 이렇게 data가 나온다. 코드에서 return을 json으로 했기에 json 형태로 보여준다.

보통은 JSON 형태로 요청을 보내거나 받으니 JSON에 대해 알아두면 좋은 것 같다.

다음은 이 함수에 요청을 보내보자.

@app.route('/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
    item = next((item for item in data['items'] if item['id'] == item_id), None)
    if item:
        return jsonify(item)
    else:
        return jsonify({"error": "Item not found"}), 404

이 함수는 경로에 int인 숫자를 받으면 해당 숫자에 맞는 item을 찾아서 보여준다.

경로에 localhost:5000/items/1 을 적고 get으로 요청해보자.

data dict에 있던 id가 1인 정보를 보여준다.

data에 1,2,3만 있으니 4를 넣으면 오류 메시지가 나온다.

 

다음은 POST를 해보자.

@app.route('/items', methods=['POST'])
def add_item():
    if request.is_json:
        item = request.get_json()
        data['items'].append(item)
        return jsonify(item), 201
    else:
        return jsonify({"error": "Request must be JSON"}), 400

아까 get할 때와 같은 경로이지만 method가 달라서 요청을 보낼 수 있다.

이 부분도 처음에는 몰랐어서 method마다 다른 경로를 만들었었다...

post의 경우 대부분 전송하려는 data를 작성해주어야 한다.

postman에서 작성해보자.

경로는 그대로이고 method를 POST로 바꾸었다.

Body에서 raw를 선택하고 오른쪽에서 JSON으로 변경해준다.

data를 JSON 형식으로 보낸다는 것이다.

코드를 보면 JSON인지 체크하는 코드가 있고 request 또한 JSON으로 받고 있다.

이 data 형식은 고정적인 것이 아니고 text를 원하면 text로 코드를 작성하고 text로 data를 보내면 된다.

    if request.is_json:
        item = request.get_json()
        data['items'].append(item)
        return jsonify(item), 201

postman의 아랫부분에 JSON으로 data를 작성해보자.

id가 4이고 이름은 Grape, 가격은 5.00인 data를 작성했다.

{
    "id": 4,
    "name": "Grape",
    "price": 5.00
}

요청을 보내보자.

요청을 보내면 응답으로 보낸 data를 보여준다.

이제 다시 get으로 data를 요청해보자.

get으로 변경 후 모든 data를 보여주는 경로로 전송한다.

결과로 출력된 것을 보면 아까 POST했던 Grape가 있는 것을 확인할 수 있다.

아까는 오류나던 4번 요청도 제대로 출력된다.

반응형

'배운 내용 > Python' 카테고리의 다른 글

vscode venv 만들기  (0) 2024.04.26
virtualenv - gitbash, windows, vscode  (0) 2024.04.07
black  (0) 2023.04.13
profile

Joo's

@JooJY

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!