[Flask] Flask/Rest/Fast API

yoonseok choi·2022년 8월 25일
0
post-custom-banner

Flask / Rest / FastAPI

REST API?

https://velog.io/@0andwild/RESTful-API란-무엇인가

  • 자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것
    • URL을 통해 Resource를 명시
    • HTTP Method(POST,GET,PUT,DELETE)를 통해 opreation 수행
  1. 래시 구분자(/)는 계층관계를 나타내는데 사용한다.
  2. URL 마지막 문자로 슬래시(/)를 포함하지 않는다
  3. 하이픈 ( - )은 URL 가독성을 높이는데 사용한다.
    1. 밑줄 ( _ )은 URL에 사용하지 않는다.
  4. URL 경로에는 소문자가 적합하다.
  • URL 경로에 대문자 사용은 피하도록 한다.
  1. 파일확장자는 URL에 포함하지 않는다.
    1. REST API 에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URL안에 포함시키지 않는다.
    2. 대신 Accept Header 를 사용한다.
    3. ex) GET: http://restapi.exam.com/orders/2/Accept: image/jpg

Flask

Operation Flow of Flask

Flask setting

from flask import Flask
from flask import render_template
from flask import request

app = Flask(__name__) # 모듈 이름 생성
@app.route('/SpecialSale')
# 127.0.0.1:5000의 다음 단인
# **127.0.0.1:5000/SpecialSale** 주소에 할당된 경로로 이동하여 해당 경로의 내용을 출력

# if @app.route('/')라면 http://localhost:5000/를 가리킨다.

def PredictionSpecialSale():
    busy_day = request.args.get('busy_day')
    high_temperature = request.args.get('high_temperature')
# html의 KEY & VALUE에 해당하는 값을 get을 통해 받아온다.
    
    if busy_day == None or high_temperature == None:
        return render_templates('SpecialSale.html', Output = '')
    
    Input = pd.DataFrame({
        'busy_day':[int(busy_day)],
        'high_temperature':[float(high_temperature)]
    })
    ModelOutput = model.predict(Input)[0][0]

    return render_templates('SpecialSale.html', Output = ModelOutput)
# if문이 아니라면 templates에 있는 html을 불러와서 output을 출력해준다.
app.run(host='0.0.0.0', port=5000)

Html setting

<form action="SpecialSale">

    <div class="form-group">
      <label for="busy_day">busy_day</label>
      <input type="text" class="form-control" id="busy_day" name="busy_day">
# name에 해당하는 busy_day가 KEY값이 되고 입력받는 값이 VALUE가 됀다

</div>

    <div class="form-group">
      <label for="high_temperature">Temperature:</label>
      <input type="text" class="form-control" id="pwd" name="high_temperature">
# name에 해당하는 busy_day가 KEY값이 되고 입력받는 값이 VALUE가 됀다
    </div>
<button type="submit" class="btn btn-primary">Submit</button>
  </form>

  <button type="button" class="btn btn-success">{{ Output }}</button>
# button form에 output을 올려서 render_templates값을 받아온다.
</div>

FastAPI

  • 표준 파이썬 타입을 바탕으로 한 현대적이고 빠른(고성능) API 서버 웹 프레임워크
pip install fastapi
pip install "uvicorn[standard]" # 실시간 미리보기
profile
Concilio et Labore ( 지혜와 노력으로 )
post-custom-banner

0개의 댓글