--- title: Что строим description: Учебный SDK почты с HTTP- и браузерной линиями на одном локальном сайте. freshness: false --- В этом разделе мы соберём SDK для учебного сервиса «Почта» на `mail.example`. Имя и домен вымышлены, а форма входа, список писем и токен в HTML взяты из настоящего почтового API. Код работает локально и не обращается к внешнему сервису. Один сайт обслуживает две линии. HTTP-линия вызывает JSON API, браузерная заполняет формы и читает признаки страниц. Они используют общие аккаунты, сессии и письма, поэтому результат можно сверять между транспортами. ## Что в примере учебное | Часть сайта | Основа | Зачем она нужна в разборе | |---|---|---| | Конверт ответа с `status` и `body` | Форма настоящего API | Показать варианты типизированного ответа | | Токен в HTML страницы входящих | Форма настоящего API | Передать браузерную сессию HTTP-клиенту | | Смещение и лимит списка писем | Форма настоящего API | Разобрать пагинацию со смещением | | Краткие данные пользователя через `GET /api/v1/user/short` | Форма настоящего API | Проверить сессию отдельным запросом | | Проверка TLS-отпечатка клиента | Форма настоящего API | Объяснить выбор `curl_cffi` | | Вход в два шага и переход ко второму фактору | Форма настоящего API | Разобрать несколько страниц одного входа | | Тост, диалог и отсутствие признака после отправки | Форма настоящего API | Различить три исхода композера | | Капча во время входа | Учебное добавление | Показать решатель и повтор шага | | Курсор и готовая ссылка следующей страницы | Учебное добавление | Сравнить три стратегии пагинации | | Подпись и шифрование отправки | Учебное добавление | Показать клиентскую подготовку запроса | | Отдельные исходы блокировки и неизвестного аккаунта | Учебное добавление | Разобрать отказы на точных признаках | :::::{tab-set} :sync-group: transport ::::{tab-item} HTTP :sync: http HTTP-линия обращается к сайту через клиент Eazy SDK. Все ответы входа, сессии и писем приходят от одного `MailSite`. | Метод и путь | Задача | |---|---| | `POST /login/identify` | Найти аккаунт и начать вход | | `POST /login/password` | Проверить пароль или запросить капчу | | `POST /login/otp` | Проверить второй фактор и выдать сессию | | `POST /api/v1/session/refresh` | Обновить истёкшую сессию | | `GET /api/v1/user/short` | Получить текущего пользователя | | `GET /api/v1/client/fingerprint` | Проверить TLS-отпечаток клиента | | `GET /api/v1/threads/status/smart` | Прочитать письма с пагинацией | | `POST /api/v1/messages/send` | Отправить подписанное письмо | | `GET /api/v1/messages/sent` | Найти письмо после неопределённого исхода | В следующих главах эти ручки станут отдельными операциями и роутерами. :::: ::::{tab-item} Браузер :sync: browser Браузерная линия видит те же данные через страницы. Переходы между формами становятся типизированными состояниями SDK. | Страница или признак | Задача | |---|---| | `/login/` и поле `email` | Ввести адрес аккаунта | | Страница с полем `password` | Отправить пароль | | `/login/otp` и поле `code` | Подтвердить второй фактор | | Страница с `data-page="captcha"` | Решить капчу и повторить текущий шаг | | `/inbox/` и `data-page="mailbox"` | Подтвердить вход и прочитать токен сессии | | Коллекция `data-collection="messages"` | Получить письма и подгрузить следующую часть | | `/compose/` и форма `data-composer` | Отправить письмо и различить три исхода | Подпись и шифрование выполняет JavaScript самой учебной страницы. Браузерная операция управляет формой и читает исход; клиентское преобразование Eazy SDK разберёт HTTP-линия. :::: ::::: ## Как читать разбор Выбор вкладки сохраняется между главами. Начните с привычного транспорта, а второй открывайте, когда нужно сравнить объявления или передать сессию из браузера HTTP-клиенту. Каждый фрагмент берётся из запускаемого файла в `examples/mail/`. Код сайта и тестовая обвязка остаются за пределами страницы; рядом с примером будут только запрос, ответ и фактический вывод. ## Дальше - {doc}`Сверьте первый HTTP-запрос `. - {doc}`Посмотрите основные понятия SDK `.