Какие форматы данных можно использовать в теле POST-запроса?

«Какие форматы данных можно использовать в теле POST-запроса?» — вопрос из категории API тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Тело POST-запроса может передавать данные в различных форматах, указанных в заголовке Content-Type. Основные форматы:

  • application/x-www-form-urlencoded Стандартный формат для HTML-форм. Данные кодируются в виде пар ключ=значение, объединенных амперсандом &. Символы пробела заменяются на +.

    POST /submit HTTP/1.1
    Content-Type: application/x-www-form-urlencoded
    
    name=John+Doe&age=30&city=New+York
  • multipart/form-data Используется для загрузки файлов. Каждая часть данных (поля формы или файлы) разделяется уникальной границей (boundary).

    POST /upload HTTP/1.1
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
    
    ----WebKitFormBoundaryABC123
    Content-Disposition: form-data; name="description"
    
    Profile picture
    ----WebKitFormBoundaryABC123
    Content-Disposition: form-data; name="file"; filename="photo.jpg"
    Content-Type: image/jpeg
    
    [бинарные данные файла]
    ----WebKitFormBoundaryABC123--
  • application/json Наиболее популярный формат для REST API. Данные передаются в структурированном JSON-виде.

    POST /api/users HTTP/1.1
    Content-Type: application/json
    
    {
      "name": "John Doe",
      "age": 30,
      "city": "New York"
    }
  • text/xml или application/xml Используется в SOAP API и некоторых legacy-системах.

    POST /soap/service HTTP/1.1
    Content-Type: text/xml
    
    <user>
      <name>John Doe</name>
      <age>30</age>
    </user>

Выбор формата зависит от требований API: multipart/form-data — для файлов, application/json — для структурированных данных в современных API, x-www-form-urlencoded — для простых форм.