바이너리 Response

 
#이제 이 버퍼에다 바이너리 값을 wirte 하면 됨
buffer = io.BytesIO()
# 대충 이런느낌으로 파일 인자에 buffer 를 줘서 쓰기도 함
open(buffer, "w")
 
# buffer.getvalue(): bytes
# bytes 타입으로 넣어주면됨
return Response(buffer.getvalue(), media_type="image/png" )
  • bytes 타입으로 Response에 넣어줌

uvicorn-CLI 패키지 경로 문제 해결

  • 이게 프로젝트 경로가 루트로 되어있어서 실행서버 코드가 루트에 없으면 패키지 경로가 달라져서 그렇다

    # --app-dir설정하면 처음 서버 코드지정은 패키지 없이
    uvicorn Server:server --app-dir <서버코드경>

uvicorn log 옵션 원본

LOGGING_CONFIG: = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": {
        "default": {
            "()": "uvicorn.logging.DefaultFormatter",
            "fmt": "%(levelprefix)s %(message)s",
            "use_colors": None,
        },
        "access": {
            "()": "uvicorn.logging.AccessFormatter",
            "fmt": '%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s',
        },
    },
    "handlers": {
        "default": {
            "formatter": "default",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stderr",
        },
        "access": {
            "formatter": "access",
            "class": "logging.StreamHandler",
            "stream": "ext://sys.stdout",
        },
    },
    "loggers": {
        "uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": False},
        "uvicorn.error": {"level": "INFO"},
        "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": False},
    },
}

URI 리버스 프록시 구성 시 swagger 경로 문제

  • 왜인지 모르겠지만 swagger 로드에 필요한 openapi.json 경로가 무조건 / 이걸로 되어있어
  • 최상위 URI 가 / 아닌경우 못 불러온다

해결 방법

  • 서버 구성 시 root_path 설정

    server = FastAPI(root_path="/리버스 프록시와 동일한 경로")
    • uvicorn 명령에서 수정할수도 있긴한데 redirct 발생 시 재대로 경로를 못찾아가는 문제가 있다
    • 다행히도 / 경로에서도 api가 문제없이 작동한다 즉 / 경로나, root_path 설정한 경로 둘 다 문제 없이 작동한다