Как сделать эндпоинт корректно для веб?

  • Автор темы Автор темы Gandliar
  • Дата начала Дата начала

Gandliar

Lotus Team
16.02.2004
590
26
Добрый день!

Хочу сделать функционал личного кабинета под веб.

Подскажите, пожалуйста, какие нынче варианты есть, для получения json и файлов, чтобы было быстро и надежно.

лотусовый агент принимает в documentContext в поле request_content post запросы
содержание можно перекодировать частично, чтобы получить русские символы, но неясно как получить эмоджи если они есть в тексте.
или что то не так делаю?
с файлами тоже какая то беда, через агент не получается лотус ломает байты
делать через прием форм?
или тут только сервлет нужен?

Заранее благодарю за ответ или хотя бы направление куда копать.
 
да несколько путей
1. делаете не на domino
2. используете nomad
3. Читаем контент товарища: NetWood и соседнюю веткb про web-разработку.
4. изобретаем что-то своё
 
Для тех, кому интересно решение.

Для json эндпоинта, при отправке из браузера, кодируем unicode символы перед отправкой.
Далее в агенте NotesJsonNavigator из поля request_content все прекрасно считывает.



JavaScript:
/**
 * Превращает любую Unicode-строку в чистый ASCII JSON,
 * заменяя все не-ASCII символы на \uXXXX.
 * Полностью повторяет поведение Telegram Bot API.
 *
 * Покрывает:
 * - кириллицу
 * - все символы U+007F–U+FFFF
 * - суррогатные пары (эмодзи, дополнительные плоскости)
 */
function escapeUnicode(str) {
  return str.replace(
    /[\u007F-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
    ch => {
      // Если символ состоит из двух кодовых единиц — это суррогатная пара (эмодзи)
      if (ch.length === 2) {
        const high = ch.charCodeAt(0).toString(16).padStart(4, "0");
        const low  = ch.charCodeAt(1).toString(16).padStart(4, "0");
        return "\\u" + high + "\\u" + low;
      }

      // Обычный символ BMP
      return "\\u" + ch.charCodeAt(0).toString(16).padStart(4, "0");
    }
  );
}


JavaScript:
const rawJson = JSON.stringify(jsonData);
const escapedJson = escapeUnicode(rawJson);

await fetch("/api/cabinet/profile/save", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: escapedJson
});
 
Последнее редактирование:
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab