안녕하세요! 그레이 해커 월횽입니다. 오늘은 Flask를 이용하여 RESTful API를 구축하고, 실제 애플리케이션에서 활용할 수 있도록 하는 방법을 알아보겠습니다.
1. RESTful API란?
RESTful API는 HTTP 프로토콜을 사용하여 클라이언트와 서버 간의 데이터를 주고받는 구조입니다. URL로 자원을 지정하고, HTTP 메서드(GET, POST, PUT, DELETE)를 사용해 데이터를 조작합니다. 이러한 구조를 통해 간결성, 확장성, 유연성이 높은 API를 설계할 수 있습니다.
2. Flask로 API 엔드포인트 만들기
우선 Flask에서 API 엔드포인트를 생성하는 기본 구조를 설정해보겠습니다.
from flask import Flask, jsonify, request
app = Flask(__name__)
# 샘플 데이터
users = [
{"id": 1, "name": "Alice", "age": 30},
{"id": 2, "name": "Bob", "age": 25}
]
# GET 메서드로 전체 사용자 조회
@app.route('/api/users', methods=['GET'])
def get_users():
return jsonify(users)
# GET 메서드로 특정 사용자 조회
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
user = next((u for u in users if u["id"] == user_id), None)
return jsonify(user) if user else ('', 404)
# POST 메서드로 새로운 사용자 추가
@app.route('/api/users', methods=['POST'])
def add_user():
new_user = request.json
new_user['id'] = len(users) + 1
users.append(new_user)
return jsonify(new_user), 201
# PUT 메서드로 사용자 정보 수정
@app.route('/api/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
user = next((u for u in users if u["id"] == user_id), None)
if user:
data = request.json
user.update(data)
return jsonify(user)
return ('', 404)
# DELETE 메서드로 사용자 삭제
@app.route('/api/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
global users
users = [u for u in users if u["id"] != user_id]
return ('', 204)
if __name__ == '__main__':
app.run(debug=True)
3. HTTP 메서드 설명
· GET: 리소스를 조회하는 데 사용됩니다. 예를 들어, /api/users를 호출하면 모든 사용자 데이터를 가져옵니다.
· POST: 새로운 리소스를 서버에 생성하는 데 사용됩니다. 사용자 추가 시 /api/users로 POST 요청을 보냅니다.
· PUT: 기존 리소스를 업데이트합니다. 사용자 정보 수정을 위해 /api/users/<user_id>로 요청합니다.
· DELETE: 리소스를 삭제하는 데 사용됩니다. /api/users/<user_id>를 DELETE 요청으로 호출하여 사용자를 삭제합니다.
4. Postman을 이용한 API 테스트
API가 잘 작동하는지 확인하려면 Postman과 같은 도구를 사용할 수 있습니다.
(1) GET: /api/users로 요청을 보내 전체 사용자를 조회합니다.
(2) POST: /api/users로 JSON 데이터를 포함하여 새로운 사용자를 추가합니다.
(3) PUT: 특정 사용자 ID와 함께 업데이트할 JSON 데이터를 포함하여 /api/users/<user_id>로 요청합니다.
(4) DELETE: 특정 사용자 ID로 /api/users/<user_id>를 요청하여 사용자를 삭제합니다.
5. Flask-RESTful 확장 사용하기
더 간편하게 RESTful API를 구축하려면 Flask-RESTful 라이브러리를 사용할 수 있습니다.
pip install Flask-RESTful
from flask import Flask, request
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class UserList(Resource):
def get(self):
return users
def post(self):
new_user = request.json
new_user['id'] = len(users) + 1
users.append(new_user)
return new_user, 201
class User(Resource):
def get(self, user_id):
user = next((u for u in users if u["id"] == user_id), None)
return user if user else ('', 404)
def put(self, user_id):
user = next((u for u in users if u["id"] == user_id), None)
if user:
data = request.json
user.update(data)
return user
return ('', 404)
def delete(self, user_id):
global users
users = [u for u in users if u["id"] != user_id]
return '', 204
api.add_resource(UserList, '/api/users')
api.add_resource(User, '/api/users/<int:user_id>')
if __name__ == '__main__':
app.run(debug=True)
6. JSON 응답 구조 최적화
API 응답에 meta 필드를 추가하여 상태 정보를 포함하거나, links 필드를 활용해 API 내비게이션을 제공합니다.
{
"data": [
{"id": 1, "name": "Alice", "age": 30},
{"id": 2, "name": "Bob", "age": 25}
],
"meta": {"total": 2}
}
오늘은 Flask로 RESTful API를 구축하고 활용하는 방법을 배웠습니다. 다음 강의에서는 Flask 기반 RESTful API와 데이터베이스 연동을 다루어 보겠습니다!
- 이전 수업 목록
'프로그래밍 > Python' 카테고리의 다른 글
[Python 강의] 34강 - Flask 애플리케이션의 성능 최적화와 보안 강화 기법 (1) | 2024.11.14 |
---|---|
[Python 강의] 33강 - Flask 기반 RESTful API와 데이터베이스 연동 (0) | 2024.11.13 |
[Python 강의] 31강 - Flask로 만든 애플리케이션을 배포하고 최적화하는 방법 (1) | 2024.11.11 |
[Python 강의] 30강 - Flask와 프론트엔드 연동을 통한 완성도 높은 웹 애플리케이션 구축 (1) | 2024.11.08 |
[Python 강의] 29강 - Flask와 비동기 작업을 활용한 실시간 알림 시스템 구축 (0) | 2024.11.07 |