Implemente os pontos de extremidade da REST API
É hora da parte divertida! Vamos criar os pontos de extremidade da REST API para nossos livros! Vamos adicionar a implementação dos pontos de extremidade no arquivo routes.py e carregar as rotas no arquivo main.py. Começaremos inicializando um objeto APIRouter em routes.py:
pymongo-fastapi-crud/routes.py
Como você percebe, estamos importando o APIRouter do pacote FastAPI. Utilizaremos este objeto para definir os pontos de extremidade da nossa REST API. Também estamos importando os modelos Book e BookUpdate que definimos anteriormente.
publicação /book
O primeiro ponto de extremidade que implementaremos é o ponto de extremidade de publicação /books para criar um novo livro. Adicione o seguinte após a linha router = APIRouter():
pymongo-fastapi-crud/routes.py
A rota é / porque prefixaremos todos os pontos de extremidade de livros com /books. A response_description será exibida na documentação da API. O status_code é o código de status HTTP retornado quando a solicitação é bem-sucedida. Usamos o modelo Book para validar os dados transmitidos no corpo da solicitação e a resposta que enviamos de volta. O FastAPI realiza a validação para nós. No corpo da função, utilizamos o método insert_one() do PyMongo para inserir o novo livro na coleção books. Estamos utilizando o método find_one() para obter o livro recém-criado do banco de dados. Você pode ler mais sobre os métodos insert_one() e find_one() no artigo da documentação do PyMongo para operações em nível de coleção.
Por fim, estamos retornando o livro criado.
GET /book
Em seguida, implementaremos o ponto de extremidade GET /book para retornar uma lista com todos os documentos na coleção de livros. Anexe o seguinte ao final do arquivo routes.py:
pymongo-fastapi-crud/routes.py
Para o modelo de resposta, estamos utilizando o tipo List[Book]. Isso significa que a resposta será uma lista de objetos Book. Também estamos utilizando o método find() para recuperar no máximo 100 livros do banco de dados. Para aprender mais sobre o limite e os outros parâmetros do método find(), consulte a página dedicada da documentação do PyMongo.
GET /book/{id}
Vamos criar outro ponto de extremidade GET para recuperar um único livro pelo seu id. Adicione o seguinte ao final do arquivo routes.py:
pymongo-fastapi-crud/routes.py
Aqui, estamos usando o método find_one() para recuperar um único livro do banco de dados. Se o livro for encontrado, nós o devolveremos. Se o livro não for encontrado, levantaremos uma HTTPException com um código de status 404 Not Found e uma mensagem apropriada.
PUT /book/{id}
Indiscutivelmente, o ponto de extremidade mais importante para nossa REST API é o ponto de extremidade PUT /book/{id}. Este ponto de extremidade nos permite atualizar um único livro. Adicione a implementação ao final do arquivo routes.py:
pymongo-fastapi-crud/routes.py
Vamos analisar o código. Primeiro, estamos criando um objeto que utilizaremos para atualizar o livro. Então, se houver algum campo no objeto book, utilizamos o método update_one() para atualizar o livro no banco de dados. É importante observar que estamos usando o operador de atualização $set para garantir que apenas os campos especificados sejam atualizados em vez de reescrever todo o documento.
Em seguida, verificamos o atributo modified_count do update_result para confirmar que o livro foi atualizado. Se for esse o caso, estamos usando o método find_one() para recuperar o livro atualizado do banco de dados e retorná-lo.
Se não houver campos no objeto book, estamos apenas retornando o livro existente. No entanto, se o livro não for encontrado, estamos a gerar uma HTTPException com um código de estado 404 Não Encontrado.
excluir /book/{id}
O último ponto de extremidade que implementaremos é o excluir /book/{id} ponto de extremidade para excluir um único livro pelo seu id. Adicione o seguinte ao final do arquivo routes.py:
pymongo-fastapi-crud/routes.py
A única coisa notável aqui é que, se o livro foi excluído, estamos retornando um código de status 204 Sem Conteúdo. Este é um código de status de sucesso que indica que a solicitação foi bem-sucedida e não há conteúdo a ser enviado no corpo da carga útil da resposta.
Registre o
Finalmente, precisamos registrar os pontos de extremidade /book. Abra o arquivo main.py, importe o módulo routes e registre o roteador de livros. Sua versão final do arquivo main.py deve ser:
pymongo-fastapi-crud/main.py