반응형
아래는 Python의 Flask를 사용하여 호텔 투숙객 예약 기능을 구현하는 간단한 API 예제입니다. 이 API는 다음과 같은 기능을 제공합니다:
주요 기능
- 객실 예약 생성: 고객이 투숙할 날짜와 정보를 입력하여 예약을 생성.
- 예약 조회: 특정 예약 ID로 예약 정보를 조회.
- 예약 수정: 고객 요청으로 날짜나 정보를 수정.
- 예약 취소: 예약을 삭제.
API 구성
환경 요구 사항:
- Python 3.8 이상
- Flask
- Flask-SQLAlchemy (데이터베이스)
- SQLite (기본 데이터 저장)
코드 작성
아래는 호텔 예약 시스템의 기본 API 코드입니다.
1. API 코드 작성
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
# Flask 앱 생성
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///hotel_reservations.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# 데이터베이스 초기화
db = SQLAlchemy(app)
# 예약 데이터베이스 모델
class Reservation(db.Model):
id = db.Column(db.Integer, primary_key=True)
guest_name = db.Column(db.String(100), nullable=False)
room_number = db.Column(db.String(10), nullable=False)
check_in_date = db.Column(db.String(10), nullable=False)
check_out_date = db.Column(db.String(10), nullable=False)
# 데이터베이스 생성
with app.app_context():
db.create_all()
# 1. 예약 생성 API
@app.route('/reservations', methods=['POST'])
def create_reservation():
data = request.json
try:
new_reservation = Reservation(
guest_name=data['guest_name'],
room_number=data['room_number'],
check_in_date=data['check_in_date'],
check_out_date=data['check_out_date']
)
db.session.add(new_reservation)
db.session.commit()
return jsonify({"message": "Reservation created", "reservation_id": new_reservation.id}), 201
except KeyError as e:
return jsonify({"error": f"Missing field: {str(e)}"}), 400
# 2. 예약 조회 API
@app.route('/reservations/<int:reservation_id>', methods=['GET'])
def get_reservation(reservation_id):
reservation = Reservation.query.get(reservation_id)
if reservation:
return jsonify({
"id": reservation.id,
"guest_name": reservation.guest_name,
"room_number": reservation.room_number,
"check_in_date": reservation.check_in_date,
"check_out_date": reservation.check_out_date
}), 200
else:
return jsonify({"error": "Reservation not found"}), 404
# 3. 예약 수정 API
@app.route('/reservations/<int:reservation_id>', methods=['PUT'])
def update_reservation(reservation_id):
data = request.json
reservation = Reservation.query.get(reservation_id)
if reservation:
reservation.guest_name = data.get('guest_name', reservation.guest_name)
reservation.room_number = data.get('room_number', reservation.room_number)
reservation.check_in_date = data.get('check_in_date', reservation.check_in_date)
reservation.check_out_date = data.get('check_out_date', reservation.check_out_date)
db.session.commit()
return jsonify({"message": "Reservation updated"}), 200
else:
return jsonify({"error": "Reservation not found"}), 404
# 4. 예약 취소 API
@app.route('/reservations/<int:reservation_id>', methods=['DELETE'])
def delete_reservation(reservation_id):
reservation = Reservation.query.get(reservation_id)
if reservation:
db.session.delete(reservation)
db.session.commit()
return jsonify({"message": "Reservation cancelled"}), 200
else:
return jsonify({"error": "Reservation not found"}), 404
if __name__ == '__main__':
app.run(debug=True)
2. 데이터베이스 구조
- Reservation Table:
| 컬럼 | 타입 | 설명 |
|----------------|------------------|---------------------------|
| id | Integer (PK) | 예약 ID |
| guest_name | String | 투숙객 이름 |
| room_number | String | 객실 번호 |
| check_in_date | String | 체크인 날짜 (YYYY-MM-DD) |
| check_out_date | String | 체크아웃 날짜 (YYYY-MM-DD) |
API 사용 방법
- 예약 생성
POST /reservations
요청 본문:응답: - { "message": "Reservation created", "reservation_id": 1 }
- { "guest_name": "John Doe", "room_number": "101", "check_in_date": "2023-12-01", "check_out_date": "2023-12-05" }
- 예약 조회
GET /reservations/<reservation_id>
응답: - { "id": 1, "guest_name": "John Doe", "room_number": "101", "check_in_date": "2023-12-01", "check_out_date": "2023-12-05" }
- 예약 수정
PUT /reservations/<reservation_id>
요청 본문:응답: - { "message": "Reservation updated" }
- { "check_out_date": "2023-12-06" }
- 예약 취소
DELETE /reservations/<reservation_id>
응답: - { "message": "Reservation cancelled" }
확장 가능성
- 인증 및 권한 관리:
- JWT 토큰을 사용하여 관리자와 사용자 권한을 분리.
- 객실 가용성 확인:
- 예약 시 특정 객실의 가용성을 확인하는 로직 추가.
- 추가 데이터:
- 이메일, 전화번호, 결제 상태 등을 저장.
결론
이 API는 호텔 예약 시스템의 기본 구조를 보여줍니다. Flask와 SQLite를 사용하여 빠르게 구축할 수 있으며, 이를 기반으로 다양한 기능을 확장할 수 있습니다. 실시간 예약 관리를 구현하려면 이 코드를 시작점으로 사용해 보세요! 🚀
반응형