A API (Interface de Programação de Aplicativos) é a espinha dorsal da arquitetura moderna porque permite que os aplicativos sejam modulares e desacoplados. Isso significa que você pode criar aplicativos de forma rápida e fácil, o que lhe permite mantê-los e atualizá-los com facilidade.
As APIs também são muito importantes no aprendizado de máquina porque permitem que diferentes aplicativos compartilhem dados e trabalhem juntos, economizando tempo e esforço. Há muitas estruturas diferentes para a criação de APIs em Python. Algumas das estruturas mais populares para a criação de APIs em Python são Django, Flask e FastAPI. Este tutorial é um mergulho profundo em uma das estruturas chamadas FastAPI.
O que é uma API?
API significa Interface de Programação de Aplicativos. Uma API é um intermediário de software que permite que dois aplicativos se comuniquem entre si. Quando você usa um aplicativo no telefone, o aplicativo se conecta à Internet e envia dados a um servidor. O servidor processa os dados e os envia de volta ao seu telefone. O aplicativo em seu telefone interpreta os dados e os apresenta a você de forma legível.
Uma API é como um garçom em um restaurante. O garçom recebe seu pedido e o envia para a cozinha. A cozinha então prepara a comida e a envia de volta ao garçom. O garçom traz a comida até você.
Da mesma forma, uma API recebe uma solicitação de um aplicativo e a envia a um servidor. Em seguida, o servidor processa a solicitação e envia os dados de volta para o aplicativo. Em seguida, o aplicativo interpreta os dados e os apresenta ao usuário.
O FastAPI é uma estrutura da Web de alto desempenho para a criação de APIs com Python 3.7+ com base em dicas de tipo Python padrão. Ele ajuda os desenvolvedores a criar aplicativos de forma rápida e eficiente. O FastAPI foi desenvolvido com base no servidor da Web Starlette e inclui recursos que facilitam a criação de aplicativos da Web, como validação automática de dados, tratamento de erros e documentos de API interativos.
Nesta seção, analisaremos todos esses recursos individualmente. Primeiro, vamos dar uma olhada nos principais recursos, conforme indicado na documentação original da FastAPI.
Desempenho: No mesmo nível do NodeJS e da linguagem Go.
Velocidade: Aumente a velocidade de desenvolvimento de 2 a 3 vezes.
Fácil: Excelente suporte ao editor. Conclusão em qualquer lugar. Fácil de aprender e usar.
Robusto: Código pronto para produção com documentação interativa automática.
Baseado em OpenAPI: Totalmente compatível com OpenAPI e JSON Schema.
Instalação do FastAPI
O FastAPI requer o Python 3.7+. Ele pode ser instalado usando o pip. Você precisará instalar o FastAPI e o servidor ASGI `uvicorn`.
Vamos começar a criar diretamente uma API de brinquedo muito simples. Estou usando o VS Code para implementar isso, mas você pode usar qualquer editor que desejar.
```
from typing import Union
from fastapi import FastAPI
app = FastAPI()@app.get("")defread_root():return{"Hello":"World"}@app.get("/items/{item_id}")defread_item(item_id:int, q: Union[str,None]=None):return{"item_id": item_id,"q": q}
```Tecnologia
`main` é o nome do arquivo Python, e `app` é a variável que armazena a classe FastAPI. Você pode dar a eles o nome que quiser. Depois de executar o comando acima, você verá algo parecido com isto em seu terminal:
Acesse o link em seu navegador e, se você vir uma página que mostre "Hello World", a API estará em funcionamento.
Imagem do autor
Parabéns por criar sua primeira API.
Documentos interativos da API
O FastAPI gera um "esquema" com todas as suas APIs usando o padrão OpenAPI para definir APIs. Um "esquema" é uma definição ou descrição de algo. Não o código que o implementa, mas apenas uma descrição abstrata. O esquema OpenAPI é o que alimenta os dois sistemas de documentação interativa incluídos na FastAPI.
Para ver a documentação, basta adicionar `/docs` à url (`http://127.0.0.1:8000/docs`). Esse link mostrará a documentação interativa automática da API.
Imagem do autor
Clique no botão `Try it out` no canto superior direito para testar a API.
Imagem do autor
Você pode ver que o corpo da resposta é um dicionário. Essa é a chamada de retorno da função `read_item` definida no `main.py`. Você também pode ver o URL da solicitação `http://127.0.0.1:8000/items/1?q=orange`. `1` e `orange` foram nossas entradas para a API.
Há uma alternativa de documentação automática interativa disponível no FastAPI. Para verificar isso, acesse http://127.0.0.1:8000/redoc`. É assim que ele se parece:
Imagem do autor
Exemplos mais avançados
Ao criar uma API, o "caminho" define a rota ou o ponto final da solicitação. No entanto, há mais uma escolha que precisamos fazer aqui, ou seja, "Operação". A palavra "operação" aqui se refere a um dos "métodos" do HTTP. Ao usar um (ou mais) desses chamados "métodos", você pode se comunicar com cada um dos vários caminhos compatíveis com o protocolo HTTP. Normalmente, você usaria:
POST: para criar dados.
GET: para ler dados.
PUT: para atualizar dados.
DELETE: para excluir dados.
E alguns outros avançados
A FastAPI é compatível com todos os métodos http.
O fato de o FastAPI ser baseado em dicas de tipo Python é outro aspecto importante dessa estrutura. As dicas de tipo são compatíveis com as versões do Python 3.6 e posteriores. As dicas de tipo são um tipo especializado de sintaxe que permite declarar o tipo de uma variável.
Declarar tipos para suas variáveis permite que os editores e outras ferramentas forneçam assistência aprimorada. Vamos ver um exemplo avançado.
Modificaremos nosso arquivo `main.py` para incluir uma nova solicitação `PUT` que receberá várias entradas de diferentes tipos de dados.
```
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()classItem(BaseModel):
name:str
price:float
is_offer: Union[bool,None]=None@app.get("")defread_root():return{"Hello":"World"}@app.get("/items/{item_id}")defread_item(item_id:int, q: Union[str,None]=None):return{"item_id": item_id,"q": q}@app.put("/items/{item_id}")defupdate_item(item_id:int, item: Item):return{"item_name": item.name,"item_id": item_id}
```Tecnologia
Foi adicionada uma solicitação `put` que recebe duas entradas. O `item_id` é um número inteiro e o tipo `item` aponta para a classe personalizada `Item` criada e que herda o `BaseModel` do `pydantic`. A classe `Item` contém três atributos: `name`, `price`, `is_offer`, e todos eles têm tipos de dados diferentes.
A FastAPI verificará:
`name` é um `str`.
`price` é um `float`.
`is_offer` é um bool, se presente.
A vantagem de usar dicas de tipo é que você declara uma vez os tipos de parâmetros, corpo, etc. como parâmetros de função com o Python padrão (3.6+). Você receberá:
Suporte ao editor, incluindo preenchimento automático, verificações de tipo
Validação de dados
Conversão de dados de entrada
Conversão de dados de saída
Erros que são fáceis de entender.
Comparação do FastAPI com o Django e o Flask
Todos esses três frameworks são frameworks Python da Web que você pode usar para desenvolver aplicativos da Web. Cada um deles tem seus próprios pontos fortes e fracos.
O Django é uma estrutura completa que inclui tudo o que você precisa para começar, inclusive um ORM integrado e um painel de administração. Ele pode ser um pouco complicado para iniciantes, mas sua documentação abrangente facilita o aprendizado.
O Flask é um microframework leve e fácil de usar. Ele não inclui tantos recursos quanto o Django, mas é perfeito para projetos simples.
A FastAPI é uma nova estrutura projetada para ser rápida e fácil de usar. Ele inclui recursos como validação automática de dados e documentação.
Django
Frasco
FastAPI
Comunidade
Big.
66 mil estrelas no GitHub
Big.
61 mil estrelas no GitHub
Big.
50 mil estrelas no GitHub
Desempenho
O Django é enorme. Ele não é o melhor em termos de desempenho.
O Flask é uma microestrutura da Web. Seu desempenho é melhor do que o do Django.
O FastAPI é uma das estruturas da Web mais rápidas com suporte nativo a assíncrono, o que aumenta a eficiência da estrutura.
Suporte assíncrono
Sim, com latência limitada.
Não.
Needs Asyncio
A FastAPI oferece suporte assíncrono nativo.
Facilidade de uso
O Django é enorme e, portanto, um pouco complicado de aprender.
O Flask é fácil de aprender e bastante simples de usar.
A FastAPI é a mais simples das três.
Documentação interativa
Não interativo
Não
Sim (OpenAI, Redoc)
Verificação de dados
Não
Não
Sim
Benchmarks de desempenho FastAPI
De acordo com os resultados dos testes realizados pela techempower, o FastAPI é superior a todas as outras estruturas em termos de desempenho geral.
Fonte: https://www.techempower.com/benchmarks/
Exemplo: Criação de um pipeline de aprendizado de máquina de ponta a ponta com PyCaret e implementação com FastAPI
Nesta seção, criaremos rapidamente um pipeline de aprendizado de máquina e, em seguida, criaremos uma API para servir o modelo. Usaremos uma biblioteca Python de baixo código, a PyCaret, para construir um pipeline e criar uma API. O PyCaret tem integração com o FastAPI, o que torna extremamente fácil criar e servir modelos de aprendizado de máquina como uma API.
PyCaret
PyCaret é uma biblioteca de aprendizado de máquina de código aberto e baixo em Python que automatiza os fluxos de trabalho de aprendizado de máquina. É uma ferramenta completa de aprendizado de máquina e gerenciamento de modelos que acelera exponencialmente o ciclo de experimentos e o torna mais produtivo.
Usaremos o conjunto de dados `insurance` neste exemplo. É um caso de uso de regressão para prever despesas médicas com base em idade, sexo, IMC e região.
```
from pycaret.datasets import get_data
data = get_data(‘insurance’)
```Tecnologia
Imagem do autor
Em seguida, inicializaremos a função `setup` do pycaret. Essa função inicializa o experimento no PyCaret e cria o pipeline de transformação com base em todos os parâmetros passados na função.
A `setup` deve ser executada antes de qualquer outra função. Ele requer dois parâmetros para funcionar: `data` e `target`. Todos os argumentos restantes em `setup` são opcionais. A função `setup` é responsável pelo controle da totalidade dos procedimentos de pré-processamento de dados. Consulte a documentação do PyCaret para obter um resumo abrangente de todos os procedimentos de pré-processamento compatíveis com o PyCaret.
```
from pycaret.regression import*
s = setup(data, target ='charges')
```Tecnologia
Imagem do autor Saída truncada.
Quando a configuração estiver concluída, poderemos iniciar o treinamento e a seleção do modelo com apenas uma linha de código: `compare_models`. Por meio do uso de validação cruzada, essa função treina e avalia o desempenho do modelo de todos os estimadores na biblioteca de modelos. O resultado dessa função é uma grade de pontuação que contém as pontuações médias obtidas da validação cruzada.
Com base nisso, o modelo de melhor desempenho é o `Gradient Boosting Regressor`. Se quisermos, podemos analisar o modelo por meio da visualização e tentar melhorar o desempenho por meio do ajuste de hiperparâmetros ou do conjunto de modelos, mas não faremos isso neste tutorial.
Iremos direto para a criação da API do melhor modelo para atender às previsões na produção usando o FastAPI. Lembre-se de que o PyCaret tem integração com o FastAPI, portanto, ele pode criar automaticamente uma API REST a partir do modelo usando a função `create_api`.
Agora, para executar essa API, abra o terminal do prompt de comando, navegue até a pasta onde está o Notebook e execute o seguinte comando `python insurance_prediction_model.py`.
Vá para `http://127.0.0.1:8000/docs` e você verá a mesma interface de usuário que viu anteriormente neste tutorial
Lembre-se de que tanto a documentação interativa padrão quanto a redoc são alimentadas pelos padrões OpenAPI.
Se você quiser ver o arquivo que o PyCaret criou quando você usou a função `create_api`, pode verificar o arquivo na mesma pasta do seu Notebook. A aparência é a seguinte:
```
import pandas as pd
from pycaret.regression import load_model, predict_model
from fastapi import FastAPI
import uvicorn
# Create the app
app = FastAPI()# Load trained Pipeline
model = load_model('my_lr_api')# Define predict function@app.post('/predict')defpredict(age, sex, bmi, children, smoker, region):
data = pd.DataFrame([[age, sex, bmi, children, smoker, region]])
data.columns =['age','sex','bmi','children','smoker','region']
predictions = predict_model(model, data=data)return{'prediction':list(predictions['Label'])}if __name__ =='__main__':
uvicorn.run(app, host='127.0.0.1', port=8000)
```Tecnologia
Conclusão
O artigo discutiu a ideia de API e por que elas são usadas. A API é importante na arquitetura moderna porque permite que diferentes programas de software compartilhem dados e funcionalidades. Isso possibilita a criação de sistemas complexos que são mais confiáveis e fáceis de manter.
Em seguida, vamos nos aprofundar em uma estrutura relativamente nova em Python chamada FastAPI. A FastAPI é uma API mais recente, projetada para ser fácil de usar e eficiente. É uma ótima opção para os desenvolvedores que desejam criar uma API de forma rápida e fácil.
Histórico de estrelas do GitHub - criado usando star-history.com
A FastAPI oferece suporte imediato a código assíncrono usando as palavras-chave Python async/await.
A FastAPI está pronta para a produção?⌄
O FastAPI está totalmente pronto para produção, com excelente documentação, suporte e uma interface fácil de usar.
Qual é a diferença entre o FastAPI e o Flask?⌄
A FastAPI é compatível com chamadas assíncronas. Ele é leve, mais rápido e mais fácil de aprender do que o Flask. Tanto o Flask quanto o FastAPI têm comunidades enormes.
O FastAPI também tem um servidor de desenvolvimento integrado?⌄
Não, o FastAPI não tem um servidor de desenvolvimento integrado. Para isso, é necessário usar o `uvicorn`.
O FastAPI é compatível com o Python 2?⌄
Não, o FastAPI só está disponível no Python 3.6+.
A FastAPI está disponível somente em Python?⌄
Sim
A FastAPI é mais rápida do que a linguagem de programação Go?⌄
Não. De acordo com a techempower, a Golang Fiber é a 50ª API mais rápida do mundo. A FastAPI está em 183º lugar.
A FastAPI é compatível com o Pydantic?⌄
O FastAPI é totalmente compatível com o Pydantic (e baseado nele).
Este guia completo ensina os fundamentos do desenvolvimento backend com Python. Aprenda conceitos básicos, frameworks e boas práticas para começar a criar aplicações web.
Introdução às estruturas de dados do Python: saiba mais sobre tipos de dados e estruturas de dados primitivas e não primitivas, como strings, listas, pilhas etc.
Descubra como escrever funções em Python reutilizáveis e eficientes. Domine parâmetros, instruções de retorno e temas avançados como funções lambda. Organize melhor seu código com main() e outras boas práticas.
Aprenda a trabalhar com JSON em Python, incluindo serialização, deserialização, formatação, otimização de desempenho, manipulação de APIs e compreensão das limitações e alternativas do JSON.
A API (Interface de Programação de Aplicativos) é a espinha dorsal da arquitetura moderna porque permite que os aplicativos sejam modulares e desacoplados. Isso significa que você pode criar aplicativos de forma rápida e fácil, o que lhe permite mantê-los e atualizá-los com facilidade.
As APIs também são muito importantes no aprendizado de máquina porque permitem que diferentes aplicativos compartilhem dados e trabalhem juntos, economizando tempo e esforço. Há muitas estruturas diferentes para a criação de APIs em Python. Algumas das estruturas mais populares para a criação de APIs em Python são Django, Flask e FastAPI. Este tutorial é um mergulho profundo em uma das estruturas chamadas FastAPI.
O que é uma API?
API significa Interface de Programação de Aplicativos. Uma API é um intermediário de software que permite que dois aplicativos se comuniquem entre si. Quando você usa um aplicativo no telefone, o aplicativo se conecta à Internet e envia dados a um servidor. O servidor processa os dados e os envia de volta ao seu telefone. O aplicativo em seu telefone interpreta os dados e os apresenta a você de forma legível.
Uma API é como um garçom em um restaurante. O garçom recebe seu pedido e o envia para a cozinha. A cozinha então prepara a comida e a envia de volta ao garçom. O garçom traz a comida até você.
Da mesma forma, uma API recebe uma solicitação de um aplicativo e a envia a um servidor. Em seguida, o servidor processa a solicitação e envia os dados de volta para o aplicativo. Em seguida, o aplicativo interpreta os dados e os apresenta ao usuário.
Image Source: https://www.techfunnel.com/wp-content/uploads/2021/07/api.png
Se quiser saber mais sobre pipelines de aprendizado de máquina, APIs e MLOps, confira nosso Tutorial de aprendizado de máquina, pipelines, implantação e MLOps.
O que é FastAPI
O FastAPI é uma estrutura da Web de alto desempenho para a criação de APIs com Python 3.7+ com base em dicas de tipo Python padrão. Ele ajuda os desenvolvedores a criar aplicativos de forma rápida e eficiente. O FastAPI foi desenvolvido com base no servidor da Web Starlette e inclui recursos que facilitam a criação de aplicativos da Web, como validação automática de dados, tratamento de erros e documentos de API interativos.
Nesta seção, analisaremos todos esses recursos individualmente. Primeiro, vamos dar uma olhada nos principais recursos, conforme indicado na documentação original da FastAPI.
Instalação do FastAPI
O FastAPI requer o Python 3.7+. Ele pode ser instalado usando o pip. Você precisará instalar o FastAPI e o servidor ASGI `uvicorn`.
Criar uma API simples
Vamos começar a criar diretamente uma API de brinquedo muito simples. Estou usando o VS Code para implementar isso, mas você pode usar qualquer editor que desejar.
(Exemplo reproduzido da documentação original). Agradecimentos a @tiangolo.
Agora, usando um terminal de linha de comando, execute essa API com o seguinte comando:
`main` é o nome do arquivo Python, e `app` é a variável que armazena a classe FastAPI. Você pode dar a eles o nome que quiser. Depois de executar o comando acima, você verá algo parecido com isto em seu terminal:
Acesse o link em seu navegador e, se você vir uma página que mostre "Hello World", a API estará em funcionamento.
Imagem do autor
Parabéns por criar sua primeira API.
Documentos interativos da API
O FastAPI gera um "esquema" com todas as suas APIs usando o padrão OpenAPI para definir APIs. Um "esquema" é uma definição ou descrição de algo. Não o código que o implementa, mas apenas uma descrição abstrata. O esquema OpenAPI é o que alimenta os dois sistemas de documentação interativa incluídos na FastAPI.
Para ver a documentação, basta adicionar `/docs` à url (`http://127.0.0.1:8000/docs`). Esse link mostrará a documentação interativa automática da API.
Imagem do autor
Clique no botão `Try it out` no canto superior direito para testar a API.
Imagem do autor
Você pode ver que o corpo da resposta é um dicionário. Essa é a chamada de retorno da função `read_item` definida no `main.py`. Você também pode ver o URL da solicitação `http://127.0.0.1:8000/items/1?q=orange`. `1` e `orange` foram nossas entradas para a API.
Há uma alternativa de documentação automática interativa disponível no FastAPI. Para verificar isso, acesse http://127.0.0.1:8000/redoc`. É assim que ele se parece:
Imagem do autor
Exemplos mais avançados
Ao criar uma API, o "caminho" define a rota ou o ponto final da solicitação. No entanto, há mais uma escolha que precisamos fazer aqui, ou seja, "Operação". A palavra "operação" aqui se refere a um dos "métodos" do HTTP. Ao usar um (ou mais) desses chamados "métodos", você pode se comunicar com cada um dos vários caminhos compatíveis com o protocolo HTTP. Normalmente, você usaria:
A FastAPI é compatível com todos os métodos http.
O fato de o FastAPI ser baseado em dicas de tipo Python é outro aspecto importante dessa estrutura. As dicas de tipo são compatíveis com as versões do Python 3.6 e posteriores. As dicas de tipo são um tipo especializado de sintaxe que permite declarar o tipo de uma variável.
Declarar tipos para suas variáveis permite que os editores e outras ferramentas forneçam assistência aprimorada. Vamos ver um exemplo avançado.
Modificaremos nosso arquivo `main.py` para incluir uma nova solicitação `PUT` que receberá várias entradas de diferentes tipos de dados.
(Exemplo reproduzido da documentação original). Agradecimentos a @tiangolo.
A mudança:
Foi adicionada uma solicitação `put` que recebe duas entradas. O `item_id` é um número inteiro e o tipo `item` aponta para a classe personalizada `Item` criada e que herda o `BaseModel` do `pydantic`. A classe `Item` contém três atributos: `name`, `price`, `is_offer`, e todos eles têm tipos de dados diferentes.
A FastAPI verificará:
A vantagem de usar dicas de tipo é que você declara uma vez os tipos de parâmetros, corpo, etc. como parâmetros de função com o Python padrão (3.6+). Você receberá:
Comparação do FastAPI com o Django e o Flask
Todos esses três frameworks são frameworks Python da Web que você pode usar para desenvolver aplicativos da Web. Cada um deles tem seus próprios pontos fortes e fracos.
O Django é uma estrutura completa que inclui tudo o que você precisa para começar, inclusive um ORM integrado e um painel de administração. Ele pode ser um pouco complicado para iniciantes, mas sua documentação abrangente facilita o aprendizado.
O Flask é um microframework leve e fácil de usar. Ele não inclui tantos recursos quanto o Django, mas é perfeito para projetos simples.
A FastAPI é uma nova estrutura projetada para ser rápida e fácil de usar. Ele inclui recursos como validação automática de dados e documentação.
Django
Frasco
FastAPI
Comunidade
Big.
66 mil estrelas no GitHub
Big.
61 mil estrelas no GitHub
Big.
50 mil estrelas no GitHub
Desempenho
O Django é enorme. Ele não é o melhor em termos de desempenho.
O Flask é uma microestrutura da Web. Seu desempenho é melhor do que o do Django.
O FastAPI é uma das estruturas da Web mais rápidas com suporte nativo a assíncrono, o que aumenta a eficiência da estrutura.
Suporte assíncrono
Sim, com latência limitada.
Não.
Needs Asyncio
A FastAPI oferece suporte assíncrono nativo.
Facilidade de uso
O Django é enorme e, portanto, um pouco complicado de aprender.
O Flask é fácil de aprender e bastante simples de usar.
A FastAPI é a mais simples das três.
Documentação interativa
Não interativo
Não
Sim (OpenAI, Redoc)
Verificação de dados
Não
Não
Sim
Benchmarks de desempenho FastAPI
De acordo com os resultados dos testes realizados pela techempower, o FastAPI é superior a todas as outras estruturas em termos de desempenho geral.
Fonte: https://www.techempower.com/benchmarks/
Exemplo: Criação de um pipeline de aprendizado de máquina de ponta a ponta com PyCaret e implementação com FastAPI
Nesta seção, criaremos rapidamente um pipeline de aprendizado de máquina e, em seguida, criaremos uma API para servir o modelo. Usaremos uma biblioteca Python de baixo código, a PyCaret, para construir um pipeline e criar uma API. O PyCaret tem integração com o FastAPI, o que torna extremamente fácil criar e servir modelos de aprendizado de máquina como uma API.
PyCaret
PyCaret é uma biblioteca de aprendizado de máquina de código aberto e baixo em Python que automatiza os fluxos de trabalho de aprendizado de máquina. É uma ferramenta completa de aprendizado de máquina e gerenciamento de modelos que acelera exponencialmente o ciclo de experimentos e o torna mais produtivo.
Usaremos o conjunto de dados `insurance` neste exemplo. É um caso de uso de regressão para prever despesas médicas com base em idade, sexo, IMC e região.
Imagem do autor
Em seguida, inicializaremos a função `setup` do pycaret. Essa função inicializa o experimento no PyCaret e cria o pipeline de transformação com base em todos os parâmetros passados na função.
A `setup` deve ser executada antes de qualquer outra função. Ele requer dois parâmetros para funcionar: `data` e `target`. Todos os argumentos restantes em `setup` são opcionais. A função `setup` é responsável pelo controle da totalidade dos procedimentos de pré-processamento de dados. Consulte a documentação do PyCaret para obter um resumo abrangente de todos os procedimentos de pré-processamento compatíveis com o PyCaret.
Imagem do autor Saída truncada.
Quando a configuração estiver concluída, poderemos iniciar o treinamento e a seleção do modelo com apenas uma linha de código: `compare_models`. Por meio do uso de validação cruzada, essa função treina e avalia o desempenho do modelo de todos os estimadores na biblioteca de modelos. O resultado dessa função é uma grade de pontuação que contém as pontuações médias obtidas da validação cruzada.