이 글은 작성된 포스팅의 기능을 정리한 글 입니다.
예시를 통해 좀 더 자세한 설명이 필요하신 분은 아래의 목록을 참고해주세요.
2022.06.17 - [Programming/Rest API (Python)] - POSTMAN 사용법 - 간단 예시를 API 서버 테스트하기 + Beautify
2022.06.17 - [Programming/Rest API (Python)] - API서버 - RestFul API의 기본 개념, 구성
2022.06.17 - [Programming/Rest API (Python)] - API Flask - route 이해하기
2022.06.17 - [Programming/Rest API (Python)] - API서버 - DB 연동하기
2022.06.19 - [Programming/Rest API (Python)] - API서버 - 파이썬으로 DB에 값 넣기 (POST)
2022.06.19 - [Programming/Rest API (Python)] - API서버 - 클라이언트로부터 입력받은 값 DB에 넣기 (POST)
2022.06.19 - [Programming/Rest API (Python)] - API서버 - 클라이언트로부터 특정 정보의 값 출력하기 (GET)
2022.06.19 - [Programming/Rest API (Python)] - API서버 - 클라이언트에서 입력받은 값으로 DB 수정하기 (PUT)
2022.06.19 - [Programming/Rest API (Python)] - API서버 - 클라이언트가 원하는 값 삭제하기 (DELETE)
2022.06.20 - [Programming/Rest API (Python)] - API서버 - DB의 값의 공개/비공개 여부 설정하기
2022.06.20 - [Programming/Rest API (Python)] - POSTMAN - 설계한 API 기능을 문서화하기 (기능 명세서 만들기)
Methods
- GET : 데이터 호출
- POST : 데이터 생성
- PUT : 데이터 업데이트, 모든 속성을 확인하여 값을 수정
- PATCH : 데이터 업데이트, 일부 속성에 대한 값을 수정
- DELETE : 데이터 삭제
데이터 전달 (QueryString / Path / Json)
예시) 두 수의 합이 입력한 값을 갖는 API (10 입력시 1+9, 2+8 등등)
- 전달하는 값의 이름은 hap으로 통일
- path : 메인 파일의 add_resource 경로에서 지정
- query string : 리소스 클래스 내에 request.args.get() 으로 호출
- json : json 형식으로 파싱하여 전송
예시 코드
- app.py (메인)
from flask import Flask
from flask_restful import Api
from test import testPathResource, testQueryStrinJsonResource
app = Flask(__name__)
api = Api(app)
api.add_resource(testPathResource, '/test/<int:hap>')
api.add_resource(testQueryStrinJsonResource, '/test')
if __name__ == '__main__' :
app.run()
- test.py
from flask import request
from flask_restful import Resource
import random
class testPathResource(Resource) :
def get(self, hap) : # Path
op1 = random.randint(1, hap-1)
op2 = hap - op1
result = str(op1) + "+" + str(op2)
return {
'result' : result
}
class testQueryStrinJsonResource(Resource) :
def get(self) : # Query String
hap = request.args.get('hap')
op1 = random.randint(1, int(hap)-1)
op2 = int(hap) - op1
result = str(op1) + "+" + str(op2)
return {
'result' : result
}
def put(self) : # Json
data = request.get_json()
op1 = random.randint(1, data['hap']-1)
op2 = data['hap'] - op1
result = str(op1) + "+" + str(op2)
return {
'result' : result
}
사용 예시
Path
Query String
Json
DB 연동
- app.py (메인)
from flask import Flask
from flask_restful import Api
from test import testMysqlConnect
app = Flask(__name__)
api = Api(app)
api.add_resource(testMysqlConnect, '/mysqltest')
if __name__ == '__main__' :
app.run()
DB 설정 (MySQL)
- mysql_connection.py
import mysql.connector
def getConnection() :
connection = mysql.connector.connect(
host='localhost'
database='test'
user='root',
password='1234' )
return connection
CRUD / Method
- mysql_test.py
from flask import request
from flask_restful import Resource
import mysql.connector
from mysql_connection import getConnection
class MysqlResource(Resource) :
# 메소드 작성
select (get)
예시) 페이징 기법을 활용하여 데이터 조회
def get(self):
# 쿼리 스트링으로 오는 데이터 저장, 페이징 처리
offset = request.args.get('offset')
limit = request.args.get('limit')
try :
# DB 접속
connection = getConnection()
# 쿼리 작성
query = '''
select *
from testtable
limit
''' + offset + ''',''' + limit + ''';'''
# 셀렉트문은 딕셔너리(키:밸류) 형태로 값 호출
cursor = connection.cursor(dictionary=True)
# 쿼리 실행
cursor.execute(query)
# 조회 데이터 저장 (fetchall : 데이터를 배열 형태로 값 호출)
result_list = cursor.fetchall()
# DB에서 시간 데이터를 불러올 경우, 데이터 타입 변경
# i = 0
# for record in result_list :
# result_list[i]['created_at'] = record['created_at'].isoformat()
# result_list[i]['updated_at'] = record['updated_at'].isoformat()
# i += 1
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503 #HTTPStatus.SERVICE_UNAVAILABLE
return{ # 조회 결과는 json 형식으로 작성
"result" : "success",
"count" : len(result_list),
"result_list" : result_list
}, 200
insert (post)
예시) 이름과 이메일을 DB에 저장
def post(self) :
# 클라이언트에서 body 부분에 작성한 json을 받아오는 코드
data = request.get_json()
try :
# DB 접속
connection = getConnection()
# 쿼리 작성, 입력할 데이터 %s로 입력
query = '''
insert into testtable (name, email)
values (%s, %s);
'''
# json으로 전달 받은 데이터 저장
record = (data['name'], data['email'])
# 커서 생성 및 쿼리 실행
cursor = connection.cursor()
cursor.execute(query, record)
# 입력한 데이터 DB에 커밋
connection.commit()
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503 #HTTPStatus.SERVICE_UNAVAILABLE
return { "result" : "success" } # 조회 결과는 json 형식으로 작성
update (put)
예시) 특정 id의 이메일 정보 수정
def put(self) :
# 클라이언트에서 body 부분에 작성한 json을 받아오는 코드
data = request.get_json()
try :
# DB 접속
connection = getConnection()
# 쿼리 작성, 입력할 데이터 %s로 입력
query = '''
update testtable
set email = %s
where id = %s;
'''
# json으로 전달 받은 데이터 저장
record = (data['email'], data['id'])
# 커서 생성 및 쿼리 실행
cursor = connection.cursor()
cursor.execute(query, record)
# 입력한 데이터 DB에 커밋
connection.commit()
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503 #HTTPStatus.SERVICE_UNAVAILABLE
return {"result" : "success"}, 200 # 조회 결과는 json 형식으로 작성
delete (delete)
def delete(self) :
# 클라이언트에서 body 부분에 작성한 json을 받아오는 코드
data = request.get_json()
try :
# DB 접속
connection = getConnection()
# 쿼리 작성, 입력할 데이터 %s로 입력
query = '''
delete from testtable
where id = %s;
'''
# json으로 전달 받은 데이터 저장
record = (data['id'], )
# 커서 생성 및 쿼리 실행
cursor = connection.cursor()
cursor.execute(query, record)
# 입력한 데이터 DB에 커밋
connection.commit()
cursor.close()
connection.close()
except mysql.connector.Error as e :
print(e)
cursor.close()
connection.close()
return {"error" : str(e)}, 503 #HTTPStatus.SERVICE_UNAVAILABLE
return {"result" : "success"}, 200 # 조회 결과는 json 형식으로 작성