Добавить в корзинуПозвонить
Найти в Дзене
Тарасов

Как подружить Flutter с Rest Api

Зачем вообще дружить Flutter с Rest Api ? Зачем вообще нужно Api или Backend ? Почему нельзя сделать просто приложение и все ? С пользовательской точки зрения backend нужен, чтобы не терять данные даже после удаления приложения или чтобы на разных устройствах в приложении была синхронизированная информация. С точки зрения разработчика лучше сделать как можно больше на backend, чтобы: Список можно продолжать очень долго... С точки зрения бизнеса можно делать всевозможную аналитику, например активное количество пользователей или активность пользователя в разделах приложения. Переходим к теме статьи В интеграции приложения с api нет ничего сложного, в первую очередь нужно определить протокол, чаще всего используется http. Во вторую очередь необходимо определить формат данных, в котором будут обмениваться сообщениями мобильное приложение и backend, самый часто используемый это Json, есть еще множество других форматов например бинарный или protobuf от Google, но в большинстве случае хватает
Оглавление

Зачем вообще дружить Flutter с Rest Api ?

Зачем вообще нужно Api или Backend ?

Почему нельзя сделать просто приложение и все ?

С пользовательской точки зрения backend нужен, чтобы не терять данные даже после удаления приложения или чтобы на разных устройствах в приложении была синхронизированная информация.

С точки зрения разработчика лучше сделать как можно больше на backend, чтобы:

  • проще было поддерживать функционал, чтобы в случае каких то правок или исправления ошибок не нужно было обновлять приложения, проходя проверку в маркетах
  • проще отлаживать функционал - пользователей много, у каждого свое уникальное устройство, а сервер он (если упростить) один
  • на мобильном устройстве может не хватать мощности (оперативной памяти или процессора) для обработки тех или иных данных, например у пользователя 100 тысяч строк сохраненных данных. А на экран нужно вывести всего одну строчку

Список можно продолжать очень долго...

С точки зрения бизнеса можно делать всевозможную аналитику, например активное количество пользователей или активность пользователя в разделах приложения.

Переходим к теме статьи

В интеграции приложения с api нет ничего сложного, в первую очередь нужно определить протокол, чаще всего используется http. Во вторую очередь необходимо определить формат данных, в котором будут обмениваться сообщениями мобильное приложение и backend, самый часто используемый это Json, есть еще множество других форматов например бинарный или protobuf от Google, но в большинстве случае хватает Json.

В рамках данной статьи я не буду использовать навороченные библиотеки, будем использовать только базовые. Приступим.

Создаем flutter проект. Нам нужен пакет http, добавляем в pubspec

http: ^0.13.1

http | Dart Package

Добавляем dart файл в папку lib нашего проекта api_data_provider.dart

Добавляем метод getWeather() и пишем логику

-2

Разберем по строкам

строка 7 - объявляем http клиент из библиотеки, которую добавили выше.

строка 9 - добавляем в заголовки запроса Content-Type - формат данных, в котором мы ждем ответ от сервера.

P.s. заголовки запроса это своего рода правила обмена данными, в заголовки добавляют локализацию, часовой пояс, формат данных и авторизацию.

строка 11 - вызов метода Api.

строка 17 - проверяем возвращаемый сервером ответ. Статус ответа 200 означает успешный ответ и мы можем дальше обрабатывать тело ответа сервера.

В нашем случае тело ответа это просто строка в дальнейшем работать с ней неудобно, поэтому нам необходимо строку сериализовать в объект. Для этого создадим класс описывающий ответ метода выше.

Ответ выглядит так

-3

Класс, в который мы сериализуем ответ от сервера будет выглядеть так:

-4

!Важно мы не будем описывать все поля ответа, возьмем только разные, чтобы показать, как выглядит сериализация параметров, вложенных объектов и массивов.

Я не буду останавливаться на процессе создания класса, остановлюсь только на важных моментах. Первое на что стоит обратить внимание это на то что у фабричного метода на входе параметр Map<String, dynamic>, но выше я писал о том, что тело ответа это строка. Чтобы преобразовать строку в словарь делаем следующее

var jsonMap = jsonDecode(response.body);

jsonDecode это метод встроенный библиотеки dart:convert

И чтобы создать экземпляр класса ForecastResponse делаем следующее

var forecast = ForecastResponse.fromJson(jsonMap);

Стоит немного поменять метод getWeather(), чтобы он возвращал нам сразу наш объект.

-5

Финал

Код выше позволяет вызывать метод GET от сервера и полученный ответ преобразовывать в объект dart. Также есть методы POST, PUT, DELETE. Используя метод GET мы передаем параметры в строке запроса, но например используя метод POST мы также можем передать серверу объект десериализованный в Json. Но это тема для отдельной статьи. А также код выше стоит немного отревьюить, а также я бы логику формирования запросов к Api вынес бы в отдельный абстрактный класс. А также есть еще смысл показать, как обрабатывать запросы от сервера без "залипания" интерфейса.

Об этом всем в следующих статьях...

Пишите вопросы в комментариях, ставьте лайки и подписывайтесь на канал. Спасибо.