FastAPI를 사용한 스타트업 프로젝트
목차
개요
"startup project with..."시리즈의 경우 파이썬 웹 개발에 접근할 예정이며 FastAPI web framework 을 사용해 보았습니다. 사용이 간편해서 매우 놀랐고 자세히 알아보고 싶었습니다. 무엇보다도 테스트 기능입니다.
애완동물 프로젝트
기능을 테스트하기 위해 이것을 구현했습니다pet project. 기본적으로 하나의 나머지 API가 있는 간단한 서버입니다.
로컬 실행
코드를 체크아웃한 후 터미널 애플리케이션에서 "script/ci"를 간단히 실행할 수 있습니다. 스크립트는 다음 단계를 실행합니다.
로컬 호스트 컨테이너에서 API를 사용하려면 다음 명령을 실행하면 됩니다.
docker-compose up api
curl http://localhost:8080/items/123\?q\="test"
두 번째는 다음 응답을 제공해야 합니다.
{"item_id":123,"q":"test","use_case":"Production Code"}
범위
코드 디자인과 관련하여 저는 두 가지 사항을 달성하고 싶었습니다.
포인트 1)에 관해서는 다음이 있습니다.
class AppController:
def __init__(self, app: FastAPI, use_case: UseCase):
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Optional[str] = None):
return {
"item_id": item_id, "q": q, "use_case": use_case.run()
AppController 클래스는 FastAPI 및 UseCase 객체로 빌드할 수 있습니다.
첫 번째는 FastAPI 구성과 관련된 것이고 두 번째는 내 비즈니스 로직입니다.
이 클래스가 있으면 앱에 필요한 코드를 연결하는 startup() 메서드를 사용하여 내 애플리케이션을 구성할 수 있습니다.
def startup(use_case: UseCase = ProductionUseCase()):
app = FastAPI()
AppController(app, use_case)
return app
마지막으로 도커 컨테이너를 사용하여 애플리케이션을 실행할 수 있습니다. 다음은 컨테이너 정의입니다.
FROM python:3.10.3-slim-bullseye
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:startup", "--host", "0.0.0.0", "--port", "8080", "--workers", "4"]
테스트
물론 응용 프로그램을 쉽게 테스트하기 위해 종속성을 주입하는 데 startup() 메서드를 사용할 수도 있습니다.
다음은 컨트롤러에 대한 두 가지 테스트입니다.
def test_e2e_production_code(self):
client = TestClient(startup())
response = client.get("/items/987?q=this%20is%20the%20query")
self.assertEqual(200, response.status_code)
self.assertEqual(
{"item_id": 987, "q": "this is the query", "use_case": "Production Code"},
response.json()
)
class TestableUseCase(UseCase):
def run(self):
return "Test Code"
def test_e2e_testable_code(self):
client = TestClient(startup(TestableUseCase()))
response = client.get("/items/987?q=this%20is%20the%20query")
self.assertEqual(200, response.status_code)
self.assertEqual(
{"item_id": 987, "q": "this is the query", "use_case": "Test Code"},
response.json()
)
첫 번째 테스트는 프로덕션 코드 종속성을 사용하여 프로덕션 사용 사례로 클라이언트를 빌드합니다.
client = TestClient(startup())
때로는 개발 중에 실제 연결을 사용할 수 없거나 스텁된 협력자를 사용하여 테스트(단위, 통합 ...)를 분해하려고 합니다.
이러한 이유로 두 번째 테스트(test_e2e_testable_code)와 같이 TestableCollaborator를 주입할 수 있습니다.
client = TestClient(startup(TestableUseCase()))
고려 사항
설계 관점에서 FastAPI는 마이크로서비스를 구축하는 데 사용할 수 있는 매우 유용한 프레임워크입니다. 컨테이너 논리 및 클라우드 개발에 매우 적합합니다. 우리가 개발할 애플리케이션을 위한 테스트 스위트를 구축하는 것도 매우 쉽습니다.
물론 종속성 또는 DBMS 액세스와 같이 제공하는 일부 기능으로 인해 복잡성이 발생하지 않도록 주의해야 합니다.
참조
Github project link
Reference
이 문제에 관하여(FastAPI를 사용한 스타트업 프로젝트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maverick198/startup-project-with-fastapi-27im텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)