C reate ----POST-----> \
R ead -----GET-----> HTTP Methods
U pdate ---PUT----> /
D elete ---DELETE----> /
REST : Representational State Tansfer
Representational : 표현
State : 상태
Transfer : 전송 ( 클라이언트 <==> 서버 사이의 전송)
API(Application Programming Interface)란?
:프로그램간의 상호작용을 뜻함(데이터 교환)
JSON(JavaScript Object Notation)
-> 컴퓨터 간 상호작용을 할 때 자주 사용하는 형식
-> {key:value} 형태로 이루어진 데이터 포맷
"glossary": {"title" : "example glossary",~}
GET
(1) 전체 게시글을 불러오는 API**
@app.route('/api/v1/feeds', methods=["GET"])
def show_all_feeds():
data = {'result':'success', 'data':{'feed1':'data1', 'feed2':'data2'}}
return data
원래는 jsonify로 data를 감싸줘야하는데 이미 data가 dict 형태로 되어있기 때문에 감싸주지 않는다.
return jsonify({'result':'success', 'data':{'feed1':'data1', 'feed2':'data2'})
(2) 특정 게시글을 불러오는 API
@app.route('/api/v1/feeds/<int:feed_id>', methods=["GET"])
def show_one_feed(feed_id):
print(feed_id)
data = {'result':'success', 'data':{'feed1':'data1'}
return data
POST
import request
~
@app.route('/api/v1/feeds', methods=["POST"]
def create_one_feed():
name = request.form['name']
age = request.form['age']
return jsonify({'result':'success'})
[The Flask request object contains the data that the client (eg a browser) has sent to your app - ie the URL parameters, any POST data, etc.]
ㄴ> request : 유저가 보낸 데이터를 리퀘스트라고 함
[The requests library is for your app to make HTTP request to other sites, usually APIs. It makes an outgoing request and returns the response from the external site.]
post 하려면 현재 html에서는 불가능 하므로 postman을 이용함
postman 접속 -> api together
: rest api의 특징이 모두 담겨져있으며 메서드나 url 값, 헤더나 바디를 통해서 직접 프로그램을 통해서 rest api를 만들 수 있는 프로그램이다.
Workspace 생성 -> Collection 생성 -> get request -> POST -> 127.0.0.1:5000/api/v1/feeds 입력 -> body -> form-data -> key (name, age) : value('게시글 제목',25) 각각 순서대로 입력 -> send
404, 405 오류가 나면 서버 종료 후 다시 플라스크 실행시킨 후 send 하면 postman에 {'result':'success'} 가 나타남.
터미널에는
'게시글 제목' 25 라고 나타남
<연습>
datas = [{"items : [{"name" : "item1", "price" : 10}]}]
@app.route('/api/v1/datas', methods=["POST"])
def get_datas():
return {"datas" : datas}
@app.route('/api/v1/datas', methods=["POST"])
def create_data():
request_data = request.get.json()
new_data = {"items" : request_data.get("items", [])}
datas.append(new_data)
return new_data, 201
status code 뭔지 알아냄
404 -> 오류
200, 201 -> 정상으로 열림
뭐 이런것 같움 흐하하하!
다시 postman !
해당 request -> duplicate -> (이름 변경) 02.jsonify(post) (2) -> POST, 127.0.0.1:5000/api/v1/datas -> {"items : [{"name" : "item1", "price" : 10}]} 복사 -> body -> form 이 아니라 raw 선택-> {"items : [{"name" : "item2", "price" : 20}]} 입력 -> send
3-1 ) 해당환경를 가상환경으로 만들어주기
3-2) flask-restful 설치
pip3 install flask-restful
3-3) 플라스크에서 다른 모듈 불러오기
api = Api(app)
Api를 불러오고 app을 넘겨주고 api 로 변수를 지정해줌(?)
item = [ ]
DB의 대체 역할(간단한 DB)
class = Item(Resource):
아이템이라는 class는 리소스를 상속받음
api = Api(app)
item = [ ]
class Item(Resource):
# 특정 아이템 조회
def get(self, item):
for item in items:
if item["name"] == name:
# 아이템의 name에 key값이 존재한다면
(name이라는 값이 입력이 되었을 때 우리가 갖고 있는 그 아이템이라는 데이터 안에서 그 key 값이 존재하면)
return item
return {"MSG" : "Item not found"}, 404
# 아이템 생성
def post(self, name):
for item in items:
if item["name"] == name:
return {"MSG" : "Item already exists"}, 400
data = request.get_json()
new_item = {"name" : name, "price" : data["price"]}
items.append(new_item)
return new_item
# 아이템 업데이트
def put(self, name):
data = request.get_json()
for item in items:
if item["name"] == name:
item["price"] = data["price"]
return item
# 만약 업데이트하고자 하는 아이템이 없을 경우 -> 추가한다
new_item = {"name" : name, "price" : data["price"]}
items.append(new_item)
return new_item
# 아이템 삭제
def delete(self):
global items
items = [ item for item in items if item["name] != name]
return {"MSG" : "Item Deleted"}
클래스 안에 있는 함수들은 반드시 self 라는 인자를 갖고 있어야 한다.
# 경로 추가
api.add_resource(Item, '/item/<str:name>')
이렇게 마지막으로 app에 등록을 해줘야 된다.
다시 POSTMAN으로
Part2 restfulapi 에서 add request -> 03.restfulapi 로 이름 변경 후 POST 127.0.0.1:5000/item/name -> Body , raw , json 으로 {"price" : 5000} 입력 후 send
=> 이런식으로 몇개 POST 함
GET, PUT, DELETE 해보면서 확인함