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