← Назад к вопросам
Какие знаешь способы взаимодействия северного 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');
Рекомендации по выбору
- REST API — стартуй с этого для базовых проектов
- GraphQL — если данные сложные и часто меняются
- WebSocket — добавляй для real-time функций (чат, уведомления)
- gRPC — если нужна максимальная производительность
- Firebase — для быстрого прототипирования
В большинстве реальных приложений используется комбинация: REST для CRUD операций + WebSocket для real-time данных.