joaopaulofcc

[CC] [DBAPI] apiClient.dart

Nov 25th, 2020
191
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 4.93 KB | None | 0 0
  1. // Importa bibliotecas
  2. import 'dart:async';
  3. import 'dart:convert';
  4. import 'package:path/path.dart';
  5. import '../models/dog.dart';
  6. import 'package:http/http.dart' as http;
  7.  
  8. class ApiClient {
  9.   // URL da API que será utilizada.
  10.   String _url = "https://5fb5817d36e2fa00166a462d.mockapi.io";
  11.  
  12.   // Método responsável por inserir um novo objeto na API.
  13.   Future<Dog> insertDog(Dog dog) async {
  14.     // Envia dados via post e obtem como retorno o objeto que foi escrito na API.
  15.     final response = await http.post(
  16.       // Monta URL final -> base + endpoint.
  17.       join(_url, 'dogs'),
  18.  
  19.       // Configura headers da requisição.
  20.       headers: <String, String>{
  21.         'Content-Type': 'application/json; charset=UTF-8',
  22.       },
  23.  
  24.       // Envia dados no body. ID não é enviado pois a API gerencia como auto incremento.
  25.       body: jsonEncode(<String, dynamic>{
  26.         'name': dog.name,
  27.         'age': dog.age,
  28.       }),
  29.     );
  30.  
  31.     // Se a resposta foi 201 -> sucesso e retorna o objeto Dog armazenado na API.
  32.     if (response.statusCode == 201) {
  33.       return Dog.fromMap(jsonDecode(response.body));
  34.     }
  35.     // Caso contrário lança erro.
  36.     else {
  37.       throw Exception('Falha ao salvar dado na API');
  38.     }
  39.   }
  40.  
  41.   // Método responsável por atualizar um objeto na API.
  42.   Future<Dog> updateDog(Dog dog) async {
  43.     // Envia dados via put e obtem como retorno o objeto que foi escrito na API.
  44.     final response = await http.put(
  45.       // Monta URL final -> base + endpoint.
  46.       join(_url, 'dogs/${dog.id}'),
  47.  
  48.       // Configura headers da requisição.
  49.       headers: <String, String>{
  50.         'Content-Type': 'application/json; charset=UTF-8',
  51.       },
  52.  
  53.       // Envia dados no body. ID não é enviado pois a API gerencia como auto incremento.
  54.       body: jsonEncode(<String, dynamic>{
  55.         'name': dog.name,
  56.         'age': dog.age,
  57.       }),
  58.     );
  59.  
  60.     // Se a resposta foi 200 -> sucesso e retorna o objeto Dog armazenado na API.
  61.     if (response.statusCode == 200) {
  62.       return Dog.fromMap(jsonDecode(response.body));
  63.     }
  64.     // Caso contrário lança erro.
  65.     else {
  66.       throw Exception('Falha ao atualizar um dado na API!');
  67.     }
  68.   }
  69.  
  70.   // Método responsável por obter um único objeto da API (dado um id).
  71.   Future<Dog> getDog(String id) async {
  72.     // Solicita dados via get e obtem como retorno o objeto que foi lido da API.
  73.     final response = await http.get(
  74.         // Monta URL final -> base + endpoint.
  75.         join(_url, 'dogs/$id'));
  76.  
  77.     // Se a resposta foi 200 -> sucesso e retorna o objeto Dog lido da API.
  78.     if (response.statusCode == 200) {
  79.       return Dog.fromMap(jsonDecode(response.body));
  80.     }
  81.     // Caso contrário lança erro.
  82.     else {
  83.       throw Exception('Falha ao carregar dados da API!');
  84.     }
  85.   }
  86.  
  87.   // Método responsável por obter a lista com todos os dados da API.
  88.   Future<List<Dog>> getDogs() async {
  89.     // Solicita dados via get e obtem como retorno uma lista de objetos lidos da API.
  90.     final response = await http.get(
  91.         // Monta URL final -> base + endpoint.
  92.         join(_url, 'dogs'));
  93.  
  94.     List<Dog> listDogs;
  95.  
  96.     // Se a resposta foi 200 -> sucesso: monta a lista a retorna.
  97.     if (response.statusCode == 200) {
  98.       final List dogs = jsonDecode(response.body);
  99.       listDogs = List.generate(dogs.length, (i) {
  100.         return Dog.fromMap(dogs[i]);
  101.       });
  102.       return listDogs;
  103.     }
  104.     // Caso contrário lança erro.
  105.     else {
  106.       throw Exception('Falha ao carregar dados da API!');
  107.     }
  108.   }
  109.  
  110.   // Método responsável por deletar um objeto da API (dado um id);
  111.   Future deleteDog(String id) async {
  112.     // Solicita remoção via delete.
  113.     final response = await http.delete(
  114.       // Monta URL final -> base + endpoint.
  115.       join(_url, 'dogs/$id'),
  116.  
  117.       // Configura headers da requisição.
  118.       headers: <String, String>{
  119.         'Content-Type': 'application/json; charset=UTF-8',
  120.       },
  121.     );
  122.  
  123.     // Caso a resposta seja diferente de 200 lança erro.
  124.     if (response.statusCode != 200) {
  125.       throw Exception('Falha ao deletar o registro Dog com id=$id!');
  126.     }
  127.   }
  128.  
  129.   // Método responsável por deletar todos os objetos armazenados na API.
  130.   Future deleteAllDogs() async {
  131.     // Lista de objetos Dog com todos os objetos presentes na API.
  132.     final List<Dog> dogs = await getDogs();
  133.  
  134.     // Percorre cada objeto da lista e solicita remoção via delete.
  135.     for (Dog dog in dogs) {
  136.       final response = await http.delete(
  137.         // Monta URL final -> base + endpoint.
  138.         join(_url, 'dogs/${dog.id}'),
  139.  
  140.         // Configura headers da requisição.
  141.         headers: <String, String>{
  142.           'Content-Type': 'application/json; charset=UTF-8',
  143.         },
  144.       );
  145.  
  146.       // Caso a resposta seja diferente de 200 lança erro.
  147.       if (response.statusCode != 200) {
  148.         throw Exception('Falha ao deletar o registro Dog com id=${dog.id}!');
  149.       }
  150.     }
  151.   }
  152. }
  153.  
Add Comment
Please, Sign In to add comment