붉은거위 노트 (redgoose note)

API 서버 연구 노트

Nest
Development
Category
Python
Hit
14
Star
0

파이썬은 처음 다뤄본 레벨에서 시작한다.
도커 컨테이너를 띄어보는데까지 테스트를 해보기로 한다.

파이썬 학습

모듈

모듈을 디렉토리 경로로 사용하려면 __init__.py 파일을 만들어서 넣어줘야한다. 빈 내용이라도 만들어 넣어두면 모듈로써 같이 들어있는 파일을 사용할 수 있다.

from foo.bar import func

상대경로로 모듈파일을 사용하고 싶다면 .foo.bar로 사용할 수 있다.
..foo.bar 이렇게 사용하면 부모파일로 불러올 수 있다.

from .foo.bar import func
from ..foo.bar import func

개발할때 환경 만들기

venv 사용하기

일반적으로 venv를 사용하는 편이다. 마치 npm 같이 패키시를 지역화하여 관리한다.
venv는 프로덕션 레벨에서 사용하지 않고, 개발할때 사용하는거 같다.

python -m venv .venv

실행하면 .venv 디렉토리가 만들어지면서 초기화 완료된다.
활성화와 비활성화 사용법은 다음과 같다.

# 활성화
source .venv/bin/activate

# 비활성화
deactivate

fastapi

API 프레임워크들이 여러가지가 있지만 성능적인 측면에서는 fastapi가 가장 좋은 평가를 가지고 있어보인다.
파이썬 하나도 모르는 상태에서 예제코드를 실행해보니 잘 작동한다.

# main.py

import os, time
from fastapi import FastAPI, status, staticfiles, Form, UploadFile, HTTPException

app = FastAPI()

@app.get('/api/')
async def root():
    foo = os.getenv('FOO', 'var')
    return {
        'message': 'Hello World 123123',
        'NUMMMM': 123123,
        'FOO': foo,
    }

@app.get('/api/items/{id}/')
async def item(id: int):
    return {
        'id': id,
        'message': f'Item #{id}',
        'list': [ 1, 2, 3, 4 ],
    }

@app.get('/api/blocking/')
def blocking():
    if (True):
        raise HTTPException(status_code=401, detail='CODEEEE')
    return {
        'message': 'Blocking request',
    }

@app.post('/api/upload-file/')
async def upload_file(file: UploadFile, message: str = Form(...)):
    print(file)
    return {
        'filename': file.filename,
        'size': file.size,
        'type': file.content_type,
        'message': message,
    }

# static serving
app.mount('/', staticfiles.StaticFiles(directory='dist', html=True), name='static')

테스트하기

pytest 모듈로 테스트를 만들 수 있다.
테스트 코드를 작성하는것으로 API 클라이언트로 호출할 필요는 없어보인다.

PyTest 단위 테스트 작성 / PyTest cheat sheet 치트 시트
https://blog.naver.com/himi0301/223494986774