일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자청
- SQLD 이론
- 게임서버개발
- 폴링vs이벤트
- 서버최적화
- 서버아키텍처
- SQLD이론
- sqld
- N-Queen
- BFS
- Backtracking
- 오픽
- 오픽 초보
- git
- sqld요약
- Python
- Javascript
- 클린 코드
- 백준
- 파이썬
- MFC
- c++
- SW개발자를 위한 성능좋은 SQL
- beautifulsoup
- 역행자
- clean code
- 알고리즘
- 클린코드
- 주석
- DP
- Today
- Total
가취공부하자
[Python] RESTful API 구현 본문
오늘은 RESTful 사용자 서비스를 구현해보았다. 사용자 정보를 읽고, 수정하고, 추가하고, 삭제하는 API를 만들어 보았다.
1. 웹 어플리케이션 틀 구현
from flask import Flask, jsonify, abort, make_response, request
app = Flask(__name__)
@app.route('/')
def greeting():
return "This is RESTful API"
if __name__ =='__main__':
app.run(debug=True)
위 코드를 실행하고 "http://127.0.0.1:5000/" 주소로 들어가면 "This is RESTful API"를 확인할 수 있다.
2. 사용자 정보를 읽는 HTTP GET을 구현한다.
from flask import Flask, jsonify, abort, make_response, request
app = Flask(__name__)
#사용자 정보
users = [
{
'id': 1,
'username': u'cjgirdhar',
'email': u'abc@xyz.com',
'active': True
},
{
'id': 2,
'username': u'python',
'email': u'py@py.org',
'active': False
}
]
@app.route('/')
def greeting():
return "This is RESTful API"
#READE (유저 정보 확인)
@app.route('/user/<int:id>',methods=['GET'])
def get_user(id):
for user in users:
if user['id'] == id:
return jsonify({'user':user})
if __name__ =='__main__':
app.run(debug=True)
"http://127.0.0.1:5000/user/1" 에 접속하면 id가 1인 사용자의 정보를 웹 페이지에서 확인할 수 있다.
3. 사용자 정보를 추가하는 HTTP POST 기능 구현
from flask import Flask, jsonify, abort, make_response, request
app = Flask(__name__)
#사용자 정보
users = [
{
'id': 1,
'username': u'cjgirdhar',
'email': u'abc@xyz.com',
'active': True
},
{
'id': 2,
'username': u'python',
'email': u'py@py.org',
'active': False
}
]
@app.route('/')
def greeting():
return "This is RESTful API"
#READE (유저 정보 확인)
@app.route('/user/<int:id>',methods=['GET'])
def get_user(id):
for user in users:
if user['id'] == id:
return jsonify({'user':user})
abort(404)
#CREATE (새로운 유저 입력)
@app.route('/post/user', methods=['POST'])
def create_user():
if request.method == 'POST':
user_id = users[-1].get("id") + 1
username = request.json["username"]
email = request.json["email"]
status =False
print("받은 데이터 : ", username) #확인
user = {
'id' : user_id,
'username' : username,
'email' : email,
'status' : status }
users.append(user)
return jsonify({'user':user})
if __name__ =='__main__':
app.run(debug=True)
새로 추가한 "http://127.0.0.1:5000/post/user"에 접속하면 아래와 같은 "Method Not Allowed" 화면을 볼 수 있다.
이건 데이터를 전달할 수 있는 기능이 없어 발생하는 문구이다. 이를 테스트하기 위해선 Postman이라는 툴을 이용하면 된다. 설치, 사용방법 모두 간단하다.
위와 같이 정보를 입력한 후 send 버튼을 누르면 아래의 창을 통해 결과를 확인할 수 있다.
4. 사용자 정보를 수정하는 HTTP PUT 기능 구현
from flask import Flask, jsonify, abort, make_response, request
app = Flask(__name__)
#사용자 정보
users = [
{
'id': 1,
'username': u'cjgirdhar',
'email': u'abc@xyz.com',
'active': True
},
{
'id': 2,
'username': u'python',
'email': u'py@py.org',
'active': False
}
]
@app.route('/')
def greeting():
return "This is RESTful API"
#READE (유저 정보 확인)
@app.route('/user/<int:id>',methods=['GET'])
def get_user(id):
for user in users:
if user['id'] == id:
return jsonify({'user':user})
abort(404)
#CREATE (새로운 유저 입력)
@app.route('/post/user', methods=['POST'])
def create_user():
if request.method == 'POST':
user_id = users[-1].get("id") + 1
username = request.json["username"]
email = request.json["email"]
status =False
print("받은 데이터 : ", username) #확인
user = {
'id' : user_id,
'username' : username,
'email' : email,
'status' : status }
users.append(user)
return jsonify({'user':user})
#UPDATE (유저 정보 수정)
@app.route('/put/user/<int:id>', methods=['PUT'])
def update_user(id):
if request.method == 'PUT':
user =[user for user in users if user['id'] == id]
user[0]['username']= request.json['username']
user[0]['email'] = request.json['email']
user[0]['status'] = request.json['status']
return jsonify({'user':user[0]})
if __name__ =='__main__':
app.run(debug=True)
해당 추가 기능도 데이터를 입력받아야 하므로 postman을 사용해 테스트한다.
5. 사용자 정보를 삭제하는 HTTP DELETE 기능 구현
from flask import Flask, jsonify, abort, make_response, request
app = Flask(__name__)
#사용자 정보
users = [
{
'id': 1,
'username': u'cjgirdhar',
'email': u'abc@xyz.com',
'active': True
},
{
'id': 2,
'username': u'python',
'email': u'py@py.org',
'active': False
}
]
@app.route('/')
def greeting():
return "This is RESTful API"
#READE (유저 정보 확인)
@app.route('/user/<int:id>',methods=['GET'])
def get_user(id):
for user in users:
if user['id'] == id:
return jsonify({'user':user})
abort(404)
#CREATE (새로운 유저 입력)
@app.route('/post/user', methods=['POST'])
def create_user():
if request.method == 'POST':
user_id = users[-1].get("id") + 1
username = request.json["username"]
email = request.json["email"]
status =False
print("받은 데이터 : ", username) #확인
user = {
'id' : user_id,
'username' : username,
'email' : email,
'status' : status }
users.append(user)
return jsonify({'user':user})
#UPDATE (유저 정보 수정)
@app.route('/put/user/<int:id>', methods=['PUT'])
def update_user(id):
if request.method == 'PUT':
user =[user for user in users if user['id'] == id]
user[0]['username']= request.json['username']
user[0]['email'] = request.json['email']
user[0]['status'] = request.json['status']
return jsonify({'user':user[0]})
#DELETE (사용자 정보 삭제)
@app.route('/delete/user/<int:id>',methods=['DELETE'])
def delete_user(id):
if request.method == 'DELETE':
user = [user for user in users if user['id'] == id]
users.remove(user[0])
return jsonify({}), 204
if __name__ =='__main__':
app.run(debug=True)
해당 추가 기능도 데이터를 입력받아야 하므로 postman을 사용해 테스트한다.
6. 예외 처리
from flask import Flask, jsonify, abort, make_response, request
app = Flask(__name__)
#사용자 정보
users = [
{
'id': 1,
'username': u'cjgirdhar',
'email': u'abc@xyz.com',
'active': True
},
{
'id': 2,
'username': u'python',
'email': u'py@py.org',
'active': False
}
]
@app.route('/')
def greeting():
return "This is RESTful API"
#READE (유저 정보 확인)
@app.route('/user/<int:id>',methods=['GET'])
def get_user(id):
for user in users:
if user['id'] == id:
return jsonify({'user':user})
abort(404)
#CREATE (새로운 유저 입력)
@app.route('/post/user', methods=['POST'])
def create_user():
if request.method == 'POST':
user_id = users[-1].get("id") + 1
username = request.json["username"]
email = request.json["email"]
status =False
print("받은 데이터 : ", username) #확인
user = {
'id' : user_id,
'username' : username,
'email' : email,
'status' : status }
users.append(user)
return jsonify({'user':user})
abort(404)
#UPDATE (유저 정보 수정)
@app.route('/put/user/<int:id>', methods=['PUT'])
def update_user(id):
if request.method == 'PUT':
user =[user for user in users if user['id'] == id]
user[0]['username']= request.json['username']
user[0]['email'] = request.json['email']
user[0]['status'] = request.json['status']
return jsonify({'user':user[0]})
abort(404)
#DELETE (사용자 정보 삭제)
@app.route('/delete/user/<int:id>',methods=['DELETE'])
def delete_user(id):
if request.method == 'DELETE':
user = [user for user in users if user['id'] == id]
users.remove(user[0])
return jsonify({}), 204
#Error (예외처리)
@app.errorhandler(404)
def not_found(error):
return make_response((jsonify({'error' : 'Not Found'}),404))
if __name__ =='__main__':
app.run(debug=True)
참조
http://www.acornpub.co.kr/book/automate-it (파이썬 비지니스 자동화, 에이콘출판사, 2018)
파이썬과 비즈니스 자동화
파이썬 2.7로 비즈니스 자동화를 위한 필요한 기술을 다루고, 실제로 활용할 수 있도록 도와준다
www.acornpub.co.kr
'Python > (책)파이썬과 비지니스 자동화' 카테고리의 다른 글
데이터 기반 의사결정 단계 (0) | 2022.08.04 |
---|---|
데이터 분석의 다양한 측면과 접근방식 (0) | 2022.08.04 |
REST(Representational State Transfer)란? (0) | 2022.07.31 |
BeautifulSoup, 웹 스크래핑 (0) | 2022.07.21 |
Tornado를 사용해 비동기 http 서버 실행 (0) | 2022.07.12 |