FastAPI⚡️ 기초 연습과 favicon error

API란?

: Application Programming Interface
정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다. 이는 고유한 기능을 가진 소프트웨어 간의 요청과 응답을 사용한 통신을 뜻한다.

FastAPI⚡️란?

현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.8+의 API를 빌드하기 위한 웹 프레임워크 (공식 사이트 설명)

기초 연습

VS code와 파이썬을 사용했다.

# main.py
from fastapi import FastAPI
app = FastAPI()
#
@app.get("/")
def read_root():
    return 'hello'

terminal
pip install fastapi
pip install "uvicorn[standard]"

이렇게 해서 uvicorn main:app --reload 명령어를 실행하고
만들어진 페이지에 접속하면 "hello"를 출력한다.

favicorn 에러

내 경우에는 처음부터 favicorn 에러가 나기 시작했다.
실행한 창에는 'Internal Server Error'라고 떴다.
문제는... 검색해봐도 안 되는 사람이 아무도 없었다.
(😥 나만... 안 되나본데...?)

"GET /favicon.ico HTTP/1.1" 500

favicorn이 같은 경로에 있지 않아서 생기는 error라고 한다.

flask에서는 이렇게 해결 하는 것 같았다.

import os
from flask import Flask, send_from_directory
#
@app.route('/favicon.ico')
def favicon():
    return send_from_directory(os.path.join(app.root_path, '파일명'),'favicon.ico', mimetype='image/v[nd.microsoft.icon')

근데 fastapi에서는 send from directroy를 지원하지 않는다며 오류가 나서 사용할 수 없었다.

그리고 ChatGPT와 시도해본 것들...

  • favicon을 넣는 함수를 추가
  • vs code의 language server를 변경
  • fastapi와 starlette를 업그레이드
  • 미들웨어 관련 코드를 추가&수정
  • --port 8000
  • fastapi와 starlette의 호환 버전을 확인해 교체
  • fastapi와 starlette 라이브러리 재설치

너무 답답해서 ChatGPT에게 문제를 해결하면 팁을 주겠다고 해보았다.
그랬더니 깔끔한 답을 주었고 더 이상 에러가 나지 않았다... 🥲

해결 방법🤑

# main.py
from fastapi import FastAPI, Response
from fastapi.responses import HTMLResponse
app = FastAPI()
#
@app.get("/favicon.ico", response_class=HTMLResponse)
async def favicon():
    return Response(content="", media_type="image/x-icon")
#
@app.get("/")
def read_root():
    return {"hello"}
  1. 일단 설치된 fastapi와 starlette를 제거했다.
    pip uninstall fastapi starlette

  2. myenv라는 이름의 가상공간을 만들었다.
    python -m venv myenv

  3. myenv 가상환경 활성화
    source myenv/bin/activate

  4. fastapid와 starlette 재설치
    pip install fastapi starlette
    pip install "uvicorn[standard]"

  5. 재실행
    uvicorn main:app --reload --port 8000

  6. (추가사항) 패키지 설치 확인 방법
    pip list | grep fastapi
    pip list | grep starlette


/* reference */

https://fastapi.tiangolo.com/ko/
https://aws.amazon.com/ko/what-is/api/
https://6developer.com/948#google_vignette

                               
profile
☺︎𝔻𝕠 𝕨𝕙𝕒𝕥 𝕞𝕒𝕜𝕖𝕤 𝕪𝕠𝕦 𝕙𝕒𝕡𝕡𝕪☺️

0개의 댓글