
Nesta aula é feita a apresentação do curso, o que inclui o seu objetivo, os métodos de ensino utilizados e os pré-requisitos para os alunos.
É muito importante entender o contexto do curso, ou seja, o acesso à Serviços Web a partir de um programa Rust.
Como instalar o compilador e ferramentas de desenvolvimento da linguagem Rust.
Como instalar o Visual Studio Code.
Esta aula mostra como executar os programas exemplo do curso.
Trata-se de um Cliente HTTP em Rust que inclui os principais recursos, tais como suportar clientes síncronos e assíncronos, mensagens com body simples ou JSON, HTTPS, Cookies, etc.
Existem na Internet várias listas de Web Services com acesso livre (sem autorização) ou com necessidade de autorização porém sem custo. Vamos utilizar estes servidores para testar os programas do curso.
Vamos acessar um serviço web livre para ilustrar como podemos enviar requests e receber responses através do crate Reqwest.
Vamos usar uma série de requisições para explorar o comportamento do servidor e conferir aquilo que é dito na documentação.
JSON (JavaScript Object Notation) é um formato padrão aberto que usa TXT para armazenar e transmitir objetos de dados consistindo de pares nome-valor e matrizes (ou outros valores serializáveis).
O crate Serde fornece todo o suporte necessário para receber mensagens com o corpo em JSON e deserializar este corpo convertendo as informações em uma struct Rust.
O servidor Alphavantage permite obter cotações das bolsas de valores. Vamos usar uma série de requisições para explorar o comportamento do servidor alphavantage e conferir aquilo que é dito na documentação.
O crate serde permite diversas alterações e verificações no momento de deserializar o corpo JSON, inclusive a renomeação dos campos.
O serviço viacep fornece o endereço a partir do CEP. Vamos usar uma série de requisições para explorar o comportamento do servidor viacep e conferir aquilo que é dito na documentação.
O atributo flatten coloca os campos da estrutura filha no nível da estrutura pai. Ele é suportado somente dentro de structs que têm campos nomeados, e o campo ao qual ele é aplicado deve ser um tipo de struct ou map.
Podemos usar Vector para receber uma lista de estruturas dentro de uma mensagem JSON.
Pode-se aproveitar o Error do reqwest e propagá-lo para a função chamadora.
Ele implementa uma API falsa, livre e confiável para testes e prototipagem. JSONPlaceholder é uma REST API grátis que pode ser usada para obter dados falsos.
A estrutura Client do Reqwest permite a alteração de vários parâmetros de configuração, embora os valores default sejam muitas vezes suficientes. O Client mantém informações sobre as conexões, o que torna mais eficiente o envio de requests.
Através de uma estrutura Client é possível enviar mensagem POST. Pode-se usar o crate Serde e serializar structs Rust, colocando-as no formato Json.
Através de uma estrutura Client é possível enviar mensagem PUT. Pode-se usar o crate Serde e serializar/deserializar structs Rust, colocando-as no formato Json.
Através de uma estrutura Client é possível enviar mensagem DELETE.
O servidor Openweathermap permite obter informações e previsões meteorológicas. Vamos usar uma série de requisições para explorar o comportamento do servidor Openweathermap conferir aquilo que é dito na documentação.
Pode-se usar os métodos timeout() e connect_timeout() para definir timeouts na espera por respostas do servidor.
Os métodos 'reqwest::Url::parse_with_params' e 'reqwest::request::RequestBuilder::query' podem ser usado para montar a URL a partir de uma lista de parâmetros.
Algumas vezes deseja-se alterar os Headers de um Request antes de envia-lo. Por exemplo, alterar o 'User-Agent' para identificar o HTTP client em questão. O 'User-Agent' faz parte dos Headers e é enviado junto com cada request, o que permite o servidor identificar o tipo de cliente enviando o request, algo importante no caso de Browsers. O método 'headers' do Client permite inserir valores no header de um request.
A aplicação identifica a cidade que fica no meio do caminho (em linha reta) entre as cidades A e B. Cidade A e B são entradas via teclado no formato 'cidade,estado,país' onde estado e país são opcionais. Exemplos de cidades:
São Paulo,SP,BR
São Paulo,,BR
São Paulo,,
A cidade do meio é identificada e alguns dos seus dados meteorológicos são apresentados.
Primeira parte da aplicação exemplo que recupera do Coingecko dados sobre criptomoedas e faz um comparativo estatístico simples.
Segunda parte da aplicação exemplo que recupera do Coingecko dados sobre criptomoedas e faz um comparativo estatístico simples.
Terceira parte da aplicação exemplo que recupera do Coingecko dados sobre criptomoedas e faz um comparativo estatístico simples.
Primeira parte da aplicação exemplo que recupera do Youtube uma lista de vídeos segundo certos critérios de pesquisa: Introdução.
Segunda parte da aplicação exemplo que recupera do Youtube uma lista de vídeos segundo certos critérios de pesquisa: Descrição do Módulo cliente_youtube.
Terceira parte da aplicação exemplo que recupera do Youtube uma lista de vídeos segundo certos critérios de pesquisa: Credenciais.
Quarta parte da aplicação exemplo que recupera do Youtube uma lista de vídeos segundo certos critérios de pesquisa: Módulo Principal.
Quinta parte da aplicação exemplo que recupera do Youtube uma lista de vídeos segundo certos critérios de pesquisa: Paginação.
Apresentação das planilhas do Google e comentários sobre compartilhamento.
Mesmo quando a planilha é pública o programa Rust precisa de uma chave de acesso, esta aula mostra como obter uma.
O serviço web do Google Sheets é amplo, com vários conceitos que precisam ser entendidos mesmo antes de começar a programação.
O serviço web do Google Sheets é amplo, com vários recursos, várias operações e estruturas de dados associadas.
Aplicação exemplo que lê valores de uma planilha pública do Google Sheets usando API_KEY.
Aplicação exemplo que TENTA escrever valores em uma planilha do Google Sheets usando API_KEY.
Para alterar planilhas do Google Sheets é necessário um Access Token com OAuth 2.0.
Aplicação exemplo que lê e escreve valores em uma planilha do Google Sheets usando Access Token.
A execução assíncrona permite que várias tarefas sejam executadas concorrentemente, ou seja, quando uma tem que esperar por algo, outra pode usar o processador. O tempo da mesma thread do sistema operacional é dividido entre elas.
O servidor Viacep será usado como exemplo de aplicação, porém ainda fazendo requisições síncronas ao serviço web usando 'reqwest::blocking::Client::new()'
Primeira parte da solução assíncrona para acessar o serviço web Viacep: Módulo. O servidor Viacep será usado para ilustrar a vantagem de empregar funções assíncronas quando várias requisições independentes precisam ser feitas. Este exemplo usa requisições assíncronas.
Segunda parte da solução assíncrona para acessar o serviço web Viacep: Main. O servidor Viacep será usado para ilustrar a vantagem de empregar funções assíncronas quando várias requisições independentes precisam ser feitas. Este exemplo usa requisições assíncronas.
Nesta aula é feito um balanço do conteúdo do curso.
Serviços Web permitem que uma aplicação escrita em qualquer linguagem de programação (inclusive Rust) faça requisições de serviços e recebam as respectivas respostas. Por exemplo, um programa Rust pode enviar na requisição o CEP e receber o endereço de volta. Ou enviar o código de uma ação (PETR4) na requisição e receber a sua cotação na resposta. Existem milhares de Web Services públicos, gratuitos e pagos, que podem ser acessados por qualquer programa. Somente o Google oferece dezenas de APIs com uma enorme gama de serviços, veja 'apis-explorer' no site 'developers' do Google.
Através de Serviços Web é possível adicionar funcionalidades avançadas à nossa aplicação Rust sem precisar desenvolver, apenas enviando requisições e recebendo as respostas, na medida da necessidade de nossa aplicação. Assim como Páginas Web em Browsers e Aplicativos em Smart Phones, um simples programa Rust pode usar os recursos disponibilizados pelos Serviços Web.
Existem várias bibliotecas (crates) no mundo Rust que facilitam o envio de requisições para Serviços Web. Também existem várias possibilidades quanto á formatação dos dados. No caso específico deste curso vamos usar o crate Reqwest para as requisições e vamos usar Serde para codificar o corpo das requisições no formato Json.
Rust e suas bibliotecas possuem todos os recursos necessários para acessar Serviços Web. Pode-se realizar requisições síncronas ou assíncronas, manipular Header, Queries, Body. Pode-se enviar e receber o corpo da mensagem na codificação Json. Pode-se implementar um programa Rust que aproveita Serviços Web disponíveis na Internet, tanto gratuítos como pagos.
Este curso descreve como criar requisições e receber respostas de Serviços Web no contexto da Linguagem de Programação Rust. É suposto que o aluno conhece o básico de Rust. Por exemplo, fez o meu curso "Curso Básico de Linguagem Rust" na Udemy (veja descrição do curso no site da Udemy) ou tem o conhecimento equivalente. É suposto que o aluno NÃO CONHECE NADA sobre Serviços Web. Conhecimento básico de Closures é útil mas não estritamente necessário (veja descrição no site da Udemy do meu curso "Closures na Linguagem Rust").
As aulas são conduzidas através de exemplos com programas compiláveis e executáveis. Todos os programas exemplo usados estão disponíveis para download. Durante as aulas o instrutor utiliza o Visual Studio Code, mas o aluno acostumado com outra IDE (Ambiente Integrado de Desenvolvimento) poderá utilizá-la também.
O acesso a Serviços Web na linguagem em Rust são apresentados e explicados através dos programas exemplo. São acessados a título de exemplo vários serviços gratuitos tais como obter dados meteorológicos, converter CEP em endereço e vice-versa, obter cotações de ações e criptomoedas, acessar serviços Google tais como Youtube e Sheets (planilhas), além de outros mais.