Integrações da API Beeware

Você está procurando integrações de API Beeware em seus aplicativos Beeware? APIs (Application Programming Interfaces) são uma maneira poderosa de interagir com serviços externos, recuperar dados e executar ações em seus aplicativos. Beeware fornece integração perfeita com APIs, permitindo que você aprimore seus aplicativos com dados dinâmicos e funcionalidade.

Neste artigo, exploraremos como Beeware , pode ser aproveitado para integração de API. Discutiremos os benefícios da integração da API e veremos alguns exemplos de como incorporar fontes de dados externas e funcionalidade em seus aplicativos Beeware usando a biblioteca de solicitações.



Escolha a API

A primeira etapa na integração da API é escolher a API que você deseja integrar ao seu aplicativo Beeware. As APIs são oferecidas por vários serviços e plataformas, como plataformas de mídia social, serviços meteorológicos, gateways de pagamento e muito mais. Pesquise e selecione uma API que melhor atenda aos requisitos do seu aplicativo.


Revise a documentação da API

Depois de escolher uma API, revise sua documentação completamente. A documentação fornecerá informações sobre como acessar a API, os parâmetros necessários, as respostas esperadas e quaisquer requisitos de autenticação ou autorização. Compreender a funcionalidade e o uso da API é crucial para uma integração bem-sucedida.


Instalar bibliotecas necessárias

Dependendo da API escolhida, pode ser necessário instalar bibliotecas Python adicionais para interagir com a API. Por exemplo, se você estiver integrando com uma API RESTful, pode ser necessário instalar a biblioteca 'requests'. Siga as instruções de instalação fornecidas pela documentação da API para instalar as bibliotecas necessárias.


Acessar uma API

Até agora, o aplicativo que criamos usava apenas nosso próprio código. Mas, em aplicativos da vida real, é comum usar código adicional escrito por outras pessoas que pode ser baixado de um local chamado PyPI . Então, vamos mudar nosso aplicativo para incluir este código adicional.

Uma tarefa comum que você pode precisar fazer durante o desenvolvimento de um aplicativo é recuperar dados de uma API da Web e exibi-los ao usuário. Como este é um aplicativo de brinquedo e não temos uma API real para trabalhar, usaremos {JSON} Placeholder API como fonte de dados. A API {JSON} Placeholder fornece alguns endpoints de API falsos que podem ser usados ​​como dados de teste. Você pode acessar o terminal /posts/ da API visitando https://jsonplaceholder.typicode.com/posts/80 em seu navegador da web. Isso retornará uma carga útil JSON descrevendo uma única postagem, que na verdade é uma parte do conteúdo Lorum ipsum para uma postagem de blog com ID 80.

Embora a biblioteca padrão do Python tenha todas as ferramentas necessárias para acessar uma API, as APIs integradas são de baixo nível. Embora sejam bons na implementação do protocolo HTTP, eles exigem que o usuário lide com muitos detalhes de baixo nível, como redirecionamento de URL, autenticação, gerenciamento de sessão e codificação de carga útil. Se você é um usuário regular do navegador da Web, provavelmente considera esses detalhes como garantidos, pois o navegador cuida deles para você.

Para facilitar as coisas, foram desenvolvidas bibliotecas de terceiros que agrupam as APIs integradas e fornecem uma API mais simples que se assemelha mais à experiência cotidiana do navegador. Usaremos uma dessas bibliotecas chamada httpx para acessar a {JSON} Placeholder API.

Para incluir uma chamada de API httpx em seu aplicativo, você precisará adicionar uma declaração de importação para httpx na parte superior do arquivo app.py:

import httpx

Em seguida, faça alterações no retorno de chamada output() para se parecer com o seguinte código:

import httpx

import toga

from toga.style import Pack

from toga.style.pack import COLUMN, ROW

class HelloWorld(toga.App):

    def startup(self):

        main_box = toga.Box(style=Pack(direction=COLUMN))

        name_label = toga.Label(

            "Client Name: ",

            style=Pack(padding=(0, 5))

        )

        self.name_input = toga.TextInput(style=Pack(flex=1))

        name_box = toga.Box(style=Pack(direction=ROW, padding=5))

        name_box.add(name_label)

        name_box.add(self.name_input)

        password_label = toga.Label(

            "Password: ",

            style=Pack(padding=(0, 5))

        )

        self.password_input = toga.PasswordInput(style=Pack(flex=1))

        password_box = toga.Box(style=Pack(direction=ROW, padding=5))

        password_box.add(password_label)

        password_box.add(self.password_input)

        button = toga.Button(

            "Login",

            on_press=self.output,

            style=Pack(padding=5)

        )

        main_box.add(name_box)

        main_box.add(password_box)

        main_box.add(button)

        self.main_window = toga.MainWindow(title=self.formal_name)

        self.main_window.content = main_box

        self.main_window.show()

    def login(self, nm, pwd):

        if nm and pwd:

            return f"Thank you {nm}"

        else:

            return f"Login failed"

    def desc(self, nm, pwd):

        if nm and pwd:

            with httpx.Client() as client:

                response = client.get("https://jsonplaceholder.typicode.com/posts/80")        

            payload = response.json()

            return "You are successfully logged in!"+"\n"+payload["body"]

        else:

            return "Your inserted information is invalid!"

    def output(self, widget):

        self.main_window.info_dialog(

            self.login(self.name_input.value, self.password_input.value),

            self.desc(self.name_input.value, self.password_input.value)

        )

def main():

    return HelloWorld()

Exemplo de Explicação

No código acima, temos um aplicativo Python usando a biblioteca toga para criar uma interface gráfica do usuário (GUI). A GUI consiste em uma janela com um formulário de login que inclui uma entrada de texto para o nome do cliente e uma entrada de senha para sua senha.

A classe HelloWorld é uma subclasse da classe toga.App , que representa todo o aplicativo. Possui um método de inicialização que configura a janela principal e seu conteúdo.

Dentro do método startup, criamos uma toga.Box com layout vertical (direção=COLUNA) para conter os elementos do formulário. Em seguida, criamos um toga.Label para o nome do cliente, um toga.TextInput para a entrada do nome e um toga.Box com um layout horizontal ( direction=ROW ) para mantê-los juntos. Repetimos o mesmo processo para a entrada da senha.

Em seguida, criamos um toga.Button denominado “ Login ” com um manipulador de eventos on_press definido como o método de saída. O método de saída será chamado quando o botão for pressionado.

Adicionamos os elementos do formulário e o botão à caixa principal usando o método add. Por fim, criamos uma toga.MainWindow com o título “HelloWorld”, definimos seu conteúdo para a caixa principal e mostramos a janela usando o método show.

A classe HelloWorld também possui três outros métodos: login, desc e output. O método de login pega os valores inseridos nas entradas de nome e senha e verifica se eles não estão vazios. Se não estiverem vazios, retorna uma mensagem de saudação com o nome do cliente; caso contrário, ele retornará uma mensagem de falha de login.

O método desc também usa as entradas de nome e senha como argumentos e usa a biblioteca httpx para fazer uma solicitação HTTP GET para um endpoint da API JSON. Em seguida, ele extrai o campo “body” do JSON da resposta e retorna uma mensagem de sucesso com o corpo do texto, caso o nome e a senha não estejam vazios; caso contrário, ele retornará uma mensagem de informação inválida.

O método de saída é o manipulador de eventos para o botão “Login”. Ele chama os métodos login e desc com os valores das entradas de nome e senha e exibe os resultados em um diálogo de informações usando o método info_dialog da janela principal.

Quando você fizer a alteração acima, o retorno de chamada output() será atualizado para executar a seguinte ação quando for chamado:

  • Envia uma solicitação GET para a API de espaço reservado JSON para buscar a postagem número 80.
  • Decodifica a resposta como JSON.
  • Extrai o corpo da postagem da resposta.
  • Exibe o corpo da postagem como o texto da caixa de diálogo.

Você deve testar o aplicativo atualizado no modo de desenvolvedor Porta-arquivos para confirmar se as modificações foram aplicadas com sucesso.

Para Mac OS

(beeware-mrxenv) $ briefcase dev

Traceback (most recent call last):
File ".../venv/bin/briefcase", line 5, in <module>
from briefcase.__main__ import main
File ".../venv/lib/python3.9/site-packages/briefcase/__main__.py", line 3, in <module>
from .cmdline import parse_cmdline
File ".../venv/lib/python3.9/site-packages/briefcase/cmdline.py", line 6, in <module>
from briefcase.commands import DevCommand, NewCommand, UpgradeCommand
File ".../venv/lib/python3.9/site-packages/briefcase/commands/__init__.py", line 1, in <module>
from .build import BuildCommand # noqa
File ".../venv/lib/python3.9/site-packages/briefcase/commands/build.py", line 5, in <module>
from .base import BaseCommand, full_options
File ".../venv/lib/python3.9/site-packages/briefcase/commands/base.py", line 14, in <module>
import httpx
ModuleNotFoundError: No module named 'httpx'

Para Linux

(beeware-mrxenv) $ briefcase dev

Traceback (most recent call last):
File ".../venv/bin/briefcase", line 5, in <module>
from briefcase.__main__ import main
File ".../venv/lib/python3.9/site-packages/briefcase/__main__.py", line 3, in <module>
from .cmdline import parse_cmdline
File ".../venv/lib/python3.9/site-packages/briefcase/cmdline.py", line 6, in <module>
from briefcase.commands import DevCommand, NewCommand, UpgradeCommand
File ".../venv/lib/python3.9/site-packages/briefcase/commands/__init__.py", line 1, in <module>
from .build import BuildCommand # noqa
File ".../venv/lib/python3.9/site-packages/briefcase/commands/build.py", line 5, in <module>
from .base import BaseCommand, full_options
File ".../venv/lib/python3.9/site-packages/briefcase/commands/base.py", line 14, in <module>
import httpx
ModuleNotFoundError: No module named 'httpx'

Para Windows

(beeware-mrxenv) C:\...>briefcase dev

[helloworld] Starting in dev mode...
===========================================================================
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "<frozen runpy>", line 226, in run_module
File "<frozen runpy>", line 98, in _run_module_code
File "<frozen runpy>", line 88, in _run_code
File "C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld\src\helloworld\__main__.py", line 1, in <module>
from helloworld.app import main
File "C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld\src\helloworld\app.py", line 1, in <module>
import httpx
ModuleNotFoundError: No module named 'httpx'

Você encontrou algum problema? Se você incluiu httpx em seu código, mas não em seu ambiente virtual de desenvolvimento, pode resolver isso instalando httpx usando pip e, em seguida, executando o briefcase dev novamente.

Mac OS

(beeware-mrxenv) $ python -m pip install httpx

(beeware-mrxenv) $ briefcase dev

Linux

(beeware-mrxenv) $ python -m pip install httpx

(beeware-mrxenv) $ briefcase dev

janelas

(beeware-mrxenv) C:\...>python -m pip install httpx

(beeware-mrxenv) C:\...>briefcase dev

Saída do Programa

Depois de inserir um nome e senha e clicar no botão de login, você poderá visualizar uma caixa de diálogo semelhante à seguinte:

Criamos com sucesso um aplicativo funcional que usa uma biblioteca externa e pode ser executado no modo de desenvolvimento.


Agora execute o aplicativo atualizado

Você deve empacotar o código do aplicativo atualizado como um aplicativo independente.

Mac OS

Faça alterações no código no aplicativo empacotado:

(beeware-mrxenv) $ briefcase update

[helloworld] Updating application code...
...

[helloworld] Application updated.

Recrie o aplicativo:

(beeware-mrxenv) $ briefcase build

[helloworld] Adhoc signing app...
[helloworld] Built build/helloworld/macos/app/Hello World.app

Por fim, inicie o aplicativo executando-o.

(beeware-mrxenv) $ briefcase run

[helloworld] Starting app...
===========================================================================

Linux

Faça alterações no código no aplicativo empacotado:

(beeware-mrxenv) $ briefcase update

[helloworld] Updating application code...
...

[helloworld] Application updated.

Recrie o aplicativo:

[helloworld] Finalizing application configuration...
...

[helloworld] Building application...
...

[helloworld] Built build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld

Por fim, inicie o aplicativo executando-o.

(beeware-mrxenv) $ briefcase run

[helloworld] Starting app...
===========================================================================

janelas

Faça alterações no código no aplicativo empacotado:

(beeware-mrxenv) C:\...>briefcase update

[helloworld] Updating application code...
...

[helloworld] Application updated.

Recrie o aplicativo:

(beeware-mrxenv) C:\...>briefcase build

...

[helloworld] Built build\helloworld\windows\app\src\Toga Test.exe

Por fim, inicie o aplicativo executando-o:

(beeware-mrxenv) C:\...>briefcase run

[helloworld] Starting app...
===========================================================================

Saída do Programa

Quando o aplicativo for executado, um erro de console e uma caixa de diálogo de travamento estarão visíveis.

Se você encontrou um problema com o aplicativo falhando ao iniciar e já instalou o httpx, o motivo por trás disso é que o httpx só foi instalado em seu ambiente de desenvolvimento. Seu ambiente de desenvolvimento é específico para sua máquina e só fica ativo quando você o ativa manualmente. Embora o Briefcase tenha um modo de desenvolvimento, ele é usado principalmente para empacotar seu código para que possa ser compartilhado com outras pessoas.

Para garantir que outras pessoas tenham todas as dependências necessárias do ambiente Python, o Briefcase cria um ambiente Python completamente isolado quando você executa 'briefcase build'. Isso inclui uma instalação separada do Python e um conjunto isolado de dependências. É por isso que o httpx não está instalado no aplicativo empacotado, apesar de estar instalado em seu ambiente de desenvolvimento.

Para resolver isso, você precisa informar o Briefcase sobre quaisquer dependências externas exigidas pelo aplicativo para que ele possa incluí-las no ambiente isolado do Python.


Atualizar dependências

Você encontrará um arquivo chamado pyproject.toml no diretório principal do seu aplicativo. Este arquivo inclui todas as informações de configuração que você forneceu quando executou 'briefcase new' pela primeira vez.

As configurações do seu aplicativo são descritas em uma seção de pyproject.toml, que é dividida em diferentes seções.

[tool.briefcase.app.helloworld]
formal_name = "Hello World"
description = "A Tutorial app"
icon = "src/helloworld/resources/helloworld"
sources = ["src/helloworld"]
requires = []

O parâmetro 'requires' em pyproject.toml descreve as dependências necessárias para seu aplicativo, usando uma lista de strings que especifica as bibliotecas e suas versões a serem incluídas no aplicativo.

Atualize a configuração 'requer' fazendo as alterações necessárias:

requires = [
"httpx",
]

Se você adicionar a configuração acima, o Porta-arquivos será instruído a incluir “pip install httpx” no pacote de aplicativos ao compilar seu aplicativo. Você pode usar qualquer entrada válida para pip install nesta configuração, o que significa que você tem a opção de especificar:

  • Uma versão específica da biblioteca (como “httpx==0.19.0”).
  • Uma gama de versões de bibliotecas (por exemplo, “httpx>=0.19”).
  • Uma URL para um repositório Git (como “git+https://github.com/encode/httpx”).
  • Um caminho de arquivo em sua máquina local (mas tenha cuidado: se você compartilhar seu código com outras pessoas, esse caminho pode não existir no computador delas!).

Você pode observar outras seções em pyproject.toml que são específicas para diferentes sistemas operacionais, como [tool.briefcase.app.helloworld.macOS] e [tool.briefcase.app.helloworld.windows]. Essas seções também têm uma configuração de requisitos. Ao usar essas configurações, você pode especificar dependências adicionais específicas para cada plataforma. Por exemplo, se seu aplicativo requer uma biblioteca disponível apenas em uma plataforma específica, você pode defini-la na seção de requisitos específicos da plataforma e ela será instalada apenas nessa plataforma. Observe que as bibliotecas toga são especificadas na seção de requisitos específicos da plataforma porque são necessárias para exibir a interface do usuário em diferentes plataformas.

Para nosso aplicativo, precisamos que o httpx seja instalado em todas as plataformas, então usamos a configuração require no nível do aplicativo. As dependências no nível do aplicativo sempre serão instaladas, enquanto as dependências específicas da plataforma serão instaladas além das dependências no nível do aplicativo.

Lembrete: quando se trata de plataformas de desktop como macOS, Windows e Linux, você pode adicionar qualquer pacote instalável por pip aos seus requisitos. No entanto, em plataformas móveis e da web, suas escolhas são um pouco limitadas.

Para resumir, você pode usar qualquer pacote Python puro (isto é, pacotes que não incluem um módulo binário) sem nenhum problema. No entanto, se sua dependência tiver um componente binário, ela precisará ser compilada. Atualmente, a maioria dos pacotes Python não oferece suporte à compilação para plataformas que não sejam de desktop.

O BeeWare pode fornecer binários para alguns módulos binários populares, como numpy, pandas e criptografia. Embora seja possível compilar pacotes para plataformas móveis, é uma configuração desafiadora que vai além do escopo de um guia de introdução como este.

Depois de informar o Briefcase sobre os novos requisitos, você pode tentar empacotar seu aplicativo novamente. Salve todas as alterações feitas em pyproject.toml e prossiga com a atualização de seu aplicativo usando o sinalizador -r. Este sinalizador indica que o Porta-arquivos deve atualizar os requisitos no aplicativo empacotado:

Mac OS

(beeware-mrxenv) $ briefcase update -r

[helloworld] Updating application code...
Installing src/hello_world...

[helloworld] Updating requirements...
Collecting httpx
Using cached httpx-0.19.0-py3-none-any.whl (77 kB)
...
Installing collected packages: sniffio, idna, travertino, rfc3986, h11, anyio, toga-core, rubicon-objc, httpcore, charset-normalizer, certifi, toga-cocoa, httpx
Successfully installed anyio-3.3.2 certifi-2021.10.8 charset-normalizer-2.0.6 h11-0.12.0 httpcore-0.13.7 httpx-0.19.0 idna-3.2 rfc3986-1.5.0 rubicon-objc-0.4.1 sniffio-1.2.0 toga-cocoa-0.3.0.dev28 toga-core-0.3.0.dev28 travertino-0.1.3

[helloworld] Removing unneeded app content...
...

[helloworld] Application updated.

Linux

(beeware-mrxenv) $ briefcase update -r

[helloworld] Finalizing application configuration...
Targeting ubuntu:jammy (Vendor base debian)
Determining glibc version... done

Targeting glibc 2.35
Targeting Python3.10

[helloworld] Updating application code...
Installing src/hello_world...

[helloworld] Updating requirements...
Collecting httpx
Using cached httpx-0.19.0-py3-none-any.whl (77 kB)
...
Installing collected packages: sniffio, idna, travertino, rfc3986, h11, anyio, toga-core, rubicon-objc, httpcore, charset-normalizer, certifi, toga-cocoa, httpx
Successfully installed anyio-3.3.2 certifi-2021.10.8 charset-normalizer-2.0.6 h11-0.12.0 httpcore-0.13.7 httpx-0.19.0 idna-3.2 rfc3986-1.5.0 rubicon-objc-0.4.1 sniffio-1.2.0 toga-cocoa-0.3.0.dev28 toga-core-0.3.0.dev28 travertino-0.1.3

[helloworld] Removing unneeded app content...
...

[helloworld] Application updated.

janelas

(beeware-mrxenv) C:\...>briefcase update -r

[helloworld] Updating application code...
Installing src/helloworld...

[helloworld] Updating requirements...
Collecting httpx
Using cached httpx-0.19.0-py3-none-any.whl (77 kB)
...
Installing collected packages: sniffio, idna, travertino, rfc3986, h11, anyio, toga-core, rubicon-objc, httpcore, charset-normalizer, certifi, toga-cocoa, httpx
Successfully installed anyio-3.3.2 certifi-2021.10.8 charset-normalizer-2.0.6 h11-0.12.0 httpcore-0.13.7 httpx-0.19.0 idna-3.2 rfc3986-1.5.0 rubicon-objc-0.4.1 sniffio-1.2.0 toga-cocoa-0.3.0.dev28 toga-core-0.3.0.dev28 travertino-0.1.3

[helloworld] Removing unneeded app content...
...

[helloworld] Application updated.

Depois de concluir a atualização, você pode executar os comandos de criação de pasta e execução de pasta, e seu aplicativo empacotado deve estar visível com o comportamento de caixa de diálogo atualizado.

Lembrete: se você deseja atualizar, criar e executar seu aplicativo de uma só vez, pode usar o comando briefcase run com as opções -u e -r. A opção -r também é reconhecida pelos comandos build e run, permitindo que você atualize os requisitos como parte de uma única etapa.


Benefícios da integração da API Beeware

O Beeware permite que os desenvolvedores escrevam código em Python e o compilem para várias plataformas, incluindo Android, iOS, Windows, macOS e Linux. Isso facilita o desenvolvimento de aplicativos que podem ser executados em vários dispositivos e sistemas operacionais.

Beeware fornece bibliotecas fáceis de usar para acessar e interagir com APIs, como Requests, o que simplifica o processo de fazer solicitações HTTP e lidar com respostas.

O Beeware oferece suporte à criptografia SSL, que ajuda a proteger dados confidenciais ao se comunicar com APIs pela Internet.


Conclusão

Os recursos de integração da API BeeWare fornecem aos desenvolvedores uma ferramenta poderosa para criar aplicativos de plataforma cruzada que podem interagir com serviços baseados na Web e aprimorar a funcionalidade e a experiência do usuário de seus aplicativos. Com seu amplo suporte para bibliotecas e módulos Python, o BeeWare facilita a incorporação de APIs em aplicativos móveis e de desktop, abrindo um mundo de possibilidades para a criação de aplicativos inovadores e ricos em recursos.

Nós valorizamos o seu feedback.
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0
+1
0

Assine a nossa newsletter
Digite seu e-mail para receber um resumo semanal de nossos melhores posts. Saber mais!
ícone