: Application Programming Interface
정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다. 이는 고유한 기능을 가진 소프트웨어 간의 요청과 응답을 사용한 통신을 뜻한다.
현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 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 에러가 나기 시작했다.
실행한 창에는 '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와 시도해본 것들...
너무 답답해서 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"}
일단 설치된 fastapi와 starlette를 제거했다.
pip uninstall fastapi starlette
myenv라는 이름의 가상공간을 만들었다.
python -m venv myenv
myenv 가상환경 활성화
source myenv/bin/activate
fastapid와 starlette 재설치
pip install fastapi starlette
pip install "uvicorn[standard]"
재실행
uvicorn main:app --reload --port 8000
(추가사항) 패키지 설치 확인 방법
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