Ответ
GET и POST — это методы HTTP протокола с различной семантикой, которые используются при работе с REST API во Flutter-приложениях.
GET-запрос используется для получения (чтения) данных с сервера. Он должен быть идемпотентным (повторные идентичные запросы дают тот же результат) и безопасным (не изменяет состояние сервера).
import 'package:http/http.dart' as http;
Future<void> fetchUserData(int userId) async {
// Параметры передаются в URL (query parameters)
final uri = Uri.parse('https://api.example.com/users')
.replace(queryParameters: {'id': userId.toString()});
final response = await http.get(uri);
if (response.statusCode == 200) {
final userData = jsonDecode(response.body);
print('User: $userData');
} else {
throw Exception('Failed to load user');
}
}
Характеристики GET:
- Параметры передаются в URL (видимы в истории браузера, логах)
- Имеет ограничения на длину URL (зависит от браузера/сервера)
- Может кэшироваться браузерами и промежуточными прокси
- Не должен использоваться для операций, изменяющих данные
POST-запрос используется для отправки (создания/изменения) данных на сервер. Он не идемпотентен (повторный запрос может создать дубликат) и изменяет состояние сервера.
Future<void> createNewPost(String title, String content) async {
final uri = Uri.parse('https://api.example.com/posts');
// Данные передаются в теле запроса (request body)
final body = jsonEncode({
'title': title,
'content': content,
'createdAt': DateTime.now().toIso8601String(),
});
final headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
};
final response = await http.post(uri, body: body, headers: headers);
if (response.statusCode == 201) { // 201 Created
final newPost = jsonDecode(response.body);
print('Created post with ID: ${newPost['id']}');
} else {
throw Exception('Failed to create post');
}
}
Характеристики POST:
- Данные передаются в теле запроса (не видны в URL)
- Нет практических ограничений на размер данных
- Не кэшируется по умолчанию
- Подходит для конфиденциальных данных (с HTTPS)
Когда что использовать во Flutter-приложении:
- GET: Загрузка списка товаров, получение профиля пользователя, поиск с фильтрами
- POST: Регистрация пользователя, отправка формы заказа, загрузка файла, создание нового комментария