Работа с типом содержимого application / json в Deno

Вступление

Тела HTTP-запроса и ответа могут быть в различных форматах, таких как двоичный, текстовый, JSON, составные данные формы, urlencoded и т. Д. Несомненно, наиболее популярным типом контента является application / json (или просто JSON). JSON (JavaScript Object Notation) - это формат данных, не зависящий от языка. Он был получен из JavaScript, но многие современные языки программирования поставляются со встроенными библиотеками для генерации и анализа данных в формате JSON. Это де-факто стандарт обмена информацией в большинстве вызовов API. За исключением некоторых особых случаев, таких как загрузка файлов и отправка HTML-форм, типом данных по умолчанию, скорее всего, будет JSON.

В этой краткой статье мы увидим, как работать с JSON в двух ситуациях:

  • Настройка : как установить JSON в объекты запроса и ответа
  • Получение : как получить JSON из объектов запроса и ответа

Настройка JSON происходит в двух случаях использования:

  • Настройка в запросе: вызов API извлечения с телом запроса, содержащим тело в кодировке JSON (например, запрос POST с телом)
  • Настройка в ответе : сервер отвечает телом ответа, содержащим тело в кодировке JSON.

Несмотря на то, что JSON является очень популярным форматом данных, стандартный веб-формат тела не поддерживает его напрямую (не для настройки по крайней мере). Другими словами, невозможно передать объект JavaScript напрямую объекту запроса / ответа. Поддерживаемые форматы тела:

Blob | BufferSource | FormData | URLSearchParams | ReadableStream<Uint8Array> | string

Чтобы установить тело JSON, нужно выполнить два шага:

  • Объект JavaScript должен быть преобразован в строку. Когда строка готова, ее можно передать объекту запроса / ответа.
  • Установите заголовок типа содержимого в application / json

const body={
    a: 'b',
    c: 10
};
const res=await fetch('http://localhost:5000', {
    method: 'POST', 
    body: JSON.stringify(body), 
    headers: {
        'content-type': 'application/json'
    }
});
//Request headers:
content-length: 16
content-type: application/json
//Request body:
{"a":"b","c":10}

const listener = Deno.listen({ port: 5000 });
for await(const conn of listener) {
    for await(const req of Deno.serveHttp(conn)) {
        const body={
            a: 'b',
            c: 10
        };
        req.respondWith(new Response(JSON.stringify(body), {
            headers: {
                'content-type': 'application/json'
            }
        }));
    }
}
//Response headers:
content-length: 16
content-type: application/json
//Response body:
{"a":"b","c":10}

Получение JSON также происходит в двух случаях использования:

  • Получение из ответа : ответ API извлечения, содержащий тело JSON
  • Получение из запроса : сервер, получающий HTTP-запрос, содержащий тело JSON.

Чтобы получить объект JavaScript из полученного тела, необходимо использовать функцию json (). Эта функция присутствует как в объектах запроса, так и в ответах. Эта функция выполняет синтаксический анализ тела запроса JSON и возвращает объект JavaScript.

Вот пример получения объекта JavaScript из ответа выборки в кодировке JSON:

const res=await fetch('http://localhost:5000');
const f=await res.json();
//Response headers:
content-length: 16
content-type: application/json
//Response body: 
//f:
{ a: "b", c: 10 }

const listener = Deno.listen({ port: 5000 });
for await(const conn of listener) {
    for await(const req of Deno.serveHttp(conn)) {
        const f=await req.request.json();
        req.respondWith(new Response());
    }
}
//curl command
curl http://localhost:5000 -d '{"a": "b", "c": 10}' -H 'content-type: application/json'
//Request headers:
content-Length: 19
content-type: application/json
//Request body:
//f:
{ a: "b", c: 10 }

Suggested posts

Deno vs Java: сравнение производительности собственного HTTP-сервера для примера «Hello World»

Deno vs Java: сравнение производительности собственного HTTP-сервера для примера «Hello World»

Недавние статьи о сравнении производительности стали довольно популярными в среднем сообществе. Изначально я сравнил родной сервер Node/Deno/Bun со SpringBoot.

Nx 15.8 — Rust Hasher, Nx Console для IntelliJ, Deno, Node и Storybook

Nx 15.8 — Rust Hasher, Nx Console для IntelliJ, Deno, Node и Storybook

Всего через несколько недель после выпуска Nx 15.7 (выпуск видео здесь) команда Nx запустила Nx 15.

Related posts

Отслеживайте кого угодно только по номеру телефона | OSINT-расследование

Отслеживайте кого угодно только по номеру телефона | OSINT-расследование

Вы можете быть исследователем OSINT, игроком CTF или просто тем, кто получает спам-звонки. Кто-то, кто пытается проверить номер, который вы видели в рекламе.

Всегда ли искусство аполитично?

Всегда ли искусство аполитично?

Вчера мы закрыли двери конкурса песни «Евровидение» в этом году блестящим, хаотичным грандиозным финалом, в котором шведская певица Лорин забрала домой трофей, став первой женщиной, выигравшей дважды, и вернув корону Швеции спустя 50 лет после того, как ABBA выиграла конкурс. с «Ватерлоо». Они стали одним из крупнейших исполнителей в каноне поп-музыки.

Два года в дизайне: хорошее, плохое и уродливое…

Два года в дизайне: хорошее, плохое и уродливое…

«Привет, Siri, включи Me Dive Оливии Дин». В мае 2021 года я начал стажировку в Future Academy Africa в Акуре, Нигерия.

Как спасти планету и заработать деньги

Как спасти планету и заработать деньги

Сколько раз вы, не задумываясь, выбрасывали пластиковую бутылку, стеклянную банку, алюминиевую банку или пакет экологически чистой энергии? Сколько раз вы хотели получить что-то взамен за их переработку? Если вы похожи на большинство людей, ответ, вероятно, много раз. Переработка часто рассматривается как хлопотное дело, рутинная работа или обязанность, не приносящая немедленных или ощутимых выгод.