← Назад к вопросам

Какие знаешь способы взаимодействия северного API и Flutter?

2.0 Middle🔥 171 комментариев
#Нативная интеграция#Работа с сетью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Взаимодействие Backend API и Flutter

В современной разработке Flutter-приложений существует несколько основных подходов для взаимодействия с backend-сервисами.

1. HTTP/REST API

Это наиболее распространённый способ. Flutter предоставляет пакет http и dio.

import 'package:http/http.dart' as http;

Future<List<User>> fetchUsers() async {
  final response = await http.get(
    Uri.parse('https://api.example.com/users'),
    headers: {'Authorization': 'Bearer token'},
  );

  if (response.statusCode == 200) {
    final List jsonResponse = json.decode(response.body);
    return jsonResponse.map((user) => User.fromJson(user)).toList();
  } else {
    throw Exception('Failed to load users');
  }
}

Преимущества:

  • Простота и стандартность
  • Универсальность с любым backend
  • Встроенное кэширование HTTP
  • Множество библиотек (dio, chopper, retrofit)

2. GraphQL

Язык запросов для точного получения данных.

import 'package:graphql_flutter/graphql_flutter.dart';

const String getUserQuery = r"""
  query GetUser($id: ID!) {
    user(id: $id) {
      id
      name
      email
    }
  }
""";

final result = await client.query(
  QueryOptions(
    document: gql(getUserQuery),
    variables: {'id': id},
  ),
);

Преимущества:

  • Запрашиваешь только нужные поля
  • Автогенерация типов из схемы
  • Real-time через subscriptions
  • Продвинутое кэширование

3. WebSocket

Для real-time коммуникации и уведомлений.

import 'package:web_socket_channel/web_socket_channel.dart';

class ChatService {
  late WebSocketChannel channel;
  
  void connect() {
    channel = WebSocketChannel.connect(
      Uri.parse('wss://api.example.com/chat'),
    );
  }
  
  Stream<String> get messages => channel.stream.map((msg) => msg);
  
  void sendMessage(String message) {
    channel.sink.add(message);
  }
}

Применение:

  • Real-time чат
  • Push-уведомления от сервера
  • Live-данные (котировки, курсы)
  • Синхронизация мультиплеера

4. gRPC

Высокопроизводительный RPC, использует Protocol Buffers и HTTP/2.

import 'package:grpc/grpc.dart';

final channel = ClientChannel(
  'api.example.com',
  port: 443,
  options: const ChannelOptions(
    credentials: ChannelCredentials.secure(),
  ),
);

final stub = UserServiceClient(channel);
final response = await stub.getUser(GetUserRequest(id: '123'));

Преимущества:

  • Высокая производительность
  • Бинарный протокол
  • Двусторонний streaming
  • Автогенерация кода из proto-файлов

5. Firebase & Cloud Services

Для push-уведомлений, облачного хранилища и аналитики.

import 'package:firebase_messaging/firebase_messaging.dart';

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  print('Уведомление: ${message.notification?.title}');
});

6. Local Storage & Кэширование

SharedPreferences для простых данных:

final prefs = await SharedPreferences.getInstance();
await prefs.setString('user_name', 'John');

SQLite для сложных данных:

final db = await openDatabase('app.db');
final users = await db.query('users');

Рекомендации по выбору

  1. REST API — стартуй с этого для базовых проектов
  2. GraphQL — если данные сложные и часто меняются
  3. WebSocket — добавляй для real-time функций (чат, уведомления)
  4. gRPC — если нужна максимальная производительность
  5. Firebase — для быстрого прототипирования

В большинстве реальных приложений используется комбинация: REST для CRUD операций + WebSocket для real-time данных.

Какие знаешь способы взаимодействия северного API и Flutter? | PrepBro