파이썬 이것저것/파이썬 백엔드

[python] Flask Restapi 구현

agingcurve 2024. 7. 27. 14:15
반응형

Restful api 컴퓨터나 스마트폰 애플리케이션이 서버에 정보를 요청하거나 보낼 있는 방법 하나이다.

서버는 정보가 저장된 컴퓨터를 말하고, 클라이언트는 정보를 사용하려는 사람이나 애플리케이션을 의미한다.

 

RESTful API 정보 교환을 단순하고 효율적으로 만들어줌, 웹사이트나 애플리케이션에서 중요한 역할을 하게

 

HTTP 매서드 이해하기

HTTP 메서드는 서버와 클라이언트가 어떻게 대화 할것인지 정한 규칙

 

GET(조회) : 클라이언트가 서버에게 " 정보 "라고 요청하는 것임, 브라우저에서 웹페이지를 , 서버에게 페이지의 정보를 가져오라고 요청

 

POST(생성) : 클라이언트가 서버에게 새로운 정보를 보내는 , 새글을 블로그에 올릴 글의 내용을 서버에 올리라는 POST 요청을 한다

 

PUT(수정) 서버에 정보를 바꾸는 것임, 블로그에 올린 내용을 수정하면 PUT 요청으로 수행

 

DELETE(삭제) : 서버에 있는 정보를 지우는 것임, 예를 들어, 블로그의 글을 삭제하면 그글을 서버에서 지우라는 DELETE 요청을 한다.

 

Flask restAPI

플라스크에서는 app.route라는 데코레이터를 통해 각각의 http 맞는 함수를 지정한다. 데코레이터는 기본적으로 함수의 기능을 확장해주는 코드 조각임

 

Requset.method 클라이언트로부터 들어온 HTTP 매서드가 무엇인지 알려줌, 변수를 통해 조건문을 작성하면 들어온 요청이 GET인지 POST인지에 따라 로직 실행이 가능

 

GET 요청 : 데이터베이스에서 사용자 정보를 가져와 반환하는 로직 들어갈 있음

 

POST 요청 : 데이터베이스에서 새로운 사용자를 생성하는 로직이 필요함

 

PUT 요청 : 데이터베이스의 특정 사용자 제이터를 수정하는 로직이 들어감, 일반적으로 클라이언트가 서버에 어떤 데이터를 수정하고 싶다고 요청하면, 메서드가 사용됨

 

DELTE요청 : "Delete user"  데이터베이스에서 특정 사용자를 삭제하는 로직이 들어가게

 

Flask 코드구현

from flask import Flask, request

app = Flask(__name__)

@app.route('/user', methods=['GET', 'POST', 'PUT', 'DELETE'])
def manage__user():
    if request.method == 'GET':
        # GET 요청 처리 로직
        return "User data"
    elif request.method == 'POST':
        # POST 요청 처리 로직
        return "Create user"
    elif request.method == "PUT":
        return "Update user"
    elif request.method == "DELETE":
        return "Delete user"

 

 

실행 cmd 창을 열어서 해당 명령어 실행

# GET 매서드
curl -X GET http://127.0.0.1:5000/user
# POST 매서드
curl -X POST http://127.0.0.1:5000/user
# DELETE 매서드
curl -X DELETE http://127.0.0.1:5000/user
# PUT 매서드
curl -X PUT http://127.0.0.1:5000/user

 

실행결과

 

Jsionify

Jsonify 플라스크 라이브러리에서 제공하는 함수로, 파이썬 기본 자료형을 JSON 형태로 변환해주고 HTTP 응답을 반환한다. 함수는 API에서 클라이언트에게 JSON 데이터를 응답으로 보낼 많이 사용한다.

 

Flask 코드구현

from flask import Flask,jsonify

app = Flask(__name__)

@app.route('/api', methods=['GET'])
def my_api():
    my_dict = {"name" : "Jhon", "age" : 30, "city" : "new york"}
    return jsonify(my_dict)

 

해당 명령어 실행

curl -X GET http://127.0.0.1:5000/api

 

 

 

플라스크 jsonify를 활용한 RESTFul api 예시

from flask import Flask, request, jsonify

app = Flask(__name__)
user_data = {} # 딕셔너리 사용자로 데이터를 저장

@app.route('/user/<username>', methods=['GET', 'POST', 'PUT', 'DELETE'])
def manage_user(username=None):
    global user_data # 전역 변수 user_data 사용
    
    if request.method == 'GET':
        return jsonify({username: user_data.get(username, "Not found")})
    
    elif request.method == 'POST':
        new_data = request.json
        user_data[username] = new_data
        return jsonify(new_data), 201
    
    elif request.method == 'PUT':
        update_data = request.json
        if username in user_data:
            user_data[username].update(update_data)
            return jsonify(update_data)
        else:
            return jsonify({"error" : "username not found"}), 404
    
    elif request.method == 'DELETE':
        if username in user_data:
            del user_data[username]
            return jsonify({"result" : "deleted"}), 200
        else:
            return jsonify({"error" : "username not found"}), 404

'파이썬 이것저것 > 파이썬 백엔드' 카테고리의 다른 글

[python] Flask 배포하기  (0) 2024.08.03
[Python] Flask 세션과 쿠키  (0) 2024.07.21
[Flask] Flask + mysql 연결  (0) 2024.07.21