1. REST

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)란?
:프로그램간의 상호작용을 뜻함(데이터 교환)

2. jsonify를 활용하여 REST API 생성

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. flask-restful api를 활용하여 REST API 생성

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 해보면서 확인함

profile
개발 광기를 드러내보쟈..

0개의 댓글