HTTP CRUD (HttpClient)

Базовые операции CRUD

Операция Назначение HTTP-метод
CreateСоздание нового ресурсаPOST
ReadЧтение/получение ресурсаGET
UpdateПолное обновление ресурсаPUT
DeleteУдаление ресурсаDELETE

PATCH vs PUT: Существует еще один метод, PATCH, который используется для частичного обновления ресурса. Например, если нужно изменить только название поста, а не все его поля. PUT же подразумевает полную замену ресурса.

Важно

Внимательно читайте все комментарии к примерам кода ниже

1. GET Запрос - получаем данные по API

Dart
Светлая тема Темная тема
// Выполняет GET запрос и выводит полученные данные.  
Future<void> getData(String url) async {  
  final client = HttpClient();  
  try {  
    final request = await client.getUrl(Uri.parse(url));  
    final response = await request.close();  
  
    if (response.statusCode == HttpStatus.ok) {  
      final responseBody = await response.transform(utf8.decoder).join();  
      // responseBody содержит тело ответа в виде строки  
	  // jsonDecode преобразует строку JSON в объект (Map или List)
      print(jsonDecode(responseBody));  
    } else {  
      print('Ошибка при GET запросе. Статус код: $url: ${response.statusCode}');  
    }  
  } catch (e) {  
    print('GET Exception $url: $e');  
  } finally {  
    client.close();  
  }  
}
Dart
Светлая тема Темная тема
import 'dart:convert';  
import 'dart:io';  
  
void main() async {  
  final baseUrl = 'https://jsonplaceholder.typicode.com';  
  await getData('$baseUrl/posts/1');  // получаем данные 1го поста
}
http
Вывод
Светлая тема Темная тема
{
	userId: 1, 
	id: 1, 
	title: sunt aut facere repellat provident occaecati excepturi optio, 
	body: quia et suscipit suscipit recusandae consequuntur expedita et cum
}

2. POST Запрос - отправляем данные по API на сервер

Dart
Светлая тема Темная тема
/// POST запрос для отправки данных  
Future<void> postData(String url, Map<String, dynamic> data) async {  
  final client = HttpClient();  
  try {  
    // client.postUrl() - создает POST-запрос  
    // Uri.parse(url) - преобразует строку URL в объект Uri    
    // URL это просто строка, Uri структурированный доступ к URL компонентам,    
    final request = await client.postUrl(Uri.parse(url));  
      
    // Устанавливаем заголовки  
    request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');  
      
    // Преобразует объект data в строку JSON и записывает (отправляет)   
    // эту строку в тело HTTP-запроса  
    request.write(jsonEncode(data));  
    final response = await request.close();  
  
    // HttpStatus.created - код состояния 201 Created для POST  
    if (response.statusCode == HttpStatus.created) {   
      final responseBody = await response.transform(utf8.decoder).join();  
      print(jsonDecode(responseBody));  
    } else {  
      print('Ошибка при POST запросе. Статус код: $url: ${response.statusCode}');  
      final errorBody = await response.transform(utf8.decoder).join();  
      print('Ошибка в теле: $errorBody');  
    }  
  } catch (e) {  
    print('POST Exception for $url: $e');  
  } finally {  
    client.close();  
  }  
}
Dart
Светлая тема Темная тема
import 'dart:convert';  
import 'dart:io';  
  
void main() async {  
  final baseUrl = 'https://jsonplaceholder.typicode.com';  
  
  // 1. GET запрос для получения данных
  await getData('$baseUrl/posts/1');  // получаем данные 1го поста

  // 2. POST запрос для отправки данных  
  final newPost = {  
    'title': 'HTTP Requests',  
    'body': ' GET POST PUT DELETE',  
    'userId': 1,  
  };  
  await postData('$baseUrl/posts', newPost);
}
Вывод
Светлая тема Темная тема
{
  title: HTTP Requests, 
  body:  GET POST PUT DELETE, 
  userId: 1, 
  id: 101
}

3. PUT Запрос - обновляет данные по API на сервере

Dart
Светлая тема Темная тема
/// PUT запрос для обновления данных.  
Future<void> putData(String url, Map<String, dynamic> data) async {  
  final client = HttpClient();  
  try {  
    final request = await client.putUrl(Uri.parse(url));  
    request.headers.set(HttpHeaders.contentTypeHeader, 'application/json');  
    request.write(jsonEncode(data));  
    final response = await request.close();  
  
    if (response.statusCode == HttpStatus.ok) {  
      final responseBody = await response.transform(utf8.decoder).join();  
      print(jsonDecode(responseBody));  
    } else {  
      print('Ошибка при PUT запросе. Статус код: $url: ${response.statusCode}');  
      final errorBody = await response.transform(utf8.decoder).join();  
      print('Ошибка в теле: $errorBody');  
    }  
  } catch (e) {  
    print('PUT Exception $url: $e');  
  } finally {  
    client.close();  
  }  
}
Dart
Светлая тема Темная тема
import 'dart:convert';  
import 'dart:io';  
  
void main() async {  
  final baseUrl = 'https://jsonplaceholder.typicode.com';  
  
  // 1. GET запрос для получения данных
  await getData('$baseUrl/posts/1');  // получаем данные 1го поста

  // 2. POST запрос для отправки данных  
  final newPost = {  
    'title': 'HTTP Requests',  
    'body': ' GET POST PUT DELETE',  
    'userId': 1,  
  };  
  await postData('$baseUrl/posts', newPost);

  // 3. PUT запрос для обновления данных  
  final updatedPost = {  
    'id': 1, // Важно указать ID для обновления  
    'title': '1234',  
    'body': '7777777777',  
    'userId': 1,  
  };  
  await putData('$baseUrl/posts/1', updatedPost);

}
Вывод
Светлая тема Темная тема
{
  id: 1, 
  title: 1234, 
  body: 7777777777, 
  userId: 1
}

4. DELETE Запрос - удаляет данные по API на сервере

Dart
Светлая тема Темная тема
/// DELETE запрос для удаления данных.  
Future<void> deleteData(String url) async {  
  final client = HttpClient();  
  try {  
    // client.deleteUrl() - создает DELETE-запрос  
    final request = await client.deleteUrl(Uri.parse(url));  
    final response = await request.close();  
  
    if (response.statusCode == HttpStatus.ok) {  
      print('Всё успешно удалёно');  
    } else {  
      print('Ошибка при DELETE запросе. Статус код: $url:${response.statusCode}'); 
    }  
  } catch (e) {  
    print('DELETE Exception $url: $e');  
  } finally {  
    client.close();  
  }  
}
Dart
Светлая тема Темная тема
import 'dart:convert';  
import 'dart:io';  
  
void main() async {  
  final baseUrl = 'https://jsonplaceholder.typicode.com';  
  
  // 1. GET запрос для получения данных  
  await getData('$baseUrl/posts/1');  
  
  // 2. POST запрос для отправки данных  
  final newPost = {  
    'title': 'HTTP Requests',  
    'body': ' GET POST PUT DELETE',  
    'userId': 1,  
  };  
  await postData('$baseUrl/posts', newPost);  
  
  // 3. PUT запрос для обновления данных  
  final updatedPost = {  
    'id': 1, // Важно указать ID для обновления  
    'title': '1234',  
    'body': '7777777777',  
    'userId': 1,  
  };  
  await putData('$baseUrl/posts/1', updatedPost);  
  
  
  // 4. DELETE запрос для удаления данных  
  await deleteData('$baseUrl/posts/1');  
}
Вывод
Светлая тема Темная тема
Всё успешно удалёно