Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

JSON JS: HTTP Server

Попробуем задать себе вопрос: кто является пользователем нашего проекта The Phonebook?

Пользователи

В этом случае наш проект должен представлять из себя классический сайт, с удобным интерфейсом, работающий под разными устройствами и браузерами. Этим мы обязательно займёмся, но в другой раз.

Другие сервисы

В такой ситуации требования резко изменяются. Роботам без разницы то, как выглядят данные, им ничего, кроме самих данных, собственно, и не нужно. Сервисы такого плана предоставляют так называемый api (эй-пи-ай), что расшифровывается как application programming interface. В случае с http это набор урлов, по которым мы можем получить необходимые данные либо изменить их. Главное требование к api состоит в том, чтобы данные отдавались в машиночитаемом представлении, в идеале не зависящем от конкретного языка или платформы.

Разберёмся в том, что это означает. Если мы возьмём html, то про него можно сказать следующее:

  • Задает структуру представления информации;
  • Совсем немного определяет семантику (html5, scheme);
  • Может содержать ошибки, что допускается браузерами, но совершенно не подходит для программного интерфейса;
  • Меняется хаотично, а нам не хотелось бы, чтобы сервис падал, потому что верстальщик поправил теги на странице;
  • Содержит только то, что нужно для вывода, а программный интерфейс часто требует дополнительных данных.

Как видно, html не подходит на роль формата обмена между сервисами, но зато подходит json.

Media Type

При передаче контента по интернету мы должны явно специфицировать, какого типа этот контент. Достигается это использованием заголовка content-type. А вот значение, которое можно туда подставить, не является произвольным. Существует такое понятие, как media type (раньше – MIME type), которое представляет из себя строковой идентификатор. Для json он выглядит так: application/json.

HTTP

(request, response) => {
  const result = /* ... */;

  response.setHeader(
    'Content-Type', 'application/json'
  );
  response.write(JSON.stringify(result));
  response.end();
}

Как видно из примера выше, кроме сериализации данных в json мы так же установили заголовок, указывающий на то, какого типа наш контент. Для этого пришлось воспользоваться интерфейсной функцией объекта response - setHeader.

Curl

При выполнении запроса к серверу мы должны указывать тип формата, в котором хотим получить ответ. С помощью curl это делается так:

curl -H "Accept: application/json" localhost:4000/users

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты.

Ошибки, сложный материал, вопросы >
Нашли опечатку или неточность?

Выделите текст, нажмите ctrl + enter и отправьте его нам. В течение нескольких дней мы исправим ошибку или улучшим формулировку.

Что-то не получается или материал кажется сложным?

Загляните в раздел «Обсуждение»:

  • задайте вопрос. Вы быстрее справитесь с трудностями и прокачаете навык постановки правильных вопросов, что пригодится и в учёбе, и в работе программистом;
  • расскажите о своих впечатлениях. Если курс слишком сложный, подробный отзыв поможет нам сделать его лучше;
  • изучите вопросы других учеников и ответы на них. Это база знаний, которой можно и нужно пользоваться.
Об обучении на Хекслете

Для полного доступа к курсу нужна профессиональная подписка

Профессиональная подписка откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
900
упражнения
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно.

  • 120 курсов, 2000+ часов теории
  • 900 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы

С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.

Иконка программы Node.js-разработчик
Профессия
Разработка бэкенд-компонентов веб-приложений
22 сентября 8 месяцев

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг»