Попробуем задать себе вопрос: кто является пользователем нашего проекта 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
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты