Какие HTTP-методы (типы запросов) ты знаешь?

«Какие HTTP-методы (типы запросов) ты знаешь?» — вопрос из категории Сети, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основные HTTP-методы, которые я использую при работе с RESTful API в Flutter-приложениях:

Метод Назначение (Семантика) Идемпотентность* Безопасность**
GET Получение данных с сервера. Не должен изменять состояние. Да Да
POST Создание нового ресурса. Часто используется для отправки данных (форм, JSON). Нет Нет
PUT Полное обновление (замену) ресурса по указанному URI. Если ресурса нет — может создавать. Да Нет
PATCH Частичное обновление ресурса. Нет Нет
DELETE Удаление ресурса по указанному URI. Да Нет

Идемпотентность: Повторный идентичный запрос дает тот же результат, что и первый. *Безопасность: Метод не изменяет состояние сервера.

Примеры на Dart с package:http:

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

// GET запрос
var getResponse = await http.get(Uri.https('api.example.com', '/users/1'));

// POST запрос с телом в формате JSON
var postResponse = await http.post(
  Uri.https('api.example.com', '/users'),
  headers: {'Content-Type': 'application/json'},
  body: '{"name": "John", "job": "Developer"}',
);

// PUT запрос
var putResponse = await http.put(
  Uri.https('api.example.com', '/users/1'),
  body: {'name': 'Jane'},
);

// DELETE запрос
var deleteResponse = await http.delete(Uri.https('api.example.com', '/users/1'));

Понимание семантики методов важно для корректного проектирования взаимодействия с бэкендом и предсказуемого поведения приложения (например, кэширование для GET).