REST API 엔드포인트 구현
이제 재미있는 부분을 시작할 시간입니다! 도서에 필요한 REST API 엔드포인트를 구현해보겠습니다. routes.py 파일에 엔드포인트 구현을 추가하고, main.py 파일에 라우트를 로드합니다. 먼저 routes.py에서 APIRouter 객체를 초기화합니다.
pymongo-fastapi-crud/routes.py
보시는 것처럼, fastapi 패키지에서 APIRouter를 가져오고 있습니다. 이 객체를 사용하여 REST API의 엔드포인트를 정의하겠습니다. 앞서 정의한 Book 및 BookUpdate 모델도 가져오고 있습니다.
POST /book
첫 번째로 구현할 엔드포인트는 새 책을 생성하는 POST /books 엔드포인트입니다. router = APIRouter() 줄 다음에 다음을 추가합니다.
pymongo-fastapi-crud/routes.py
모든 도서 엔드포인트 앞에 /books를 붙이기 때문에 경로는 /입니다. response_description은 API 문서에 표시됩니다. status_code는 요청이 성공했을 때 반환되는 HTTP 상태 코드입니다. Book 모델을 사용하여 요청 본문에 전달된 데이터와 반환하는 응답의 유효성을 검사합니다. FastAPI가 유효성 검사를 처리합니다. 함수 본문에서 PyMongo의 insert_one() 메서드를 사용하여 새 도서를 `books` 컬렉션에 추가합니다. find_one() 메서드를 사용하여 새로 생성된 도서를 데이터베이스에서 조회합니다. PyMongo 문서의 컬렉션 수준 작업에 대한 도움말에서 insert_one() 및 find_one() 메서드에 대해 더 알아보실 수 있습니다.
마지막으로 생성된 책을 반환합니다.
GET /book
다음으로 books 컬렉션의 모든 문서를 목록으로 반환하는 `GET /book` 엔드포인트를 구현하겠습니다. routes.py 파일의 끝에 다음을 추가하세요.
pymongo-fastapi-crud/routes.py
응답 모델로 List[Book] 타입을 사용하고 있습니다. 이는 응답이 Book 객체의 목록이 될 것임을 의미합니다. 또한 find() 메서드를 사용하여 데이터베이스에서 최대 100권의 도서를 조회합니다. limit 및 find() 메서드의 다른 매개변수에 대해 자세히 알아보려면 PyMongo 문서 페이지를 확인하세요.
GET /book/{id}
id로 단일 책을 검색하기 위한 또 다른 GET 엔드포인트를 생성합니다. routes.py 파일 끝에 다음을 추가합니다:
pymongo-fastapi-crud/routes.py
여기서는 find_one() 메서드를 사용하여 데이터베이스에서 단일 도서를 조회합니다. 도서가 발견되면 반환합니다. 도서를 찾지 못하면 404 Not Found 상태 코드와 함께 적절한 메시지를 포함한 HTTPException을 반환합니다.
PUT /book/{id}
아마도 REST API에서 가장 중요한 엔드포인트는 `PUT /book/{id}` 엔드포인트일 것입니다. 이 엔드포인트는 단일 도서를 업데이트할 수 있게 해줍니다. routes.py 파일의 끝에 다음 구현을 추가합니다.
pymongo-fastapi-crud/routes.py
코드를 살펴보겠습니다. 먼저 도서를 업데이트하는 데 사용할 객체를 만듭니다. 그런 다음 book 객체에 필드가 있으면 update_one() 메서드를 사용하여 데이터베이스의 도서를 업데이트합니다. 여기서 중요한 점은 $set 업데이트 연산자를 사용하여 전체 문서를 다시 작성하는 대신 지정된 필드만 업데이트한다는 것입니다.
그런 다음 update_result의 modified_count 속성을 확인하여 도서가 업데이트되었는지 확인합니다. 해당 사항이 있는 경우, 업데이트된 책을 데이터베이스에서 조회하고 반환하기 위해 find_one() 메서드를 사용합니다.
book 객체에 필드가 없으면 기존 도서만 반환합니다. 그러나 도서를 찾지 못한 경우에는 404 Not Found 상태 코드와 함께 HTTPException을 반환합니다.
DELETE /book/{id}
마지막으로 구현할 엔드포인트는 ID로 단일 책을 삭제하는 DELETE /book/{id} 엔드포인트입니다. routes.py 파일의 끝에 다음 내용을 추가합니다.
pymongo-fastapi-crud/routes.py
여기서 주목할 점은 도서가 삭제된 경우 204 No Content 상태 코드를 반환한다는 것입니다. 이 상태 코드는 요청이 성공적으로 처리되었고 응답 페이로드 본문에 전송할 콘텐츠가 없음을 나타냅니다.
등록하기
마지막으로 /book 엔드포인트를 등록해야 합니다. main.py 파일을 열고 routes 모듈을 가져온 다음 book 라우터를 등록합니다. main.py 파일의 최종 버전은 다음과 같아야 합니다.
pymongo-fastapi-crud/main.py