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 |