<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Мария</title><generator>teletype.in</generator><description><![CDATA[Мария]]></description><image><url>https://img3.teletype.in/files/6a/98/6a984603-92c2-4412-951f-88e480995d0b.png</url><title>Мария</title><link>https://teletype.in/@stoic_ftr</link></image><link>https://teletype.in/@stoic_ftr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/stoic_ftr?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/stoic_ftr?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 13 May 2026 09:26:18 GMT</pubDate><lastBuildDate>Wed, 13 May 2026 09:26:18 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/JafSEiPNKgf</guid><link>https://teletype.in/@stoic_ftr/JafSEiPNKgf?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/JafSEiPNKgf?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>Релизные процессы. Простыми словами про управление релизами.</title><pubDate>Fri, 28 Feb 2025 06:55:28 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/a8/15/a815e3a2-503f-4e0e-9707-900846bd74c2.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/a4/8a/a48a0b87-6c78-4179-b1b7-b151bd12681d.png"></img>В мире современных приложений нельзя просто взять и выложить обновление, не продумав процесс. Если выпустить сырую версию, пользователи столкнутся с ошибками, поставят низкие оценки, а компания может потерять репутацию. Именно поэтому существует управление релизами – это процесс планирования, тестирования и выпуска обновлений, который позволяет избежать хаоса.]]></description><content:encoded><![CDATA[
  <p id="pWup">В мире современных приложений нельзя просто взять и выложить обновление, не продумав процесс. Если выпустить сырую версию, пользователи столкнутся с ошибками, поставят низкие оценки, а компания может потерять репутацию. Именно поэтому существует управление релизами – это процесс планирования, тестирования и выпуска обновлений, который позволяет избежать хаоса.</p>
  <figure id="DVpq" class="m_column">
    <img src="https://img3.teletype.in/files/a4/8a/a48a0b87-6c78-4179-b1b7-b151bd12681d.png" width="1000" />
  </figure>
  <h2 id="Ng6S">Что такое управление релизами?</h2>
  <p id="R1eb">Управление релизами – это организация процесса выпуска новых версий программного обеспечения. Включает в себя пять основных этапов:</p>
  <ol id="oAyi">
    <li id="yGSc"><strong>Планирование</strong> – определяем, когда и что будем выпускать.</li>
    <li id="3VUi"><strong>Сборка</strong> – объединяем и тестируем код.</li>
    <li id="79UF"><strong>Пользовательское тестирование</strong> – проверяем, удобно ли пользователям.</li>
    <li id="y2n2"><strong>Подготовка к релизу</strong> – финальные правки и контроль качества.</li>
    <li id="eiYa"><strong>Развёртывание</strong> – постепенный запуск новой версии для пользователей.</li>
  </ol>
  <p id="PoFZ">В больших командах этот процесс требует чёткого управления и координации.</p>
  <p id="bjV9"></p>
  <h2 id="oIrj">Планирование релиза</h2>
  <h3 id="mEDF">Что такое &quot;трейн-релиз&quot; и почему он важен?</h3>
  <p id="0OHT">Вместо того чтобы выпускать обновления хаотично, можно организовать их по расписанию – как расписание поездов. Так работают &quot;трейн-релизы&quot;. Каждое обновление готовится к заранее определённой дате. Если какая-то функция не готова, она просто переносится на следующий поезд (релиз), а не задерживает весь процесс.</p>
  <p id="FiYL">Пример расписания релиза:</p>
  <ul id="e27d">
    <li id="gnbE"><strong>День 1:</strong> Остановка изменений (&quot;отсечение&quot;) – команды прекращают вносить новые функции, начинается тестирование.</li>
    <li id="Thno"><strong>Дни 2-4:</strong> Внутреннее тестирование.</li>
    <li id="QsQ7"><strong>Дни 5-7:</strong> Ограниченный выпуск (1% пользователей).</li>
    <li id="gU0r"><strong>Дни 8-10:</strong> Полный выпуск.</li>
  </ul>
  <p id="4GMm">Это позволяет избежать сюрпризов и снижает риск критических ошибок.</p>
  <p id="Pmov"></p>
  <h2 id="I2SZ">Сборка релиза и работа с ветками кода</h2>
  <h3 id="7rjd">Как управлять версиями кода?</h3>
  <p id="BKF3">Во время разработки код хранится в системе управления версиями (например, Git). Чтобы не мешать текущей работе, создаются отдельные ветки:</p>
  <ul id="mn9A">
    <li id="4YtQ"><strong>Ветка разработки (Development)</strong> – здесь программисты создают новые функции.</li>
    <li id="fZpd"><strong>Ветка релиза (Release)</strong> – сюда попадают только проверенные изменения перед выпуском.</li>
    <li id="BxNq"><strong>Горячие исправления (Hotfixes)</strong> – экстренные правки для уже выпущенных версий.</li>
  </ul>
  <p id="JdAq">Такой подход помогает изолировать ошибки и не мешает разработчикам работать над следующими обновлениями.</p>
  <p id="UKwL"></p>
  <h2 id="lu9P">Основные подходы к релизному процессу</h2>
  <p id="Z5P8">Релизное управление можно организовать по-разному, в зависимости от требований бизнеса и архитектуры продукта. Рассмотрим ключевые стратегии.</p>
  <h4 id="7kef">1. <strong>Традиционные модели релиза</strong></h4>
  <ul id="D9kK">
    <li id="YR1a"><strong>Waterfall (Каскадная модель)</strong> – предполагает последовательное выполнение этапов: анализ требований, проектирование, разработка, тестирование и внедрение. Применяется в средах с жесткими регуляторными требованиями (например, в финансовом секторе).</li>
    <li id="JjxI"><strong>Release Train (Релизный поезд)</strong> – методология, при которой релизы выходят по заранее заданному расписанию, даже если часть функций не готова. Это позволяет добиться высокой предсказуемости поставок.</li>
  </ul>
  <h4 id="mQLN">2. <strong>Гибкие и DevOps-ориентированные подходы</strong></h4>
  <ul id="LIlY">
    <li id="zWcB"><strong>Continuous Integration/Continuous Deployment (CI/CD)</strong> – процесс, при котором код непрерывно интегрируется, тестируется и автоматически разворачивается в продакшн. Используется в высококонкурентных средах, требующих быстрой доставки изменений.</li>
    <li id="vBT9"><strong>Feature Flags (Флаги функциональности)</strong> – позволяют выпускать код в продакшн, но скрывать новые возможности, пока они не будут готовы к активации.</li>
    <li id="aXPD"><strong>Canary Releases (Канареечные релизы)</strong> – метод развертывания, при котором новая версия сначала выкатывается на небольшой процент пользователей, а затем постепенно распространяется на всю аудиторию.</li>
  </ul>
  <p id="wzCB"></p>
  <h2 id="3BUd">Приемочное тестирование (UAT). Зачем тестировать с пользователями?</h2>
  <p id="Shjw">Программисты и тестировщики могут не заметить проблем, которые видны обычным пользователям. Поэтому перед официальным выпуском проводится <strong>пользовательское приемочное тестирование (User Acceptance Testing, UAT)</strong>. Оно отвечает на вопросы:</p>
  <ul id="3jAC">
    <li id="yHcB">Удобно ли пользователям работать с приложением?</li>
    <li id="pp9L">Всё ли понятно?</li>
    <li id="dAAj">Работает ли приложение так, как ожидается?</li>
  </ul>
  <p id="yBLr">Чтобы ускорить процесс, можно использовать специальные инструменты тестирования, например, Google Play Internal Testing, которые позволяют ограниченной группе пользователей протестировать приложение и оставить отзывы.</p>
  <p id="hEDZ"></p>
  <h2 id="dKVU">Развёртывание релиза. Почему релиз делают постепенно?</h2>
  <p id="t8Hb">Вместо того чтобы сразу выпустить обновление для всех, используется поэтапное развёртывание:</p>
  <ul id="aVlx">
    <li id="PMSD">Сначала <strong>1%</strong> пользователей получает обновление.</li>
    <li id="Zugx">Если всё хорошо, доля увеличивается до <strong>20%</strong>, затем <strong>50%</strong>, и только потом до <strong>100%</strong>.</li>
  </ul>
  <p id="zxLH">Так можно быстро остановить выпуск, если обнаружится критическая ошибка.</p>
  <h2 id="6K3E"></h2>
  <h2 id="pxad">Анализ после релиза</h2>
  <p id="MZOV">После выпуска обновления важно отслеживать его работу. Используются инструменты мониторинга, например, <strong>Firebase Crashlytics</strong>, которые показывают, где и у каких пользователей возникли ошибки.</p>
  <p id="3TBe">Также полезно читать отзывы в Google Play и App Store. Они помогают понять, довольны ли пользователи и что можно улучшить в следующем обновлении.</p>
  <h2 id="7Zda"></h2>
  <h2 id="eZUX">Итоги</h2>
  <p id="no6p">Управление релизами – это не просто кнопка &quot;Опубликовать&quot;, а целый процесс, который помогает выпускать качественные обновления без стресса. Хорошо организованный процесс:</p>
  <ul id="yJO7">
    <li id="Kfa6">Улучшает координацию работы команды.</li>
    <li id="uEaN">Позволяет выпускать обновления быстрее и безопаснее.</li>
    <li id="ivlC">Делает продукт стабильнее и удобнее для пользователей.</li>
  </ul>
  <p id="EJMB">Чем лучше выстроен процесс, тем проще разработчикам, менеджерам и пользователям! </p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/yj84e4NBdST</guid><link>https://teletype.in/@stoic_ftr/yj84e4NBdST?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/yj84e4NBdST?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>RBAC и ABAC. От простого к сложному.</title><pubDate>Tue, 25 Feb 2025 08:55:29 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6c/ab/6cabc349-fb5c-4711-95d1-16214e7012a7.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/81/21/81213fa2-64fe-4e25-b6be-98de50c24e76.png"></img>Для контроля доступа пользователей применяются различные модели управления доступом. Из них две самых распространённые — RBAC (Role-Based Access Control) и ABAC (Attribute-Based Access Control). Давайте рассмотрим их по очереди, начиная с более простых примеров.]]></description><content:encoded><![CDATA[
  <p id="I7qW">Для контроля доступа пользователей применяются различные модели управления доступом. Из них две самых распространённые — <u>RBAC</u> (<u>Role-Based Access Control</u>) и <u>ABAC</u> (<u>Attribute-Based Access Control</u>). Давайте рассмотрим их по очереди, начиная с более простых примеров.</p>
  <figure id="4IUI" class="m_column">
    <img src="https://img1.teletype.in/files/81/21/81213fa2-64fe-4e25-b6be-98de50c24e76.png" />
  </figure>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h3 id="xsOH">Что такое RBAC (Ролевой контроль доступа)?</h3>
  </section>
  <p id="RkVn"><br />RBAC роли-ориентирован. У каждого пользователя одна или несколько ролей, а у ролей есть разрешения. Если у пользователя есть нужная роль, он получает доступ.</p>
  <p id="8pk8"><br />Простой пример: Представьте офис. В офисе три роли:</p>
  <ul id="emRi">
    <li id="8y7Z">Сотрудник -- может открывать офисные двери и пользоваться принтером</li>
    <li id="zsBS">Менеджер -- кроме прав сотрудника, может подписывать документы</li>
    <li id="mJVk">Директор -- имеет все права менеджера и может нанимать или увольнять сотрудников</li>
  </ul>
  <p id="ID82">Если Оля является менеджером, то у неё есть доступ к принтеру, подписи документов, но не к увольнению сотрудников.</p>
  <h3 id="xMsR"><br />Основные особенности RBAC:</h3>
  <ul id="WARC">
    <li id="qNWs">Упрощение управления доступом: добавляем пользователя в роль -- он получает все разрешения этой роли</li>
    <li id="retC">Жёсткие связи: если роли плохо спланированы, может потребоваться создавать новые роли для каждой уникальной ситуации</li>
  </ul>
  <p id="zdmd"></p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <h3 id="8IqX">Что такое ABAC (Атрибутный контроль доступа)?</h3>
  </section>
  <p id="sN8r">ABAC использует атрибуты пользователя, ресурса и среды для того, чтобы сделать решение о доступе.</p>
  <p id="ohbx"></p>
  <p id="cMRk">Простой пример: Возьмем тот же офис. </p>
  <ul id="if5E">
    <li id="7CLp">Сотрудник может использовать принтер только в рабочее время</li>
    <li id="J1H6">Менеджер может подписывать документы, если это его отдел</li>
    <li id="0wtx">Директор может увольнять сотрудников, но только если он сам находится в офисе</li>
  </ul>
  <p id="auMd">Теперь не важно, что играет роль Оля -- значимы её атрибуты (позиция, время, место).</p>
  <p id="eX0r"></p>
  <h3 id="C0zW">Основные особенности ABAC:</h3>
  <ul id="tePv">
    <li id="j3d3">Состоятельность: доступ не определяется исключительно ролями, но и контекстом</li>
    <li id="zYz3">Наслоение настройки: приходится рассуждать о многочисленных условиях и атрибутах</li>
  </ul>
  <p id="wG9d"></p>
  <h3 id="sXjk">Сравнение RBAC и ABAC</h3>
  <figure id="dwzs" class="m_original">
    <img src="https://img4.teletype.in/files/ff/fc/fffca248-6578-40cc-aa28-6bddbecdf964.png" width="719" />
  </figure>
  <p id="DcTf">RBAC отлично подходит для небольших и средних компаний с чёткой иерархией. ABAC полезен для больших систем, где доступ зависит от множества факторов.</p>
  <p id="ths7"></p>
  <h3 id="H05L">На практике: </h3>
  <p id="Pqdg">часто используют гибридный подход:</p>
  <ul id="ahe1">
    <li id="Hezj">RBAC определяет основные роли и базовые разрешения.</li>
    <li id="mw6R">ABAC добавляет гибкость за счёт условий (например, доступ возможен только в определённое время или из определённого места).</li>
  </ul>
  <p id="yc0e">Например, в больнице врач может просматривать истории болезней пациентов (RBAC), но только если он лечащий врач пациента (ABAC).</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/-YjQVVkfN6T</guid><link>https://teletype.in/@stoic_ftr/-YjQVVkfN6T?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/-YjQVVkfN6T?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>Как написать классное техническое задание за 5 шагов и избежать хаоса</title><pubDate>Fri, 06 Dec 2024 16:09:52 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/ce/e8/cee8e384-08e1-45f1-8c13-4d2a0b9813d9.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/26/04/2604a7ea-84ec-41fb-aac5-2d6197cbeb93.png"></img>Представьте себе: вы собрались разработать крутое приложение, которое завоюет сердца пользователей. Вы наняли топовую команду, бюджет есть, вдохновение бьёт ключом… Но что-то пошло не так. Идут споры, сроки горят, а результат не похож на то, что вы представляли. В чём проблема? Всё просто: не было понятного и подробного технического задания!]]></description><content:encoded><![CDATA[
  <figure id="Gv0u" class="m_column">
    <img src="https://img3.teletype.in/files/26/04/2604a7ea-84ec-41fb-aac5-2d6197cbeb93.png" width="1020" />
  </figure>
  <p id="XDZC">Представьте себе: вы собрались разработать крутое приложение, которое завоюет сердца пользователей. Вы наняли топовую команду, бюджет есть, вдохновение бьёт ключом… Но что-то пошло не так. Идут споры, сроки горят, а результат не похож на то, что вы представляли. В чём проблема? Всё просто: не было понятного и подробного технического задания!</p>
  <p id="pQmf">Не переживайте, сейчас мы всё исправим. Вот рецепт идеального ТЗ в 5 шагов.</p>
  <p id="oBHb"></p>
  <h3 id="bIZM"><strong>Шаг 1: Задайте правильные вопросы</strong></h3>
  <p id="SXtB">Техническое задание — это карта сокровищ, где X отмечает конечную цель. Чтобы нарисовать карту, начните с вопросов:</p>
  <ul id="7H0a">
    <li id="NWEd"><strong>Зачем?</strong> Например: &quot;Мы хотим сделать приложение TODO, чтобы пользователи могли планировать свои задачи&quot;.</li>
    <li id="vA6x"><strong>Для кого?</strong> Например: &quot;Для занятых профессионалов, которые ценят простоту и скорость&quot;.</li>
    <li id="h51h"><strong>Что именно?</strong> Например: &quot;Приложение должно напоминать, синхронизироваться между устройствами и работать оффлайн&quot;.</li>
    <li id="HLRs"><strong>Какие ограничения?</strong> Например: &quot;Сделать за три месяца, не превышая бюджет в $20 000&quot;.</li>
  </ul>
  <p id="dV1a"></p>
  <h3 id="sm30"><strong>Шаг 2: Опишите, как это будет работать</strong></h3>
  <p id="qfeA">Здесь начинается магия. Вам нужно расписать функции и возможности вашего продукта так, чтобы у разработчиков не осталось вопросов.</p>
  <p id="2RzI"><strong>Функциональные требования для TODO-приложения:</strong></p>
  <ol id="kE8T">
    <li id="4auc">Создание задач с датой и временем выполнения.</li>
    <li id="wz79">Уведомления о приближении срока задачи.</li>
    <li id="V6UO">Возможность ставить задачи в категории (Работа, Дом, Спорт).</li>
    <li id="PePu">Синхронизация данных через облако.</li>
    <li id="4297">Поддержка оффлайн-режима.</li>
  </ol>
  <p id="6gtp"><strong>Нефункциональные требования:</strong></p>
  <ul id="dEJw">
    <li id="WHdo">Приложение должно работать на iOS и Android.</li>
    <li id="uaD9">Интерфейс загружается не дольше 2 секунд.</li>
    <li id="LqwN">Хранение данных должно быть безопасным (GDPR compliance).</li>
  </ul>
  <p id="xARW"></p>
  <h3 id="Eebd"><strong>Шаг 3: Нарисуйте скелет документа</strong></h3>
  <p id="xY0l">Без структуры ваше ТЗ — просто набор текста. Представьте, что читаете роман, где главы перепутаны. Вот пример структуры:</p>
  <ol id="Hi50">
    <li id="8MtY">Введение (краткое описание проекта).</li>
    <li id="4Z2S">Область применения (для кого, зачем).</li>
    <li id="qOox">Функциональные и нефункциональные требования.</li>
    <li id="RS1R">Дизайн и пользовательский интерфейс.</li>
    <li id="iCgv">Сроки разработки.</li>
    <li id="XKlG">Приложения (прототипы, схемы).</li>
  </ol>
  <p id="JpY0"></p>
  <h3 id="VoHF"><strong>Шаг 4: Проверьте, что это можно понять</strong></h3>
  <p id="vb97">Покажите ТЗ тому, кто не в теме. Если он не засыпает через 5 минут и может пересказать своими словами, вы справились!</p>
  <p id="paUu"></p>
  <h3 id="HLvB"><strong>Шаг 5: Утвердите документ</strong></h3>
  <p id="TvdP">ТЗ — это не просто текст, это договорённость. Убедитесь, что все стороны подписали его или хотя бы кивнули в Zoom.</p>
  <p id="lIXU"></p>
  <h2 id="FrGn" data-align="center"><strong>Пример полного ТЗ для TODO-приложения</strong></h2>
  <p id="rnzb"><strong>1. Введение</strong><br /><strong>Название проекта</strong>: TODO-Pro.<br /><strong>Цель</strong>: Создать простое и функциональное мобильное приложение для управления задачами, которое поможет пользователям быть продуктивными.<br /><strong>Команда разработки</strong>:</p>
  <ul id="QPvJ">
    <li id="C7gM">Project Manager: Иван Иванов.</li>
    <li id="s1OM">UX/UI-дизайнер: Анна Смирнова.</li>
    <li id="hLwQ">iOS-разработчик: Алексей Петров.</li>
    <li id="eEBM">Android-разработчик: Дмитрий Кузнецов.</li>
    <li id="VHO2">QA-инженер: Елена Васильева.</li>
  </ul>
  <hr />
  <p id="x8Db"><strong>2. Область применения</strong><br />Приложение ориентировано на профессионалов, студентов и занятых родителей, которым нужно организовать свой день. Оно должно быть простым, минималистичным и быстрым.</p>
  <hr />
  <p id="JpsI"><strong>3. Функциональные требования</strong></p>
  <figure id="VYOA" class="m_original">
    <img src="https://img3.teletype.in/files/6e/f6/6ef66532-103b-4494-a345-00c9326aa3df.png" width="724" />
  </figure>
  <p id="sjJ8">4. Нефункциональные требования</p>
  <figure id="6WO9" class="m_original">
    <img src="https://img3.teletype.in/files/6d/38/6d38d738-a4da-4cf2-9260-84b7b486ecad.png" width="720" />
  </figure>
  <p id="vam5"><strong>5. UX/UI</strong></p>
  <ul id="QNXd">
    <li id="W05h">Приложение должно быть минималистичным и удобным.</li>
    <li id="YNee">Цветовая палитра: белый, синий, светло-серый.</li>
    <li id="e76H">Главный экран: список задач с кнопками &quot;Добавить задачу&quot; и &quot;Фильтры&quot;.</li>
  </ul>
  <hr />
  <p id="WVeF"><strong>6. Сроки</strong></p>
  <ol id="7dFe">
    <li id="1xe4">Сбор требований: 2 недели.</li>
    <li id="Bvly">Разработка прототипов: 1 неделя.</li>
    <li id="1JWz">Разработка и тестирование MVP: 2 месяца.</li>
    <li id="NLaS">Релиз: через 3 месяца с момента утверждения ТЗ.</li>
  </ol>
  <hr />
  <p id="pN77"><strong>7. Приложения</strong></p>
  <ul id="0kku">
    <li id="ubR3">Прототипы экранов (ссылка на Figma).</li>
    <li id="NzZc">Диаграмма взаимодействия API.</li>
    <li id="niv0">Список используемых библиотек.</li>
  </ul>
  <p id="qHMb"></p>
  <p id="dRNm">Теперь вы вооружены до зубов. Напишите своё ТЗ и наслаждайтесь процессом разработки без хаоса!</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/mZkVMDa3Vzs</guid><link>https://teletype.in/@stoic_ftr/mZkVMDa3Vzs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/mZkVMDa3Vzs?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>Давайте представим, что меня пригласили...</title><pubDate>Sun, 03 Nov 2024 17:42:26 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/be/d9/bed9875c-aa24-4196-9d92-d048ad9640f8.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/79/ef/79ef4675-ac15-478d-bb8c-dbfc0399acb1.png"></img>Сегодня речь пойдет о выдуманном собеседовании в компанию. Интересный инструмент, которым я иногда пользуюсь, чтобы повышать свои скиллы по прохождению собеседований.]]></description><content:encoded><![CDATA[
  <p id="rQ1d"><strong><em>Сегодня речь пойдет о выдуманном собеседовании в компанию. Интересный инструмент, которым я иногда пользуюсь, чтобы повышать свои скиллы по прохождению собеседований. </em></strong></p>
  <p id="80Co"><strong><em>Что нужно сделать? <br />1. Выбираем рандомную вакансию на hh.ru. <br />2. Читаем требования</em></strong></p>
  <figure id="oy09" class="m_retina">
    <img src="https://img4.teletype.in/files/79/ef/79ef4675-ac15-478d-bb8c-dbfc0399acb1.png" width="585" />
  </figure>
  <p id="OK8N"><strong><em>Отлично! У нас есть список, к которому нужно подготовиться за 3 дня. Почему 3 дня? Это среднее количество времени, которое уходит на то, чтобы ваш отклик был увиден и в случае положительного ответа, вы были бы приглашены на интервью.</em></strong></p>
  <p id="Ubke"><strong><em>Давайте распишем план подготовки. Поделюсь своими заметками в данном случае. </em></strong></p>
  <figure id="AQwY" class="m_retina">
    <img src="https://img1.teletype.in/files/8c/64/8c641af7-69b5-4a93-9ba1-6b571dd1132c.png" width="640" />
  </figure>
  <p id="OZPX"><strong><em>3.Рассматриваем каждый пункт отдельно.</em></strong><br /><strong><em>Вспоминаем все, что было по SQL: </em></strong></p>
  <p id="7GPy"> - SQL для начинающих. DML, DDL, DCL, TCL (<a href="https://telegra.ph/SQL-dlya-nachinayushchih-DML-DDL-DCL-TCL-09-13" target="_blank">https://telegra.ph/SQL-dlya-nachinayushchih-DML-DDL-DCL-TCL-09-13</a>)</p>
  <p id="3luc"> - SQL для начинающих. Функции и операторы (<a href="https://telegra.ph/SQL-dlya-nachinayushchih-Funkcii-i-operatory-09-14" target="_blank">https://telegra.ph/SQL-dlya-nachinayushchih-Funkcii-i-operatory-09-14</a>)</p>
  <p id="rMDI"> - Условия и способы фильтрации данных (<a href="https://teletype.in/@stoic_ftr/1e4_TPbjaeZ" target="_blank">https://teletype.in/@stoic_ftr/1e4_TPbjaeZ</a>)<br /><br /><strong><em>Этого должно хватить для того, чтобы пройти собес по SQL. Если у вас в вакансии будет строчка <u>включая индексы,</u> то советую прочитать следующие статьи:</em></strong><br /><br />1. <a href="https://habr.com/ru/companies/ruvds/articles/724066/" target="_blank">https://habr.com/ru/companies/ruvds/articles/724066/<br /></a><br />2. <a href="https://habr.com/ru/articles/247373/" target="_blank">https://habr.com/ru/articles/247373/</a><br /><br /><strong><em>Читаем дальше. Описание контрактов интеграций (REST, ESB) </em></strong></p>
  <p id="2y3X"><strong><em>Для начала выясняем, что такое контракты интеграций (лучше знать точную расшифровку и понятный пример):</em></strong></p>
  <p id="x6C0">Контракты интеграций (integration contracts) — это соглашения или договоренности между системами, сервисами или компонентами, определяющие, как именно они будут взаимодействовать друг с другом. Такие контракты фиксируют, какие данные, форматы и методы будут использоваться для успешного обмена информацией. Цель — гарантировать совместимость и предсказуемость работы систем, даже если одна из них развивается или обновляется.</p>
  <p id="Nuh1">Что включает контракт интеграции?</p>
  <p id="dwd8">Контракт интеграции обычно включает:</p>
  <ul id="rROs">
    <li id="lcde"><strong>Структуру данных</strong>: какие поля будут в передаваемых данных, их типы и значения по умолчанию.</li>
    <li id="GsFu"><strong>Форматы данных</strong>: формат обмена, например JSON, XML, Protobuf и др.</li>
    <li id="atU7"><strong>Протоколы</strong>: определяет, как данные будут передаваться — через REST API, GraphQL, gRPC и т.д.</li>
    <li id="AmIt"><strong>Ограничения</strong>: валидность данных, например, минимальные и максимальные значения.</li>
    <li id="Uh6Z"><strong>Версионность</strong>: управление версиями, чтобы можно было обновлять контракт без ломки существующих интеграций.</li>
    <li id="YNEZ"><strong>Обязательные и необязательные поля</strong>: указывает, какие поля должны присутствовать в каждом запросе/ответе, а какие — опциональны.</li>
  </ul>
  <p id="2yzj">Простой пример контракта интеграции</p>
  <p id="Rw0M">Представьте, что у нас есть <strong>интернет-магазин</strong> и <strong>служба доставки</strong>. Чтобы передавать данные о заказах, они заключают контракт интеграции.<br /></p>
  <p id="3wbS">Пример контракта интеграции:</p>
  <ol id="RLyU">
    <li id="uZpp"><strong>Формат обмена</strong>: JSON</li>
    <li id="nyIS"><strong>Протокол</strong>: REST API (через HTTP POST-запросы).</li>
    <li id="wbRv"><strong>Тело запроса</strong>:json</li>
  </ol>
  <p id="nBrR"><code>{<br />  &quot;order_id&quot;: &quot;string (обязательное)&quot;,<br />  &quot;customer_name&quot;: &quot;string (обязательное)&quot;,<br />  &quot;customer_address&quot;: &quot;string (обязательное)&quot;,<br />  &quot;delivery_date&quot;: &quot;string (дата в формате YYYY-MM-DD, обязательное)&quot;,<br />  &quot;items&quot;: [<br />    {<br />      &quot;item_id&quot;: &quot;string (обязательное)&quot;,<br />      &quot;quantity&quot;: &quot;integer (обязательное)&quot;,<br />      &quot;price&quot;: &quot;float (обязательное)&quot;<br />    }<br />  ]<br />}</code></p>
  <ol id="C9Em">
    <li id="jQAg"><strong>Ошибки</strong>: служба доставки возвращает код 400, если обязательные поля отсутствуют или имеют некорректный формат, и код 200 — если заказ принят.</li>
    <li id="GpTN"><strong>Версионность</strong>: параметр <code>v1</code> указывается в URL, чтобы при необходимости службы могли перейти на новую версию, не нарушая старую интеграцию.<br /></li>
  </ol>
  <p id="AQeb">Зачем нужны контракты интеграций?</p>
  <ol id="pZG4">
    <li id="ACmU"><strong>Упрощение разработки</strong>: каждая сторона точно знает, что ожидать.</li>
    <li id="Hyyz"><strong>Предсказуемость изменений</strong>: если одна из систем обновляется, контракт обеспечивает совместимость, и другая сторона не &quot;ломается&quot;.</li>
    <li id="lUQI"><strong>Отслеживание ошибок</strong>: если одна из сторон отправляет некорректные данные, то легко определить источник ошибки.</li>
  </ol>
  <p id="J7j9"><strong>Итог</strong>: контракты интеграций — это четкое соглашение о правилах взаимодействия между системами, позволяющее избегать проблем совместимости и обеспечить предсказуемость и стабильность работы.<br /></p>
  <p id="ncXX"><strong><em>Отлично, что такое контракты интеграций, разобрались. Для лучшего понимания тем, советую прочитать:</em></strong><br /><br />1.Клиент-серверная архитектура. HTTP-запросы, HTTP- ответы (<a href="https://teletype.in/@stoic_ftr/ozO6MBmRYyn" target="_blank">https://teletype.in/@stoic_ftr/ozO6MBmRYyn</a>)<br /><br />2. REST, JSON (<a href="https://teletype.in/@stoic_ftr/5t4UP4M1Uzo" target="_blank">https://teletype.in/@stoic_ftr/5t4UP4M1Uzo</a>)<br /><br />3. В чем разница между REST и SOAP? Что такое SOAP? Самые популярные вопросы на собеседовании (<a href="https://teletype.in/@stoic_ftr/xsV8d9WQ86m" target="_blank">https://teletype.in/@stoic_ftr/xsV8d9WQ86m</a>)<br /><br />4. Postman. Что это? Зачем это? Какой функционал? Когда использовать нужно, а когда не нужно? (<a href="https://teletype.in/@stoic_ftr/tVszPclkTbU" target="_blank">https://teletype.in/@stoic_ftr/tVszPclkTbU</a>)<br /><br /><br /><strong><em>Что такое ESB? В это случае тоже лучше узнать определение и легкий пример. </em></strong></p>
  <p id="1zzc"><strong>ESB (Enterprise Service Bus)</strong> — это инфраструктурная платформа, которая помогает различным приложениям в компании обмениваться данными и работать вместе, даже если они написаны на разных языках программирования, используют разные форматы данных или работают на разных платформах. ESB объединяет их, предоставляя общую «шину» для передачи данных и команд.</p>
  <p id="ySN1">Основные функции ESB:</p>
  <ol id="mUZQ">
    <li id="xDNy"><strong>Интеграция</strong>: подключение разных систем и приложений.</li>
    <li id="BUqZ"><strong>Маршрутизация сообщений</strong>: отправка сообщений между системами на основе определенных правил.</li>
    <li id="I1XU"><strong>Трансформация данных</strong>: преобразование данных из одного формата в другой (например, XML в JSON).</li>
    <li id="b4Zm"><strong>Оркестрация</strong>: управление порядком выполнения сервисов или задач.</li>
    <li id="T9Ng"><strong>Обработка ошибок</strong>: централизованное управление ошибками и журналирование событий.<br /></li>
  </ol>
  <p id="bNGT">Простой пример использования ESB:</p>
  <p id="YwwP">Представьте компанию, у которой есть несколько систем:</p>
  <ol id="LHER">
    <li id="AjWH"><strong>ERP-система</strong> для управления запасами.</li>
    <li id="F1IS"><strong>CRM-система</strong> для работы с клиентами.</li>
    <li id="Iwky"><strong>Интернет-магазин</strong> для онлайн-продаж.</li>
  </ol>
  <p id="CYCi">Эти системы должны обмениваться информацией: если клиент заказывает товар на сайте, информация о заказе должна поступить в CRM для обработки и в ERP для обновления запасов.</p>
  <p id="bcw4"><strong>С ESB</strong> эти системы подключаются к единой шине, через которую передаются сообщения. При оформлении заказа интернет-магазин отправляет информацию о заказе в ESB, которая:</p>
  <ul id="jQG8">
    <li id="shv1"><strong>Маршрутизирует</strong> заказ в CRM для регистрации данных клиента.</li>
    <li id="gzK9"><strong>Преобразует</strong> данные заказа в нужный формат и отправляет в ERP-систему для обновления склада.</li>
  </ul>
  <p id="3w9m">ESB упрощает интеграцию, так как вместо прямых связей между системами (каждая система должна &quot;знать&quot; и интегрироваться с другой) все они просто взаимодействуют с ESB, который уже распределяет и преобразует сообщения.</p>
  <p id="u3C1"><br /><strong><em>Окей, с ESB разобрались. Что это мы знаем, как это используется мы знаем. Можем ли мы за 3 дня получить более глубинные знания? Вряд ли. Записываем это в наш блокнот дальнейших планов развития. Далее у нас идет описание бизнес-процессов в нотации BPMN. Здесь советую посмотреть: Краткий конспект по нотации BPMN 2.0 (<a href="https://teletype.in/@stoic_ftr/HdyLMhiN7sQ" target="_blank">https://teletype.in/@stoic_ftr/HdyLMhiN7sQ</a>)</em></strong></p>
  <p id="nb9x"><strong><em>Что нужно для того, чтобы с уверенностью сказать, что ты сможешь отвечать на вопросы по бизнес/системному анализу? Тут поможет небольшая шпаргалка: </em></strong></p>
  <p id="y3b1">1. <strong>Знание ключевых понятий и подходов</strong></p>
  <ul id="54LO">
    <li id="hLND"><strong>Бизнес-анализ</strong>: Уметь объяснить цели и основные этапы бизнес-анализа, начиная от выявления потребностей бизнеса до разработки рекомендаций и внедрения решений.</li>
    <li id="yKzq"><strong>Системный анализ</strong>: Понимать, как анализировать технические и функциональные требования, а также концепции построения архитектуры и интеграции систем.</li>
  </ul>
  <p id="9Ug3">2. <strong>Опыт работы с основными инструментами и техниками</strong></p>
  <ul id="dnsu">
    <li id="6KTc"><strong>Техники сбора и анализа требований</strong>: интервью, анкетирование, воркшопы, анализ процессов, модели “As-Is” и “To-Be”.</li>
    <li id="RWQP"><strong>Методологии и фреймворки</strong>: Agile (Scrum/Kanban), Waterfall, BABOK. Умение ориентироваться в этих методологиях, знание их плюсов и минусов.</li>
    <li id="ebZF"><strong>Диаграммы и модели</strong>: Умение создавать и читать BPMN, UML (диаграммы классов, последовательностей), ERD, use cases, и user stories.</li>
  </ul>
  <p id="Jm4X">3. <strong>Понимание жизненного цикла разработки ПО и роли анализа в нем</strong></p>
  <ul id="3ga7">
    <li id="I5MV">Понимание того, как требования меняются по мере прохождения через стадии анализа, разработки, тестирования и внедрения. Знание, как работать с изменениями требований (управление изменениями).</li>
  </ul>
  <p id="KloH">4. <strong>Навыки документооборота и разработки требований</strong></p>
  <ul id="emkf">
    <li id="hn7s">Опыт написания различных документов: спецификаций требований (SRS), документации к API, описания процессов, инструкций для пользователей.</li>
    <li id="zWqx">Знание стандартов и шаблонов для документации, таких как IEEE для требований.</li>
  </ul>
  <p id="q0MG">5. <strong>Опыт работы с системами и базами данных</strong></p>
  <ul id="I8YB">
    <li id="1xQR">Базовое понимание SQL и работы с реляционными базами данных.</li>
    <li id="0Thb">Понимание основ архитектуры приложений и систем, работы с API, особенностей REST и SOAP.</li>
  </ul>
  <p id="vGtu">6. <strong>Коммуникативные и аналитические навыки</strong></p>
  <ul id="TIWZ">
    <li id="2FqH">Умение задавать правильные вопросы, выделять ключевые моменты из интервью и требований заказчика, представлять результаты анализа команде и стейкхолдерам.</li>
    <li id="cfEY">Способность упрощать сложные концепции и адаптировать свои объяснения под разную аудиторию.</li>
  </ul>
  <p id="sQCX">7. <strong>Постоянное обучение и практика</strong></p>
  <ul id="4k4Y">
    <li id="6h33">Изучение современных практик, прохождение курсов, чтение специализированной литературы и применение знаний на практике. Например, BABOK Guide для бизнес-анализа, курсы по SQL и базам данных для системного анализа, а также кейсы для закрепления навыков моделирования и анализа.</li>
  </ul>
  <p id="t5Al">Сочетание этих знаний и навыков позволит уверенно и всесторонне подходить к вопросам по бизнес- и системному анализу, а также применять эти знания на практике.</p>
  <p id="eHVO"><em><strong>Ну, и наконец пункт с разработкой проектной, приемо-сдаточной и эксплуатационной документации. Тут проще - нужно просто выучить. </strong></em><br /></p>
  <p id="OTcJ">Проектная, приемо-сдаточная и эксплуатационная документация – это типы документов, которые сопровождают жизненный цикл проекта, особенно когда речь идет о технических системах и разработке программного обеспечения. Для понимания этих видов документации важно знать их назначение, содержание и место в процессе разработки.</p>
  <p id="mb0P">1. <strong>Проектная документация</strong></p>
  <p id="d38Q"><strong>Назначение</strong>: Проектная документация описывает архитектуру, логику и принципы построения системы. Она создается на этапе проектирования и используется для утверждения проектных решений с заказчиком и командой разработки.</p>
  <p id="Mnyw"><strong>Основные компоненты</strong>:</p>
  <ul id="LbgU">
    <li id="FtDG"><strong>Техническое задание (ТЗ)</strong>: содержит цели и задачи проекта, требования к функциональности, сроки и бюджет.</li>
    <li id="AVsd"><strong>Спецификация требований (SRS)</strong>: документирует требования к системе. Охватывает функциональные, нефункциональные и системные требования.</li>
    <li id="gLKg"><strong>Архитектурная документация</strong>: описывает архитектуру системы, используемые технологии, компоненты, их взаимодействие и интеграции.</li>
    <li id="defW"><strong>Диаграммы и схемы</strong>: UML, DFD (Data Flow Diagrams) или другие схемы, которые показывают структуру системы, связи между компонентами и основную логику.</li>
    <li id="gZ3M"><strong>План тестирования</strong>: основные подходы к тестированию, контрольные точки и критерии приемки.</li>
  </ul>
  <p id="gQVa"><strong>Пример</strong>: Архитектурная схема проекта с описанием интерфейсов, используемых компонентов и их взаимодействия в системе учета заказов.</p>
  <p id="rtNA">2. <strong>Приемо-сдаточная документация</strong></p>
  <p id="7R7t"><strong>Назначение</strong>: Документы для передачи системы заказчику. Они подтверждают выполнение всех требований и успешное завершение работ. Эти документы нужны для демонстрации готовности системы к эксплуатации и для юридического закрепления сдачи-приемки работ.</p>
  <p id="yVED"><strong>Основные компоненты</strong>:</p>
  <ul id="TWqP">
    <li id="xtXv"><strong>Акт приемки-передачи</strong>: документ, который подписывается обеими сторонами и подтверждает, что заказчик принял выполненную работу.</li>
    <li id="Fap8"><strong>Протоколы испытаний и тестов</strong>: фиксируют результаты тестирования и показывают, что система работает в соответствии с требованиями.</li>
    <li id="6yYJ"><strong>Заключение о соответствии требованиям</strong>: резюме, которое показывает, что система соответствует всем требованиям, описанным в техническом задании.</li>
    <li id="1bEU"><strong>Инструкции и отчеты по проверкам</strong>: пошаговые инструкции для проверки работы системы или проведения интеграционных тестов.</li>
  </ul>
  <p id="lGnE"><strong>Пример</strong>: Заказчик подписывает акт приемки, подтверждая, что программное обеспечение удовлетворяет заявленным требованиям и успешно прошло все предусмотренные тесты.</p>
  <p id="CBpR">3. <strong>Эксплуатационная документация</strong></p>
  <p id="sKfq"><strong>Назначение</strong>: Инструкции для эксплуатации, администрирования и обслуживания системы после ее запуска. Эта документация важна для конечных пользователей, администраторов и обслуживающего персонала.</p>
  <p id="QQL6"><strong>Основные компоненты</strong>:</p>
  <ul id="lWbq">
    <li id="mjYX"><strong>Руководство пользователя</strong>: инструкции по работе с системой для конечных пользователей, включая описание интерфейсов, команд и операций.</li>
    <li id="WzLo"><strong>Руководство администратора</strong>: включает в себя настройки, учетные данные, процессы администрирования, резервного копирования и восстановления данных.</li>
    <li id="bnLo"><strong>Руководство по установке и настройке</strong>: пошаговое описание, как установить и настроить систему, чтобы она корректно функционировала.</li>
    <li id="fihM"><strong>Документация по обслуживанию и техподдержке</strong>: включает процедуры диагностики, устранения проблем, обновления и мониторинга системы.</li>
  </ul>
  <p id="kadP"><strong>Пример</strong>: Руководство пользователя, описывающее, как работать с интерфейсом системы для создания отчетов.<br /></p>
  <p id="nHRw">Основные вопросы, которые могут задать на собеседовании</p>
  <ol id="2xa6">
    <li id="Awbm"><strong>В чем отличие между проектной, приемо-сдаточной и эксплуатационной документацией?</strong></li>
    <ul id="0Nmn">
      <li id="fHs2"><strong>Ответ</strong>: Проектная документация описывает технические решения и структуру системы, приемо-сдаточная подтверждает соответствие требованиям и готовность к эксплуатации, а эксплуатационная ориентирована на пользователей и поддержание системы.</li>
    </ul>
    <li id="dd8F"><strong>Какие основные документы входят в состав проектной документации?</strong></li>
    <ul id="cUJo">
      <li id="TRJU"><strong>Ответ</strong>: Это техническое задание, спецификация требований, архитектурные схемы, диаграммы, и план тестирования.</li>
    </ul>
    <li id="Bwq3"><strong>Как оформляется акт приемки-передачи?</strong></li>
    <ul id="PqUk">
      <li id="vUGa"><strong>Ответ</strong>: Акт включает описание выполненных работ, их соответствие требованиям, подписи обеих сторон (исполнителя и заказчика) и фиксирует передачу объекта заказчику.</li>
    </ul>
    <li id="dAgT"><strong>Какие типы руководств входят в эксплуатационную документацию?</strong></li>
    <ul id="A2sW">
      <li id="zRU4"><strong>Ответ</strong>: Руководства для пользователей, администраторов, по установке, настройке и техподдержке.</li>
    </ul>
    <li id="aePY"><strong>Как документировать требования в проектной документации?</strong></li>
    <ul id="mcyx">
      <li id="CqHV"><strong>Ответ</strong>: Требования документируются в спецификации требований (SRS), включающей описание функциональных, нефункциональных, системных требований и ограничений.</li>
    </ul>
  </ol>
  <p id="n5Cg">Советы для подготовки:</p>
  <ul id="YhFF">
    <li id="0uAA">Изучите примеры этих документов, если есть возможность, чтобы знать их структуру и содержание.</li>
    <li id="hPvp">Потренируйтесь объяснять каждый тип документа в одном предложении, чтобы легко передать суть и назначение.</li>
    <li id="G7C8">Приводите примеры из личного опыта или кейсов, если работали с подобными документами, поскольку это поможет показать ваш практический опыт.</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/5raBNc_mutI</guid><link>https://teletype.in/@stoic_ftr/5raBNc_mutI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/5raBNc_mutI?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>Топ 25-вопросов по API для бизнес/системных аналитиков</title><pubDate>Sun, 27 Oct 2024 01:02:46 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/d5/34/d534d8bd-eaca-45b4-a4c8-bc6b8bc68177.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/d1/50/d150fb5f-75ce-4686-b045-f447d0af07a1.jpeg"></img>1. Что такое API и зачем оно нужно?]]></description><content:encoded><![CDATA[
  <figure id="9qlC" class="m_retina">
    <img src="https://img2.teletype.in/files/d1/50/d150fb5f-75ce-4686-b045-f447d0af07a1.jpeg" width="350" />
  </figure>
  <p id="hZHj">1. <strong>Что такое API и зачем оно нужно?</strong></p>
  <p id="6LjG"><strong>Ответ</strong>: API (Application Programming Interface) — это интерфейс, который позволяет приложениям взаимодействовать между собой. Например, API позволяет мобильному приложению отправить запрос серверу и получить от него данные для отображения.</p>
  <p id="wncw"></p>
  <h3 id="2V2r">2. <strong>Какие существуют типы API?</strong></h3>
  <p id="c1gf"><strong>Ответ</strong>: Основные типы API включают REST, SOAP, GraphQL, RPC и gRPC. REST и SOAP — самые распространённые в веб-разработке.</p>
  <p id="StmZ"></p>
  <h3 id="rIYF">3. <strong>В чем разница между REST и SOAP API?</strong></h3>
  <p id="rVYG"><strong>Ответ</strong>: REST использует стандартные HTTP методы (GET, POST, PUT, DELETE), возвращая данные обычно в формате JSON или XML, и гибче по сравнению с SOAP, который требует определенного XML формата и сложнее для реализации.</p>
  <p id="w0Ch"></p>
  <h3 id="u7Fw">4. <strong>Какие форматы данных используются в API?</strong></h3>
  <p id="sNNl"><strong>Ответ</strong>: JSON и XML — два самых популярных формата для передачи данных в API, хотя JSON используется чаще благодаря своей простоте и легкости парсинга.</p>
  <p id="7huJ"></p>
  <h3 id="1Uu9">5. <strong>Что такое идемпотентность в контексте API?</strong></h3>
  <p id="lyrd"><strong>Ответ</strong>: Идемпотентность означает, что повторение одного и того же запроса приведет к одному и тому же результату, как в случае с методами GET, PUT и DELETE в REST API.</p>
  <p id="BaRe"></p>
  <h3 id="rOvx">6. <strong>Какие существуют методы HTTP-запросов?</strong></h3>
  <p id="tkbP"><strong>Ответ</strong>: Основные методы — GET (получить данные), POST (отправить данные), PUT (обновить данные), PATCH (обновить частично), DELETE (удалить данные).</p>
  <p id="wzK5"></p>
  <h3 id="43HX">7. <strong>В чем отличие между PUT и PATCH?</strong></h3>
  <p id="w1Yn"><strong>Ответ</strong>: PUT заменяет ресурс полностью, тогда как PATCH обновляет только часть ресурса.</p>
  <p id="CXXR"></p>
  <h3 id="6HSu">8. <strong>Что такое аутентификация и авторизация в API?</strong></h3>
  <p id="5xRQ"><strong>Ответ</strong>: Аутентификация — это подтверждение личности пользователя (например, с помощью токена), а авторизация — проверка прав на доступ к ресурсам после аутентификации.</p>
  <p id="ABd9"></p>
  <h3 id="UWNh">9. <strong>Какие существуют методы аутентификации для API?</strong></h3>
  <p id="gm5V"><strong>Ответ</strong>: Наиболее популярные методы — Basic Auth, OAuth 2.0, токены JWT и API ключи.</p>
  <p id="5JkE"></p>
  <h3 id="zN0a">10. <strong>Что такое токен и зачем он используется в API?</strong></h3>
  <p id="Q1Pq"><strong>Ответ</strong>: Токен — это строка, представляющая собой доказательство аутентификации, используется для проверки идентичности пользователя на каждом запросе к API.</p>
  <p id="RQA5"></p>
  <h3 id="b4g9">11. <strong>Что такое JSON Web Token (JWT)?</strong></h3>
  <p id="nD6k"><strong>Ответ</strong>: JWT — это стандартизированный формат токена, который используется для аутентификации и содержит закодированную информацию о пользователе.</p>
  <p id="KLMd"></p>
  <h3 id="fxnp">12. <strong>Что такое rate limiting?</strong></h3>
  <p id="qpmn"><strong>Ответ</strong>: Rate limiting ограничивает количество запросов, которые клиент может отправить на API за определенное время, чтобы предотвратить перегрузку и злоупотребление ресурсами.</p>
  <p id="KD4X"></p>
  <h3 id="wbok">13. <strong>Какие существуют коды HTTP-ответов?</strong></h3>
  <p id="1ehi"><strong>Ответ</strong>: Коды разделяются на 5 классов: 1xx — информационные, 2xx — успешные, 3xx — перенаправление, 4xx — ошибки клиента, 5xx — ошибки сервера.</p>
  <p id="Vu9J"></p>
  <h3 id="oXrM">14. <strong>Какие коды ошибок HTTP могут возникать при работе с API?</strong></h3>
  <p id="lexX"><strong>Ответ</strong>: К популярным ошибкам относятся 400 (Bad Request), 401 (Unauthorized), 403 (Forbidden), 404 (Not Found), 500 (Internal Server Error).</p>
  <p id="Ordm"></p>
  <h3 id="LWHV">15. <strong>Что такое endpoint в API?</strong></h3>
  <p id="GYzU"><strong>Ответ</strong>: Endpoint — это конкретный URL, по которому клиент может получить доступ к данным или операциям API, например, <code>/users/123</code>.</p>
  <p id="QOnE"></p>
  <h3 id="YU76">16. <strong>Что такое API-документация?</strong></h3>
  <p id="v4SG"><strong>Ответ</strong>: Это описание всех методов и данных, которые доступны через API, включая URL, параметры, примеры запросов и ответов, коды ошибок.</p>
  <p id="jrju"></p>
  <h3 id="wDX7">17. <strong>Какие инструменты используются для тестирования API?</strong></h3>
  <p id="AeCQ"><strong>Ответ</strong>: Популярные инструменты — Postman, Swagger, SoapUI, Insomnia. Они позволяют отправлять запросы и получать ответы от API.</p>
  <p id="RO3H"></p>
  <h3 id="BT4M">18. <strong>Что такое API-клиент?</strong></h3>
  <p id="wGMz"><strong>Ответ</strong>: API-клиент — это приложение, которое делает запросы к API, чтобы получать или отправлять данные (например, мобильное приложение).</p>
  <p id="Sjmf"></p>
  <h3 id="RGao">19. <strong>Как выполняется передача изображений через API?</strong></h3>
  <p id="hzIn"><strong>Ответ</strong>: Обычно изображения передаются в формате Base64, если их нужно отправить в теле JSON, или как multipart/form-data.</p>
  <p id="wZg4"></p>
  <h3 id="VRaq">20. <strong>Что такое версия API и зачем она нужна?</strong></h3>
  <p id="YcUo"><strong>Ответ</strong>: Версионирование позволяет изменять API, не ломая старые реализации, обычно добавляется к URL как <code>v1</code>, <code>v2</code> и так далее.</p>
  <p id="vtvE"></p>
  <h3 id="Wj16">21. <strong>Что такое пагинация и зачем она нужна в API?</strong></h3>
  <p id="Fy7l"><strong>Ответ</strong>: Пагинация — это деление результатов на страницы для уменьшения нагрузки на сервер и клиента, особенно для больших наборов данных.</p>
  <p id="P2BK"></p>
  <h3 id="RYb0">22. <strong>Какие существуют подходы к пагинации?</strong></h3>
  <p id="Bzg9"><strong>Ответ</strong>: Основные — Offset и Limit (отступ и лимит), Cursor-based (курсоры) и пагинация по страницам (page-based).</p>
  <p id="wABo"></p>
  <h3 id="SKe9">23. <strong>Что такое CORS и как он связан с API?</strong></h3>
  <p id="uzVI"><strong>Ответ</strong>: CORS (Cross-Origin Resource Sharing) — это механизм безопасности, ограничивающий доступ к ресурсам API из других доменов.</p>
  <p id="uN0B"></p>
  <h3 id="HMLH">24. <strong>Что такое webhook?</strong></h3>
  <p id="coRb"><strong>Ответ</strong>: Webhook — это способ для API сообщить другому приложению о событии, отправляя данные, как только событие произошло (например, уведомление о новом платеже).</p>
  <p id="s3OM"></p>
  <h3 id="ZNAK">25. <strong>Как понять, что API нужно улучшить?</strong></h3>
  <p id="z7fh"><strong>Ответ</strong>: Признаками являются низкая производительность, высокие задержки, жалобы на неудобные структуры данных и часто возникающие ошибки — это указывает на необходимость оптимизации API.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/tVszPclkTbU</guid><link>https://teletype.in/@stoic_ftr/tVszPclkTbU?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/tVszPclkTbU?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>Postman</title><pubDate>Wed, 23 Oct 2024 01:03:10 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e4/5c/e45cf3e9-55ca-467e-9e50-4fd82fc5378e.png"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/07/14/0714ff4a-f2be-4ad1-9304-1d69dacbdd15.png"></img>Что такое Postman?]]></description><content:encoded><![CDATA[
  <p id="WdRT">Что такое Postman?</p>
  <p id="49zP">Postman — это мощный инструмент, который используется для разработки и тестирования API (интерфейсов программирования приложений). Он позволяет разработчикам и тестировщикам взаимодействовать с API без необходимости писать код для каждого запроса. Postman поддерживает отправку запросов, анализ ответов и тестирование, что делает его незаменимым инструментом в разработке и интеграции программного обеспечения.<br /></p>
  <h3 id="aadY">Практическая польза Postman</h3>
  <ol id="L04Q">
    <li id="y2Fu"><strong>Тестирование API</strong>: Postman упрощает взаимодействие с API, позволяя разработчикам отправлять запросы, изменять параметры, заголовки и тело запроса без необходимости программирования. Это полезно для быстрого тестирования, как API работают, особенно на этапе разработки или отладки.</li>
    <li id="eInu"><strong>Автоматизация тестирования</strong>: Вы можете создавать наборы тестов для API, что помогает автоматизировать рутинные проверки. Это критично при разработке сложных приложений, где необходимо убедиться, что после каждого изменения API работает стабильно.</li>
    <li id="UqwT"><strong>Коллаборация</strong>: Postman позволяет делиться коллекциями запросов с коллегами, что способствует улучшению командной работы и упрощению передачи знаний о проекте.</li>
    <li id="kHLC"><strong>Мониторинг API</strong>: Postman поддерживает мониторинг API, что позволяет автоматически проверять доступность и корректность работы API через определенные интервалы времени.</li>
  </ol>
  <p id="N3jn"></p>
  <h3 id="8Q8h">Почему иногда лучше не использовать Postman?</h3>
  <p id="co0U">Хотя Postman удобен для большинства задач, есть случаи, когда его использование может быть не идеальным:</p>
  <ol id="L2n3">
    <li id="xN5a"><strong>Производительность</strong>: Postman предназначен для разработки и тестирования, а не для выполнения запросов с высокой производительностью. Если вам нужно отправить миллионы запросов за короткий промежуток времени (например, нагрузочное тестирование), лучше использовать специализированные инструменты вроде Apache JMeter.</li>
    <li id="H0MC"><strong>Ограничения пользовательского интерфейса</strong>: Когда вам нужно автоматизировать сложные сценарии с большим количеством логики, интерфейс Postman может оказаться не настолько гибким, как решение, написанное вручную с использованием кода (например, через фреймворки для тестирования на языках программирования).</li>
    <li id="ah92"><strong>Необходимость в коде</strong>: Если вы работаете над проектом с интеграциями API, где тестирование лучше реализовать программно, Postman может быть лишним звеном, потому что для интеграции и тестирования API в коде обычно используются библиотеки и фреймворки.</li>
  </ol>
  <p id="WUdR"></p>
  <h3 id="1Oqo">Как использовать Postman: Алгоритм работы</h3>
  <p id="gS6H">Postman имеет простой и интуитивный интерфейс. Вот подробный алгоритм его использования:<br /></p>
  <h4 id="ynkx">Шаг 1: Установка Postman</h4>
  <ul id="gXUa">
    <li id="vTKj">Скачайте Postman с официального сайта <a href="https://www.postman.com/downloads/" target="_blank">Postman</a>и установите его на свой компьютер.</li>
    <li id="lxSJ">Зарегистрируйтесь или войдите в систему, если у вас уже есть учетная запись.</li>
  </ul>
  <h4 id="1cvJ">Шаг 2: Создание нового запроса</h4>
  <ol id="D6qh">
    <li id="gvwt"><strong>Открытие Postman</strong>: После установки, откройте Postman.</li>
    <li id="xcRH"><strong>Создание нового запроса</strong>:</li>
    <ul id="Rom6">
      <li id="96sP">В верхней части интерфейса есть поле для ввода URL.</li>
    </ul>
  </ol>
  <figure id="w39Z" class="m_column">
    <img src="https://img1.teletype.in/files/07/14/0714ff4a-f2be-4ad1-9304-1d69dacbdd15.png" />
  </figure>
  <ol id="KvpN">
    <ul id="KmwX">
      <li id="EYtJ">Рядом с полем URL выберите тип HTTP-запроса (GET, POST, PUT, DELETE и т.д.).</li>
    </ul>
  </ol>
  <figure id="JHza" class="m_column">
    <img src="https://img3.teletype.in/files/29/bf/29bfbed6-86fa-4370-b8ee-8cfaea5edeec.png" width="1862" />
  </figure>
  <p id="RIlH">Например, выберите <code>GET</code>, если хотите получить данные, или <code>POST</code>, если нужно отправить данные.</p>
  <blockquote id="mB3t"><strong>1. Ввод URL</strong>: Введите URL-адрес API, к которому хотите обратиться. Например: <code>https://api.example.com/data</code>.</blockquote>
  <blockquote id="gKqs"><strong>2. Добавление заголовков</strong> (опционально):</blockquote>
  <figure id="krTS" class="m_column">
    <img src="https://img2.teletype.in/files/d8/67/d8677ba8-afac-41df-bd9d-5d380db6074b.png" width="1912" />
  </figure>
  <ol id="aj36">
    <ul id="pl5j">
      <li id="ozvl">Нажмите на вкладку <strong>Headers</strong>, чтобы добавить нужные заголовки (например, <code>Content-Type: application/json</code>).</li>
    </ul>
  </ol>
  <blockquote id="PzpE"><strong>3. Добавление параметров запроса</strong> (опционально):</blockquote>
  <figure id="kYXE" class="m_column">
    <img src="https://img4.teletype.in/files/38/da/38dabded-f9af-4cbb-8f71-c029c06738fc.png" width="1910" />
  </figure>
  <ol id="DxYT">
    <ul id="1SFl">
      <li id="an6r">Если запрос требует параметров (например, ?id=123), добавьте их на вкладке <strong>Params</strong>.</li>
    </ul>
  </ol>
  <blockquote id="hPie"><strong>4. Отправка запроса</strong>: Нажмите на кнопку <strong>Send</strong>, чтобы отправить запрос.</blockquote>
  <h4 id="A26J">Шаг 3: Работа с ответом</h4>
  <blockquote id="7Y3T"><strong>1. Просмотр ответа</strong>: После отправки запроса в нижней части окна Postman появится раздел с ответом от сервера. Вы увидите тело ответа, код статуса (например, 200 OK), время отклика и другие данные.</blockquote>
  <figure id="CiTX" class="m_column">
    <img src="https://img4.teletype.in/files/7e/65/7e657899-9b01-4165-ba55-4ae722fc7836.png" width="1906" />
  </figure>
  <blockquote id="NnRh"><strong>2. Форматирование ответа</strong>: Вы можете переключаться между форматами представления ответа — JSON, HTML, текст и другими — для удобства чтения.</blockquote>
  <figure id="LGea" class="m_column">
    <img src="https://img2.teletype.in/files/5a/56/5a56c218-9f7b-4b78-85da-9fb767f734ef.png" width="1919" />
  </figure>
  <blockquote id="jqt1"><strong>3. Тестирование</strong>: На вкладке <strong>Tests</strong> можно писать простые JavaScript-тесты для автоматической проверки ответов.</blockquote>
  <figure id="ZPka" class="m_column">
    <img src="https://img3.teletype.in/files/22/4c/224c2de0-c16d-436d-ab72-679945a43b8d.png" width="1912" />
  </figure>
  <h4 id="GxpG">Шаг 4: Создание коллекций</h4>
  <ol id="F4KU">
    <li id="xdi2"><strong>Коллекции</strong>: Коллекции в Postman — это группы запросов, которые вы можете организовать и сохранять. Это удобно, если вы работаете с множеством запросов для одного API.</li>
    <li id="XYbn"><strong>Создание коллекции</strong>:</li>
    <ul id="uO7K">
      <li id="EnW7">Нажмите на вкладку <strong>Collections</strong> и выберите <strong>New Collection</strong>.</li>
    </ul>
  </ol>
  <figure id="RbEF" class="m_column">
    <img src="https://img4.teletype.in/files/35/85/35855d63-784f-4963-8145-b7f7d856a4b6.png" width="1914" />
  </figure>
  <ol id="rber">
    <ul id="Qiua">
      <li id="mi2L">Дайте коллекции имя и добавьте в нее запросы.</li>
    </ul>
  </ol>
  <h4 id="Onxa">Шаг 5: Авторизация</h4>
  <p id="05Fv">API часто требуют авторизации. Postman поддерживает различные типы авторизации:</p>
  <ol id="nPEC">
    <li id="ZmNU"><strong>Basic Auth</strong>: Простая аутентификация с использованием логина и пароля.</li>
    <li id="0mLj"><strong>Bearer Token</strong>: Используется для передачи токена доступа (часто применяется при работе с OAuth).</li>
    <li id="t8ou"><strong>API Key</strong>: Использование ключа API в заголовках или параметрах запроса.</li>
  </ol>
  <p id="Hbkb">Выберите тип авторизации на вкладке <strong>Authorization</strong> и заполните необходимые поля.</p>
  <h4 id="eQz2">Шаг 6: Автоматизация тестов</h4>
  <blockquote id="aBOZ"><strong>1. Тестирование в Postman</strong>: Вы можете автоматизировать тестирование запросов. Для этого на вкладке <strong>Tests</strong> добавьте JavaScript-тесты, которые будут запускаться после получения ответа от API. Пример простого теста:</blockquote>
  <p id="IeKH"><code>pm.test(&quot;Статус-код 200&quot;, function () {<br />    pm.response.to.have.status(200);<br />});</code></p>
  <blockquote id="QeMF"><strong>2. Запуск коллекции тестов</strong>: В разделе <strong>Collection Runner</strong> можно запустить все запросы из коллекции автоматически и получить отчеты по тестам.</blockquote>
  <h4 id="npJM">Шаг 7: Мониторинг API</h4>
  <ol id="rplD">
    <li id="RKGk"><strong>Мониторинг</strong>: В Postman можно настроить мониторинг запросов, чтобы они запускались через определенные интервалы времени и проверяли состояние API.</li>
    <li id="pb0p"><strong>Создание монитора</strong>:</li>
    <ul id="ZA7d">
      <li id="slZy">Перейдите в раздел <strong>Monitors</strong>.</li>
      <li id="aQM2">Настройте коллекцию и частоту проверки.</li>
      <li id="W4XQ">В случае сбоя или ошибки вы получите уведомление по электронной почте.</li>
    </ul>
  </ol>
  <p id="tgT2"></p>
  <h3 id="XzRU">Основные функции Postman</h3>
  <ol id="sIs3">
    <li id="1btC"><strong>Запросы (Requests)</strong>: Отправка различных типов запросов к API (GET, POST, PUT, DELETE и т.д.).</li>
    <li id="sF7f"><strong>Коллекции (Collections)</strong>: Группировка и организация запросов.</li>
    <li id="bejx"><strong>Тесты (Tests)</strong>: Автоматизация проверки результатов запросов с помощью JavaScript.</li>
    <li id="9SbA"><strong>Среды (Environments)</strong>: Использование переменных для настройки запросов под различные окружения (например, тестовое и рабочее).</li>
    <li id="oFhX"><strong>Мониторинг (Monitoring)</strong>: Автоматическое отслеживание состояния API.</li>
    <li id="n19s"><strong>Документация (Documentation)</strong>: Создание документации по API прямо в Postman.</li>
  </ol>
  <p id="Cg2U"></p>
  <h3 id="E8dJ">Когда не стоит использовать Postman</h3>
  <ol id="6P8A">
    <li id="AbSN"><strong>Нагрузочное тестирование</strong>: Если вам нужно провести масштабное нагрузочное тестирование (миллионы запросов), Postman не справится с этой задачей. Для этого лучше использовать инструменты, такие как JMeter или Locust.</li>
    <li id="NrUd"><strong>Сложные сценарии тестирования</strong>: Если тестовые сценарии требуют сложной логики, условных операторов, циклов и других программных конструкций, Postman может оказаться недостаточно гибким. В этом случае лучше реализовать тестирование с использованием кода на вашем языке программирования.</li>
    <li id="EEAE"><strong>Интеграции</strong>: Когда проект требует глубоких интеграций API в приложение, Postman хорош для первоначальной проверки и отладки, но полноценную интеграцию удобнее писать на языке программирования.</li>
  </ol>
  <p id="RUMQ"></p>
  <h3 id="ZttJ">Заключение</h3>
  <p id="2Y1t">Postman — мощный и удобный инструмент для тестирования и взаимодействия с API. Он отлично подходит для разработки, проверки и документирования API. Однако в некоторых случаях его возможности могут оказаться ограниченными, например, для нагрузочного тестирования или сложной логики. Если использовать его правильно, Postman значительно ускорит разработку и улучшит качество работы с API.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/YuBwn2nq71K</guid><link>https://teletype.in/@stoic_ftr/YuBwn2nq71K?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/YuBwn2nq71K?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>SQL для начинающих. Индексы.</title><pubDate>Sat, 19 Oct 2024 23:56:50 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6c/6d/6c6de885-02d5-4d67-8b26-6927b21ec587.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/e4/2a/e42a2bad-3672-4422-b686-ccdad8601a8a.png"></img>Когда вы начинаете работать с базами данных, понятие индексов может показаться сложным. Но это одно из ключевых понятий, которое помогает сделать работу с данными более эффективной. В этой части мы поговорим о том, зачем нужны индексы и как они влияют на производительность запросов.]]></description><content:encoded><![CDATA[
  <p id="gXQl">Когда вы начинаете работать с базами данных, понятие индексов может показаться сложным. Но это одно из ключевых понятий, которое помогает сделать работу с данными более эффективной. В этой части мы поговорим о том, зачем нужны индексы и как они влияют на производительность запросов.</p>
  <figure id="o9UQ" class="m_column">
    <img src="https://img3.teletype.in/files/e4/2a/e42a2bad-3672-4422-b686-ccdad8601a8a.png" width="1099" />
  </figure>
  <h4 id="10FT">Что такое индексы?</h4>
  <p id="HbeE">Представьте себе большую библиотеку с тысячами книг. Если бы все книги были просто разбросаны по полкам без какого-либо порядка, поиск конкретной книги занял бы часы. Но в библиотеке есть система — книги упорядочены по автору, названию или тематике, и вы можете быстро найти нужную вам информацию. Аналогом этой системы в базах данных являются <strong>индексы</strong>.</p>
  <p id="2I4A"><strong>Индекс</strong> — это структура, которая помогает базе данных быстрее находить нужные данные, как алфавитный указатель в книге. Если бы вы каждый раз пересматривали всю таблицу, чтобы найти нужную строку, процесс мог бы занять очень много времени. Индексы ускоряют этот процесс, позволяя базе данных не &quot;просматривать&quot; все записи, а сразу переходить к нужной.</p>
  <p id="SixY"></p>
  <h4 id="ZuEQ">Зачем нужны индексы?</h4>
  <p id="J2vK">Индексы нужны для того, чтобы <strong>ускорить поиск данных</strong> в таблицах. Когда у вас есть тысячи или миллионы строк в таблице, поиск нужных данных может стать медленным. Индексы решают эту проблему.</p>
  <p id="V0QG">Рассмотрим простой пример. У вас есть таблица <code>students</code>, где хранится информация о студентах: их имена, фамилии, номера зачеток и даты поступления.</p>
  <p id="wMIw"><code>SELECT * FROM students WHERE student_id = 12345;</code></p>
  <p id="VOHR">Запрос выглядит довольно простым. Но если в таблице сотни тысяч студентов, без индекса базе данных придется просмотреть каждую строку, чтобы найти студента с <code>student_id = 12345</code>. Это называется <strong>полным сканированием таблицы</strong> (table scan)</p>
  <p id="nPnP">Но если на столбце <code>student_id</code> есть индекс, база данных вместо просмотра всех строк сразу обратится к индексу, как к указателю, и найдет нужную запись гораздо быстрее.</p>
  <p id="dYEE"></p>
  <h4 id="oYcm">Как индексы влияют на производительность?</h4>
  <p id="6xvJ">Индексы помогают ускорить <strong>чтение данных</strong>, но при этом они могут замедлить <strong>вставку, обновление и удаление данных</strong>. Давайте разберемся, почему это происходит.</p>
  <ol id="OMQl">
    <li id="rkNG"><strong>Ускорение чтения данных</strong>:Когда мы добавляем индекс на какой-то столбец, запросы, которые ищут данные по этому столбцу, начинают выполняться быстрее. Например, если у вас есть индекс на столбце <code>student_id</code>, запросы вида <code>WHERE student_id = 12345</code> будут обрабатываться очень быстро. Это потому, что база данных больше не должна просматривать всю таблицу, чтобы найти нужные данные.Чем больше строк в таблице, тем более заметной становится польза индексов для ускорения чтения. Запросы, которые используют индекс, могут выполняться в разы быстрее, особенно в больших таблицах.</li>
    <li id="BYJ1"><strong>Замедление вставки, обновления и удаления данных</strong>:Однако индексы — это не только плюсы. Каждый раз, когда мы добавляем новые данные в таблицу или изменяем существующие, база данных должна обновить не только саму таблицу, но и индекс. Это добавляет дополнительную нагрузку на систему.Например, если мы добавили индекс на столбец <code>student_id</code>, каждый раз, когда мы вставляем новую строку, база данных должна также обновить индекс. Чем больше индексов на таблице, тем больше времени потребуется на выполнение этих операций.</li>
  </ol>
  <h4 id="mVn0">Баланс между чтением и изменением данных</h4>
  <p id="oIWs">В реальных системах всегда нужно искать <strong>баланс</strong> между скоростью чтения данных и скоростью их изменения. Индексы полезны для ускорения чтения, но если таблица часто обновляется или в нее регулярно добавляются новые данные, слишком много индексов может замедлить эти операции.</p>
  <p id="Ugme">Вот почему важно тщательно продумывать, на какие столбцы нужно создавать индексы. Лучше всего создавать индексы только на тех столбцах, по которым часто выполняются запросы <strong>с фильтрацией данных</strong>.</p>
  <h4 id="y9y9">Пример влияния индексов на производительность</h4>
  <p id="FCCk">Предположим, у нас есть таблица с миллионом строк, и мы часто выполняем запросы по полю <code>email</code>. Без индекса, каждый раз, когда мы ищем строку с определенным <code>email</code>, база данных будет просматривать всю таблицу. Это может занять несколько секунд.</p>
  <p id="27xG">Но если мы создадим индекс на поле <code>email</code>, запросы будут выполняться значительно быстрее:</p>
  <p id="iQq4"><code>CREATE INDEX idx_email ON students(email);</code><br />Теперь запрос:</p>
  <p id="Wymo"><code>SELECT * FROM students WHERE email = &#x27;student@example.com&#x27;;</code><br /></p>
  <p id="5H6J">будет обрабатываться намного быстрее, потому что база данных сначала обратится к индексу и быстро найдет нужную строку.</p>
  <p id="3nXs">Однако, если мы добавим в таблицу новую строку с новым <code>email</code>, база данных должна будет не только вставить строку в таблицу, но и обновить индекс. Чем больше индексов на таблице, тем больше ресурсов это займет.</p>
  <p id="RBQx"></p>
  <h4 id="OIX9">Заключение</h4>
  <p id="zkIt">Индексы — мощный инструмент для повышения производительности запросов. Они помогают быстрее находить нужные данные, что особенно важно, когда таблицы содержат большое количество строк. Однако индексы также могут замедлить операции вставки, обновления и удаления данных, поэтому важно продумать, какие столбцы нужно индексировать.</p>
  <p id="kk5y">Если подытожить:</p>
  <ul id="rryE">
    <li id="0HpW"><strong>Индексы</strong> ускоряют поиск данных, что особенно полезно для больших таблиц.</li>
    <li id="WNv9"><strong>Чтение данных</strong> с индексами происходит быстрее, но <strong>вставка и обновление</strong> данных могут замедлиться.</li>
    <li id="nD4W">Создавайте индексы на тех столбцах, по которым часто выполняются запросы с фильтрацией.</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/wMEy0zBlMEk</guid><link>https://teletype.in/@stoic_ftr/wMEy0zBlMEk?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/wMEy0zBlMEk?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>Различие между Use Case и User Stories</title><pubDate>Wed, 16 Oct 2024 08:16:23 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e9/34/e934f1d7-16f7-4667-b745-512d398f336c.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/14/cd/14cd1807-0a02-4eea-8b3c-fe06225f1593.png"></img>Когда мы говорим о разработке программного обеспечения или решении задач, связанных с требованиями, часто встречаются два термина: Use Case и User Stories. Они оба помогают описать, как система должна вести себя с точки зрения пользователя, но используются по-разному и имеют различные цели. Давайте разберемся в этом подробно и на примерах.]]></description><content:encoded><![CDATA[
  <figure id="P1Nm" class="m_column">
    <img src="https://img2.teletype.in/files/14/cd/14cd1807-0a02-4eea-8b3c-fe06225f1593.png" width="960" />
  </figure>
  <p id="1673">Когда мы говорим о <strong>разработке программного обеспечения</strong> или решении задач, связанных с требованиями, часто встречаются два термина: <strong>Use Case</strong> и <strong>User Stories</strong>. Они оба помогают описать, как система должна вести себя с точки зрения пользователя, но используются по-разному и имеют различные цели. Давайте разберемся в этом подробно и на примерах.</p>
  <h4 id="bcQr">1. Что такое <strong>Use Case</strong>?</h4>
  <p id="Tp4g"><strong>Use Case (вариант использования)</strong> — это формальный документ, который подробно описывает, как пользователь будет взаимодействовать с системой для достижения конкретной цели. Он более структурирован и охватывает взаимодействие на уровне системы.</p>
  <p id="akQK">В Use Case описываются:</p>
  <ul id="wsE4">
    <li id="XiQ7"><strong>Акторы (Actors)</strong> — это те, кто взаимодействует с системой. Это могут быть пользователи или другие системы.</li>
    <li id="ilKj"><strong>Предусловия (Preconditions)</strong> — что должно быть выполнено до того, как начнется действие.</li>
    <li id="QiWT"><strong>Шаги (Steps)</strong> — последовательность действий, которые необходимо выполнить для достижения результата.</li>
    <li id="9OjP"><strong>Результат (Postconditions)</strong> — что произойдет после завершения всех шагов.</li>
    <li id="yG6k"><strong>Альтернативные сценарии</strong> — что делать, если что-то пошло не так.</li>
  </ul>
  <h5 id="VvCB">Пример Use Case:</h5>
  <p id="OGiV"></p>
  <p id="EJvY"><strong>Название</strong>: Авторизация пользователя.</p>
  <p id="jIB5"><strong>Актор</strong>: Пользователь.</p>
  <p id="0bWm"><strong>Цель</strong>: Пользователь вводит логин и пароль для входа в систему.</p>
  <p id="vkir"><strong>Шаги</strong>:</p>
  <ol id="J89m">
    <li id="ucg1">Пользователь вводит логин.</li>
    <li id="R94Q">Пользователь вводит пароль.</li>
    <li id="LCh6">Система проверяет данные.</li>
    <li id="RDKQ">Если данные верны, пользователь входит в систему.</li>
  </ol>
  <p id="esvF"><strong>Альтернативный сценарий</strong>:</p>
  <ul id="vWOu">
    <li id="FWyo">Если логин или пароль введены неверно, система выдает сообщение об ошибке и предлагает попробовать снова.</li>
  </ul>
  <hr />
  <h4 id="Af5c">2. Что такое <strong>User Stories</strong>?</h4>
  <p id="14mO"><strong>User Stories (пользовательские истории)</strong> — это краткие описания функций или задач, которые пользователь должен выполнить с помощью системы. Эти истории написаны простым языком и сосредоточены на том, что хочет сделать пользователь, а не на технических деталях реализации.</p>
  <p id="HZzV">Каждая User Story обычно отвечает на вопрос: &quot;Какую ценность хочет получить пользователь?&quot;. Структура User Story обычно включает три компонента:</p>
  <ol id="j4Xz">
    <li id="OTD2"><strong>Кто</strong> — кто является пользователем?</li>
    <li id="k53i"><strong>Что</strong> — что пользователь хочет сделать?</li>
    <li id="FYZj"><strong>Зачем</strong> — зачем это нужно?</li>
  </ol>
  <h5 id="yPzH">Пример User Story:</h5>
  <p id="eTRz"><strong>Как пользователь</strong>, я хочу ввести свои учетные данные, чтобы получить доступ к личному кабинету.</p>
  <p id="fngb">Это короткое и понятное описание, которое фокусируется на конечной цели пользователя, а не на шагах системы.</p>
  <hr />
  <h4 id="R36y">3. Ключевые различия</h4>
  <p id="DQVX">Теперь давайте разберем <strong>основные отличия</strong> между Use Case и User Stories.</p>
  <figure id="XeK6" class="m_column">
    <img src="https://img4.teletype.in/files/f0/f5/f0f5fce1-0f75-49c9-94ac-0b956e2af942.png" width="1050" />
  </figure>
  <hr />
  <h4 id="owQd">4. Примеры для сравнения</h4>
  <p id="8Aya"><strong>Use Case</strong> для регистрации нового пользователя:</p>
  <ol id="ljrN">
    <li id="xpij"><strong>Название</strong>: Регистрация нового пользователя.</li>
    <li id="yK4M"><strong>Актор</strong>: Новый пользователь.</li>
    <li id="wcgs"><strong>Цель</strong>: Пользователь регистрируется в системе.</li>
    <li id="eFZF"><strong>Шаги</strong>:</li>
    <ol id="Pkpl">
      <li id="BbSc">Пользователь вводит email.</li>
      <li id="a80L">Пользователь создает пароль.</li>
      <li id="yPFl">Пользователь подтверждает пароль.</li>
      <li id="NqRq">Система проверяет правильность данных.</li>
      <li id="3q8D">Система отправляет письмо для подтверждения email.</li>
    </ol>
  </ol>
  <p id="epq4"><strong>User Story</strong> для регистрации:</p>
  <p id="Pb8z"><strong>Как новый пользователь</strong>, я хочу зарегистрироваться в системе, чтобы получить доступ к личному кабинету.</p>
  <p id="F47R">Видно, что <strong>Use Case</strong> предоставляет намного больше деталей и шагов, описывающих процесс регистрации, в то время как <strong>User Story</strong> просто определяет, что должен сделать пользователь и зачем.</p>
  <hr />
  <h4 id="HdCb">5. Когда использовать Use Case, а когда — User Stories?</h4>
  <ul id="D8BT">
    <li id="ipAy"><strong>Use Case</strong> лучше всего использовать, когда нужно подробно описать взаимодействие пользователя с системой. Это полезно на этапах проектирования сложных систем, где важны все шаги и исключительные случаи.</li>
    <li id="qRbh"><strong>User Stories</strong> больше подходят для гибких методологий разработки (например, Agile), где акцент делается на быстрых итерациях и минимальных требованиях. Они дают возможность команде сосредоточиться на потребностях пользователя, не вдаваясь в технические детали.</li>
  </ul>
  <hr />
  <h4 id="CQcW">Заключение</h4>
  <p id="KXUN">В общем, <strong>Use Case</strong> и <strong>User Stories</strong> — это два разных инструмента для описания функциональности системы с точки зрения пользователя, но они применяются в разных ситуациях. <strong>Use Case</strong> углубляется в технические детали и шаги, в то время как <strong>User Stories</strong> помогают быстро зафиксировать пользовательские задачи в простом виде.</p>
  <p id="agWz">Понимание различий между этими подходами поможет вам лучше выбирать подходящие методы для анализа и разработки вашего продукта.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/xsV8d9WQ86m</guid><link>https://teletype.in/@stoic_ftr/xsV8d9WQ86m?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/xsV8d9WQ86m?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>SOAP</title><pubDate>Mon, 14 Oct 2024 02:01:38 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6e/1b/6e1bf702-1592-4ac3-b155-3204396e1e4e.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/5c/14/5c1475f4-399e-40f4-8bbf-f9c07b1f03a2.png"></img>SOAP (Simple Object Access Protocol) — это протокол обмена сообщениями, который используется для взаимодействия между различными приложениями по сети. В отличие от REST, который работает поверх HTTP и использует более гибкий подход, SOAP основывается на строгих стандартах и протоколах, что делает его надежным и безопасным, но более сложным в использовании.]]></description><content:encoded><![CDATA[
  <figure id="guvr" class="m_column">
    <img src="https://img2.teletype.in/files/5c/14/5c1475f4-399e-40f4-8bbf-f9c07b1f03a2.png" width="900" />
  </figure>
  <p id="9mlb">SOAP (Simple Object Access Protocol) — это протокол обмена сообщениями, который используется для взаимодействия между различными приложениями по сети. В отличие от REST, который работает поверх HTTP и использует более гибкий подход, SOAP основывается на строгих стандартах и протоколах, что делает его надежным и безопасным, но более сложным в использовании.</p>
  <p id="Skm0">Основные черты SOAP:</p>
  <ol id="6GIJ">
    <li id="7Zs7"><strong>Формат сообщений</strong> — все данные в SOAP передаются в формате XML. Это делает протокол независимым от платформы и языка программирования.</li>
    <li id="oka0"><strong>Расширенные возможности</strong> — SOAP поддерживает безопасность (например, шифрование сообщений) и транзакции, что важно для корпоративных решений.</li>
    <li id="xAQE"><strong>Строгие стандарты</strong> — SOAP имеет чётко определенные правила, которым необходимо следовать, что упрощает интеграцию в сложных системах.</li>
    <li id="i4H3"><strong>Транспорт</strong> — обычно SOAP передается через HTTP/HTTPS, но поддерживает и другие протоколы (например, SMTP).</li>
  </ol>
  <p id="Eltw"></p>
  <h3 id="I2X6">Пример SOAP-запроса:</h3>
  <p id="OOrl">Представим, что нужно запросить информацию о температуре в городе с помощью SOAP. Ниже пример SOAP-запроса на получение текущей погоды.</p>
  <p id="wErX"><code>POST /WeatherService HTTP/1.1<br />Host: www.example.com<br />Content-Type: text/xml; charset=utf-8<br />Content-Length: length<br />SOAPAction: &quot;http://www.example.com/GetCityWeather&quot;</code></p>
  <p id="qFPt"><code>&lt;?xml version=&quot;1.0&quot;?&gt;<br />&lt;soap:Envelope xmlns:soap=&quot;<a href="http://www.w3.org/2003/05/soap-envelope" target="_blank">http://www.w3.org/2003/05/soap-envelope</a>&quot;<br />               xmlns:wea=&quot;<a href="http://www.example.com/weather" target="_blank">http://www.example.com/weather</a>&quot;&gt;<br />    &lt;soap:Header/&gt;<br />    &lt;soap:Body&gt;<br />        &lt;wea:GetCityWeather&gt;<br />            &lt;wea:CityName&gt;New York&lt;/wea:CityName&gt;<br />        &lt;/wea:GetCityWeather&gt;<br />    &lt;/soap:Body&gt;<br />&lt;/soap:Envelope&gt;</code></p>
  <p id="naLW">Этот запрос отправляется на сервер, который работает с веб-сервисом погоды. В теле запроса (Body) передается параметр — название города (&quot;New York&quot;). Сервер получит запрос, обработает его и вернет ответ в формате SOAP с информацией о погоде.</p>
  <p id="iQAB"></p>
  <h3 id="ichn">Пример ответа от сервера:</h3>
  <p id="ud0d"><code>&lt;?xml version=&quot;1.0&quot;?&gt;<br />&lt;soap:Envelope xmlns:soap=&quot;<a href="http://www.w3.org/2003/05/soap-envelope" target="_blank">http://www.w3.org/2003/05/soap-envelope</a>&quot;&gt;<br />    &lt;soap:Body&gt;<br />        &lt;wea:GetCityWeatherResponse&gt;<br />            &lt;wea:Temperature&gt;22&lt;/wea:Temperature&gt;<br />            &lt;wea:Description&gt;Sunny&lt;/wea:Description&gt;<br />        &lt;/wea:GetCityWeatherResponse&gt;<br />    &lt;/soap:Body&gt;<br />&lt;/soap:Envelope&gt;</code></p>
  <p id="0XBm"></p>
  <h3 id="WcPH">Когда использовать SOAP?</h3>
  <p id="N7nH">SOAP обычно используется в корпоративных системах, где важны безопасность, атомарность операций (транзакции) и строгие стандарты.</p>
  <h3 id="VItk"><br />Разница SOAP и REST</h3>
  <p id="dgJG">Представьте, что REST и SOAP — это два разных способа, как приложения (например, Ваше и другое на сервере) могут «поговорить» друг с другом через интернет. Оба способа помогают передавать данные, но у них разные подходы, как именно это делать. Вот основные отличия:</p>
  <h3 id="CTgl">1. <strong>Формат данных</strong></h3>
  <ul id="E1gy">
    <li id="Trvv"><strong>REST</strong>: Здесь вы можете использовать разные форматы данных: JSON, XML, текст и т.д. Чаще всего используется <strong>JSON</strong>, потому что он легче для чтения и быстрее обрабатывается.</li>
    <li id="xdKB"><strong>SOAP</strong>: Всегда использует <strong>XML</strong>. XML — это более сложный формат, который требует больше ресурсов на обработку.</li>
  </ul>
  <p id="EIpS"><strong>Пример:</strong> REST может передавать данные так:</p>
  <p id="7IQ3"><code>{<br />  &quot;city&quot;: &quot;New York&quot;,<br />  &quot;temperature&quot;: 22<br />}</code><br />А SOAP передаёт их так:</p>
  <p id="UMY3"><code>&lt;weather&gt;<br />  &lt;city&gt;New York&lt;/city&gt;<br />  &lt;temperature&gt;22&lt;/temperature&gt;<br />&lt;/weather&gt;</code></p>
  <h3 id="hV7g">2. <strong>Простота использования</strong></h3>
  <ul id="pJLj">
    <li id="ET7I"><strong>REST</strong>: Простой и гибкий. Его легко учить и использовать, потому что он использует стандартные HTTP-запросы (GET, POST, PUT, DELETE), как когда ты открываешь сайт в браузере.</li>
    <li id="8Jlz"><strong>SOAP</strong>: Сложнее, потому что требует строгих стандартов и правил. У SOAP больше &quot;формальностей&quot;, и тебе нужно писать больше кода, чтобы работать с ним.</li>
  </ul>
  <h3 id="lOff">3. <strong>Легкость и скорость</strong></h3>
  <ul id="8G9y">
    <li id="leGL"><strong>REST</strong>: Быстрее и легче, потому что обычно работает с JSON, а JSON — это маленькие и лёгкие данные. REST лучше для веб-приложений и мобильных приложений, где скорость важна.</li>
    <li id="fsVi"><strong>SOAP</strong>: Более медленный и тяжелый из-за использования XML и дополнительных проверок. Его чаще используют в больших корпорациях, где важна безопасность и надёжность.</li>
  </ul>
  <h3 id="4ElW">4. <strong>Безопасность</strong></h3>
  <ul id="ormj">
    <li id="SyE6"><strong>REST</strong>: Для безопасности REST полагается на механизмы HTTPS (шифрование данных). Безопасность в REST проще, но она не встроена в сам протокол.</li>
    <li id="wwjJ"><strong>SOAP</strong>: Имеет встроенные механизмы безопасности. SOAP поддерживает <strong>WS-Security</strong>, что делает его более подходящим для банковских и финансовых приложений.</li>
  </ul>
  <h3 id="xSkv">5. <strong>Когда использовать</strong></h3>
  <ul id="BDqV">
    <li id="nHEB"><strong>REST</strong>: Подходит, когда Вам нужно быстро обмениваться данными и когда важна производительность. Например, REST часто используют для мобильных приложений и социальных сетей.</li>
    <li id="1ebC"><strong>SOAP</strong>: Используется там, где требуется строгий контроль, безопасность и стандарты. Это часто корпоративные системы, финансовые приложения или когда нужно поддерживать сложные транзакции.</li>
  </ul>
  <h3 id="6zqy">Пример разницы в запросах:</h3>
  <p id="So37"><strong>REST</strong>-запрос может выглядеть так:</p>
  <p id="tZcD" data-align="center"><code>GET http://example.com/weather?city=NewYork</code></p>
  <p id="gdZZ">Ты просто отправляешь URL и сервер возвращает тебе данные.</p>
  <p id="JxU7"></p>
  <p id="lHHa"><strong>SOAP</strong>-запрос будет намного сложнее, с XML:</p>
  <p id="Mo3y"><code>&lt;soap:Envelope xmlns:soap=&quot;<a href="http://schemas.xmlsoap.org/soap/envelope/" target="_blank">http://schemas.xmlsoap.org/soap/envelope/</a>&quot;&gt;<br />  &lt;soap:Body&gt;<br />    &lt;GetWeather&gt;<br />      &lt;CityName&gt;New York&lt;/CityName&gt;<br />    &lt;/GetWeather&gt;<br />  &lt;/soap:Body&gt;<br />&lt;/soap:Envelope&gt;</code><br /></p>
  <h3 id="jFnl">Основная разница:</h3>
  <ul id="Va9C">
    <li id="I4Bh"><strong>REST</strong> — это быстрый и простой способ обмениваться данными, часто используется в современных приложениях.</li>
    <li id="16Zx"><strong>SOAP</strong> — это более сложный, но надёжный способ, который подходит для серьезных корпоративных систем, где важны безопасность и стандарты.</li>
  </ul>
  <p id="4WMc">Таким образом, если Вам нужно быстро обмениваться данными и использовать гибкие форматы — REST отличный вариант. А если требуется строгая безопасность и надёжность — это случай для SOAP.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@stoic_ftr/5t4UP4M1Uzo</guid><link>https://teletype.in/@stoic_ftr/5t4UP4M1Uzo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr</link><comments>https://teletype.in/@stoic_ftr/5t4UP4M1Uzo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=stoic_ftr#comments</comments><dc:creator>stoic_ftr</dc:creator><title>REST, JSON</title><pubDate>Thu, 10 Oct 2024 07:50:02 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/10/32/10322737-4ca0-445f-aad5-e424c2893296.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/d7/71/d7716b33-4b31-42e5-b3f4-b1976b10f857.png"></img>Сегодня мы поговорим о REST и JSON — ключевых понятиях в мире веб-разработки. Эти технологии позволяют создавать современные приложения, которые легко взаимодействуют друг с другом.]]></description><content:encoded><![CDATA[
  <figure id="GGhE" class="m_column">
    <img src="https://img2.teletype.in/files/d7/71/d7716b33-4b31-42e5-b3f4-b1976b10f857.png" width="1124" />
  </figure>
  <p id="cuJm">Сегодня мы поговорим о REST и JSON — ключевых понятиях в мире веб-разработки. Эти технологии позволяют создавать современные приложения, которые легко взаимодействуют друг с другом.<br /></p>
  <h4 id="oe0s">Что такое REST?</h4>
  <p id="tZ0M">REST (Representational State Transfer) — это архитектурный стиль, который используется для создания веб-сервисов. Если говорить простым языком, REST определяет, как должны взаимодействовать разные компоненты в сети (например, клиент и сервер).</p>
  <p id="Hs1Z">REST работает через HTTP — тот же самый протокол, который используется для просмотра веб-страниц. Веб-сервис по принципу REST позволяет клиенту запрашивать информацию или выполнять действия с помощью стандартных запросов. Сюда входят такие команды, как GET, POST, PUT, PATCH и DELETE.<br /></p>
  <h4 id="3IDG">Типы HTTP-запросов</h4>
  <p id="7eLa">Давайте разберёмся, что делают основные типы запросов в REST:</p>
  <ul id="R88H">
    <li id="VGJP"><strong>GET</strong> — запрашивает данные с сервера. Это как запрос информации, например, получение списка товаров в магазине.</li>
    <li id="eDKI"><strong>POST</strong> — отправляет новые данные на сервер. Этот запрос используют, когда ты регистрируешься на сайте или добавляешь новый товар.</li>
    <li id="P6gW"><strong>PUT</strong> — обновляет существующие данные. Здесь нужно передать все данные объекта, который ты обновляешь.</li>
    <li id="0SM7"><strong>PATCH</strong> — обновляет часть данных объекта. Например, если нужно изменить только цену товара, но не все данные.</li>
    <li id="BLnL"><strong>DELETE</strong> — удаляет данные с сервера. Этот запрос удаляет конкретный объект, как, например, удаление товара из корзины.</li>
  </ul>
  <p id="jhvT"></p>
  <h4 id="rcTU">Идемпотентность</h4>
  <p id="HQWU">Идемпотентность — это сложное слово для простой идеи. Оно означает, что результат операции не изменится, если её выполнить несколько раз подряд.</p>
  <p id="vPGc">Пример: если вы делаете запрос <strong>GET</strong>, чтобы получить список товаров, сколько бы раз вы это ни сделали — результат будет одинаковым. То же самое с <strong>PUT</strong>: обновление информации о товаре не изменится, если повторить операцию с теми же данными. <strong>POST</strong> обычно не идемпотентен, потому что при каждом запросе создаётся новый ресурс (например, новый аккаунт пользователя).</p>
  <p id="woj9"></p>
  <h4 id="m8Pl">Что такое JSON?</h4>
  <p id="ZZX9">JSON (JavaScript Object Notation) — это текстовый формат для передачи данных между клиентом и сервером. JSON прост в использовании и чтении человеком. Он похож на объекты в языке JavaScript и состоит из ключей и значений:</p>
  <p id="hsrr"><code>{<br />  &quot;name&quot;: &quot;John&quot;,<br />  &quot;age&quot;: 25,<br />  &quot;isStudent&quot;: true<br />}</code></p>
  <p id="Jrxs">JSON используют для передачи данных в веб-приложениях. Например, когда вы запрашиваете данные о пользователе, сервер может вернуть ответ в формате JSON.</p>
  <p id="OTzH"></p>
  <h4 id="PVKR">Что такое XML?</h4>
  <p id="S87E">XML (Extensible Markup Language) — это другой формат для передачи данных. Он более сложный, чем JSON, и выглядит как HTML:</p>
  <p id="Yt6H"><code>&lt;user&gt;<br />  &lt;name&gt;John&lt;/name&gt;<br />  &lt;age&gt;25&lt;/age&gt;<br />  &lt;isStudent&gt;true&lt;/isStudent&gt;<br />&lt;/user&gt;</code></p>
  <p id="kG7a">XML использовался до того, как стал популярен JSON. Он до сих пор встречается, но из-за своей громоздкости уступает JSON.</p>
  <p id="DwNv"></p>
  <h4 id="BFXv">Разница между PUT и PATCH</h4>
  <p id="o1A4">Оба этих запроса используются для обновления данных, но они работают по-разному:</p>
  <ul id="9rcy">
    <li id="XbOL"><strong>PUT</strong> требует, чтобы вы отправили полный объект с новыми данными. Например, если вы обновляете товар, нужно передать все его данные, даже те, которые не изменились.</li>
    <li id="Vrvs"><strong>PATCH</strong> позволяет обновить только часть данных. Например, если нужно поменять только цену товара, а не все его свойства.</li>
  </ul>
  <p id="uh60">Представьте, что у вас есть объект товара:</p>
  <p id="MrXs"><code>{<br />  &quot;id&quot;: 1,<br />  &quot;name&quot;: &quot;Laptop&quot;,<br />  &quot;price&quot;: 1000<br />}</code></p>
  <p id="A5YX"><strong>PUT</strong> потребует, чтобы вы отправили весь объект:</p>
  <p id="baEd"><code>{<br />  &quot;id&quot;: 1,<br />  &quot;name&quot;: &quot;Laptop&quot;,<br />  &quot;price&quot;: 900<br />}</code></p>
  <p id="2LYG"><strong>PATCH</strong> позволит отправить только изменённые данные:</p>
  <p id="RLyu"><code>{<br />  &quot;price&quot;: 900<br />}</code></p>
  <p id="nTSJ"></p>
  <h4 id="4xhl">Как передать картинку в REST?</h4>
  <p id="VqoJ">Картинки и файлы в REST-сервисах передаются обычно через POST-запрос. Чтобы передать файл, используют формат <strong>multipart/form-data</strong>. Это особый формат, который позволяет передавать как текстовые данные, так и бинарные файлы.</p>
  <p id="TAP5">Пример отправки изображения:</p>
  <p id="QRKw"><code>POST /upload HTTP/1.1<br />Host: example.com<br />Content-Type: multipart/form-data; boundary=boundary123</code></p>
  <p id="9ghE"><code>--boundary123<br />Content-Disposition: form-data; name=&quot;image&quot;; filename=&quot;photo.jpg&quot;<br />Content-Type: image/jpeg</code></p>
  <p id="El4u"><code>&lt;файл-картинка&gt;<br />--boundary123— </code></p>
  <p id="PkMq"></p>
  <h4 id="1DWr">Пример работы REST</h4>
  <p id="csmg">Давайте рассмотрим, как работает REST на примере интернет-магазина.</p>
  <blockquote id="Khxb">1. Вы отправляете <strong>GET</strong>-запрос на сервер, чтобы получить список товаров:</blockquote>
  <p id="UMGJ"><code>GET /products</code></p>
  <p id="3Zya">Сервер отвечает:</p>
  <p id="y9Lx"><code>[<br />  {&quot;id&quot;: 1, &quot;name&quot;: &quot;Laptop&quot;, &quot;price&quot;: 1000},<br />  {&quot;id&quot;: 2, &quot;name&quot;: &quot;Phone&quot;, &quot;price&quot;: 500}<br />]</code></p>
  <blockquote id="fWyh">2. Вы хотите добавить новый товар. Для этого отправляется <strong>POST</strong>-запрос:</blockquote>
  <p id="Psww"><code>POST /products</code><br />Данные, которые ты отправляешь:</p>
  <p id="CV76"><code>{<br />  &quot;name&quot;: &quot;Tablet&quot;,<br />  &quot;price&quot;: 700<br />}</code></p>
  <p id="g6u7">Сервер создаёт новый товар и возвращает его данные:</p>
  <p id="2fAC"><code>{<br />  &quot;id&quot;: 3,<br />  &quot;name&quot;: &quot;Tablet&quot;,<br />  &quot;price&quot;: 700<br />}</code></p>
  <blockquote id="GjAt">3. Если нужно изменить цену товара, отправляешь <strong>PATCH</strong>-запрос:</blockquote>
  <p id="KYJg"><code>PATCH /products/3</code></p>
  <p id="BNH3">Данные для обновления:</p>
  <p id="fO5y"><code>{<br />  &quot;price&quot;: 650<br />}</code></p>
  <p id="TInD">Сервер обновляет цену товара и отвечает:</p>
  <p id="4fog"><code>{<br />  &quot;id&quot;: 3,<br />  &quot;name&quot;: &quot;Tablet&quot;,<br />  &quot;price&quot;: 650<br />}</code></p>
  <p id="lLBz"></p>
  <h4 id="TSMr">Что такое timestamp?</h4>
  <p id="9Nst"><strong>Timestamp</strong> — это отметка времени, которая используется для фиксации даты и времени события. В REST timestamp часто используется для отображения времени создания или обновления данных.</p>
  <p id="mFBf">Пример timestamp: <code>2024-10-10T12:34:56Z</code>. Здесь:</p>
  <ul id="oYIm">
    <li id="UlHW"><code>2024-10-10</code> — дата (год-месяц-день),</li>
    <li id="65Sl"><code>T</code> — разделитель между датой и временем,</li>
    <li id="ZqJD"><code>12:34:56</code> — время (часы:минуты:секунды),</li>
    <li id="Jibg"><code>Z</code> — это символ времени по Гринвичу (UTC).</li>
  </ul>
  <p id="imen"></p>
  <h4 id="vCmj">Заключение</h4>
  <p id="8UWX">REST и JSON — это основа современных веб-приложений. REST описывает, как клиент и сервер должны взаимодействовать, а JSON помогает передавать данные в понятном виде. HTTP-запросы, такие как GET, POST, PUT, PATCH и DELETE, позволяют выполнять основные операции с данными. XML — старый формат, который используется реже. А идемпотентность — это свойство запросов, которое гарантирует одинаковый результат при повторении операции.</p>

]]></content:encoded></item></channel></rss>