Como posso criar um endpoint usando o FastAPI e uvicorn usando o Google Colab?
Como posso criar um endpoint usando o FastAPI e uvicorn usando o Google Colab?
Oi Renata! Tudo bem?
Criar um endpoint usando FastAPI e uvicorn no Google Colab é um pouco diferente, pois o Colab é voltado para execução de notebooks e não é ideal para rodar servidores web diretamente. No entanto, é possível fazer isso com alguns ajustes.
Primeiramente temos que estabelecer algumas configurações do ngrok, que é o serviço que utilizaremos em vez do local, e ele requer que você tenha uma conta verificada e utilize um authtoken para autenticação. Para resolver isso, siga os seguintes passos:
Crie uma conta no ngrok:
Obtenha o authtoken:
Instalar as bibliotecas necessárias:
Após a configuração anterior, você precisa instalar o FastAPI e o uvicorn no seu notebook Colab. Você pode fazer isso usando o comando !pip
:
!pip install fastapi uvicorn nest-asyncio pyngrok
Além do FastAPI e uvicorn, estamos instalando nest-asyncio
e pyngrok
para ajudar a rodar o servidor no Colab.
Configurar o FastAPI:
Em seguida, você pode criar seu aplicativo FastAPI. Vamos criar um arquivo main.py
diretamente no notebook:
from fastapi import FastAPI
app = FastAPI()
@app.get('/api/hello')
def hello_world():
return {'Hello': 'World'}
Rodar o servidor:
O Google Colab não permite que você acesse diretamente o localhost, então vamos usar ngrok
para expor o servidor local para a internet. Primeiro, vamos configurar o nest-asyncio
e uvicorn
para rodar no notebook:
import nest_asyncio
from pyngrok import ngrok
import uvicorn
nest_asyncio.apply()
authtoken = "TOKEN_AQUI" # Substitua pelo seu authtoken
ngrok.set_auth_token(authtoken)
# Expor o servidor local para a internet
public_url = ngrok.connect(8000)
print(f"Public URL: {public_url}")
# Rodar o servidor uvicorn
uvicorn.run(app, host='0.0.0.0', port=8000)
Quando você executar o código acima, ele irá iniciar o servidor FastAPI e fornecer uma URL pública através do ngrok
que você pode usar para acessar o endpoint /api/hello
.
Espero ter ajudado e bons estudos!