Dart Puro - Como consumir uma API - Primeira Requisição
Sim, nós iremos utilizar apenas o Dart, nada de Flutter...
Você não precisa baixar nada para acompanhar, basta acessar o site:
https://dartpad.dev/
Se é a primeira vez que você está utilizando esse site, provavelmente você verá algo como:
// Copyright 2015 the Dart project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license
// that can be found in the LICENSE file.
void main() {
for (var i = 0; i < 4; i++) {
print('hello $i');
}
}
Mantenha a função main e apague o restante, deve ficar assim:
void main() {
}
Agora, iremos pegar a API que iremos utilizar, aqui está o link:
https://viacep.com.br/
Iremos utilizar no formato de json, então precisamos desse endpoint:
https://viacep.com.br/ws/01001000/json/
Se você acessar o link acima, deve ver isso:
{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"ibge": "3550308",
"gia": "1004",
"ddd": "11",
"siafi": "7107"
}
Então vamos começar!
Cliente que consumirá a API
Nós utilizaremos o pacote http como cliente, é muito simples utilizar, o que precisamos fazer é importa ele
import 'package:http/http.dart' as http;
void main() {
}
Vamos precisa do sufixo 'http' para que possamos acessar o conteúdo contido no arquivo 'http.dart' que importamos.
Primeira Requisição
Agora vamos escrever o código necessário para consumir a API e mostrar no console a resposta:
import 'package:http/http.dart' as http;
Future<void> main() async {
final url = Uri.parse('https://viacep.com.br/ws/01001000/json/');
final response = await http.get(url);
if (response.statusCode == 200) {
print(response.body);
}
}
Vamos entender o que está acontecendo aqui.
Foi necessário alterar a assinatura da função 'main', antes ela era síncrona, porém passou a ser assíncrona, isso aconteceu porque o método 'get' do pacote 'http' é um 'Future', nós precisamos aguardar ('await') a execução dele na 'main', para fazer isso precisamos colocar um 'async' na 'main'.
Depois criamos uma variável do tipo 'Uri' que o tipo requirido pelo método 'get' do pacote 'http', nós usamos o 'parse' do 'Uri' por ele pedir apenas uma 'String' que é o que queremos, colocamos um 'final' pois a variável 'url' não terá seu valor alterado durante a execução do programa.
Depois criamos uma outra variável chamada 'response' que receberá a resposta aguardada do método 'get' do pacote 'http', o método 'get' retorna um 'Response' que contém algumas informações, dentre elas usamos algumas logo a seguir.
Verificamos se a requisição foi um sucesso verificando o 'código de status' que se caso for 200 significa que deu certo, e se deu certo, acessamos o 'body' e podemos ver pelo 'print' a mesma coisa que vimos quando acessamos o link pelo navegador.
{
"cep": "01001-000",
"logradouro": "Praça da Sé",
"complemento": "lado ímpar",
"bairro": "Sé",
"localidade": "São Paulo",
"uf": "SP",
"ibge": "3550308",
"gia": "1004",
"ddd": "11",
"siafi": "7107"
}
Que lindo! Foi tão simples né ?
Mas que tal deixarmos as coisas mais interessantes modelando os dados ?
Continuação:
Dart Puro - Como consumir uma API - Modelando dados ( fromJson/fromMap )