HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>REST API - это способ координации взаимных действий между клиентом и сервером, основанный на принципах архитектурного стиля REST. Такой подход использует стандартные возможности веб-протоколов, позволяя системам обмениваться ресурсами простым, единообразным образом.</p>
1 <p>REST API - это способ координации взаимных действий между клиентом и сервером, основанный на принципах архитектурного стиля REST. Такой подход использует стандартные возможности веб-протоколов, позволяя системам обмениваться ресурсами простым, единообразным образом.</p>
2 <h2>Определение стандарта REST</h2>
2 <h2>Определение стандарта REST</h2>
3 <p>REST (Representational State Transfer) - архитектурная модель для распределённых систем, предложенная в начале 2000-х. Её цель - сделать обмен информацией предсказуемым, лёгким в сопровождении и независимым от конкретных технологий. Ключевая идея состоит в том, что взаимодействие происходит через представления ресурсов. Каждый ресурс имеет адрес, а клиент может обращаться к нему, используя стандартные методы веб-протокола.</p>
3 <p>REST (Representational State Transfer) - архитектурная модель для распределённых систем, предложенная в начале 2000-х. Её цель - сделать обмен информацией предсказуемым, лёгким в сопровождении и независимым от конкретных технологий. Ключевая идея состоит в том, что взаимодействие происходит через представления ресурсов. Каждый ресурс имеет адрес, а клиент может обращаться к нему, используя стандартные методы веб-протокола.</p>
4 <h3>Основные принципы</h3>
4 <h3>Основные принципы</h3>
5 <ul><li><strong>Отсутствие состояния (stateless).</strong>Предыдущие запросы сервер не хранит; каждое обращение содержит всё необходимое.</li>
5 <ul><li><strong>Отсутствие состояния (stateless).</strong>Предыдущие запросы сервер не хранит; каждое обращение содержит всё необходимое.</li>
6 <li><strong>Единый интерфейс.</strong>Методы и структуры запросов - стандартные.</li>
6 <li><strong>Единый интерфейс.</strong>Методы и структуры запросов - стандартные.</li>
7 <li><strong>Использование ресурсов.</strong>У каждой сущности есть собственный URI.</li>
7 <li><strong>Использование ресурсов.</strong>У каждой сущности есть собственный URI.</li>
8 <li><strong>Кэширование.</strong>Клиент может сохранять ответы для ускорения работы.</li>
8 <li><strong>Кэширование.</strong>Клиент может сохранять ответы для ускорения работы.</li>
9 <li><strong>Разделение клиента и сервера.</strong>Системы более гибкими, поскольку интерфейсы независимы.</li>
9 <li><strong>Разделение клиента и сервера.</strong>Системы более гибкими, поскольку интерфейсы независимы.</li>
10 </ul><p>REST часто ассоциируют с CRUD-операциями: создание, получение, изменение, удаление сущностей.</p>
10 </ul><p>REST часто ассоциируют с CRUD-операциями: создание, получение, изменение, удаление сущностей.</p>
11 <h2>Архитектура REST API</h2>
11 <h2>Архитектура REST API</h2>
12 <p>API, построенный по этому принципу, опирается на структуры и правила веб-протокола.</p>
12 <p>API, построенный по этому принципу, опирается на структуры и правила веб-протокола.</p>
13 <h3>URI</h3>
13 <h3>URI</h3>
14 <p>Каждая сущность имеет уникальный адрес, например:</p>
14 <p>Каждая сущность имеет уникальный адрес, например:</p>
15 <p>Адрес отражает расположение и уровень вложенности объектов.</p>
15 <p>Адрес отражает расположение и уровень вложенности объектов.</p>
16 <h3>HTTP-методы</h3>
16 <h3>HTTP-методы</h3>
17 <p>Стандартные операции используют методы протокола:</p>
17 <p>Стандартные операции используют методы протокола:</p>
18 <ul><li><strong>GET</strong>- получение ресурса;</li>
18 <ul><li><strong>GET</strong>- получение ресурса;</li>
19 <li><strong>POST</strong>- создание объекта;</li>
19 <li><strong>POST</strong>- создание объекта;</li>
20 <li><strong>PUT</strong>- полное обновление;</li>
20 <li><strong>PUT</strong>- полное обновление;</li>
21 <li><strong>PATCH</strong>- частичное обновление;</li>
21 <li><strong>PATCH</strong>- частичное обновление;</li>
22 <li><strong>DELETE</strong>- удаление.</li>
22 <li><strong>DELETE</strong>- удаление.</li>
23 </ul><h3>Заголовки</h3>
23 </ul><h3>Заголовки</h3>
24 <p>В заголовках передаются технические параметры: формат данных, тип авторизации, информация о кэшировании.</p>
24 <p>В заголовках передаются технические параметры: формат данных, тип авторизации, информация о кэшировании.</p>
25 <h3>Ответ сервера</h3>
25 <h3>Ответ сервера</h3>
26 <p>Сервер возвращает сообщение с телом, кодом состояния, заголовками. Наиболее распространён формат - JSON, так как он лёгкий, понятный для большинства клиентов.</p>
26 <p>Сервер возвращает сообщение с телом, кодом состояния, заголовками. Наиболее распространён формат - JSON, так как он лёгкий, понятный для большинства клиентов.</p>
27 <h2>Примеры синтаксиса запросов</h2>
27 <h2>Примеры синтаксиса запросов</h2>
28 <p>Ниже несколько способов отправки запроса к API.</p>
28 <p>Ниже несколько способов отправки запроса к API.</p>
29 <h3>cURL</h3>
29 <h3>cURL</h3>
30 <h3>Python (requests)</h3>
30 <h3>Python (requests)</h3>
31 <h3>Postman</h3>
31 <h3>Postman</h3>
32 <p>В интерфейсе можно выбрать метод, задать адрес, указать параметры и посмотреть ответ в формате JSON.</p>
32 <p>В интерфейсе можно выбрать метод, задать адрес, указать параметры и посмотреть ответ в формате JSON.</p>
33 <p>Эти примеры показывают, что взаимодействие остаётся одинаковым вне зависимости от инструмента.</p>
33 <p>Эти примеры показывают, что взаимодействие остаётся одинаковым вне зависимости от инструмента.</p>
34 <h2>Безопасность REST API</h2>
34 <h2>Безопасность REST API</h2>
35 <p>Чтобы обезопасить передаваемую информацию, при создании интерфейсов взаимодействия важно уделять защитным техникам.</p>
35 <p>Чтобы обезопасить передаваемую информацию, при создании интерфейсов взаимодействия важно уделять защитным техникам.</p>
36 <h3>Аутентификация</h3>
36 <h3>Аутентификация</h3>
37 <p>Система должна надежно определять, кто обращается к ресурсу. Используются:</p>
37 <p>Система должна надежно определять, кто обращается к ресурсу. Используются:</p>
38 <ul><li>токены,</li>
38 <ul><li>токены,</li>
39 <li>ключи доступа,</li>
39 <li>ключи доступа,</li>
40 <li>одноразовые подписи.</li>
40 <li>одноразовые подписи.</li>
41 </ul><p>В веб-сервисах распространены схемы, основанные на передаче токена в заголовках.</p>
41 </ul><p>В веб-сервисах распространены схемы, основанные на передаче токена в заголовках.</p>
42 <h3>OAuth</h3>
42 <h3>OAuth</h3>
43 <p>Протокол, позволяющий выдавать сторонним приложениям ограниченные права. Пользователь подтверждает разрешение, а система выдает временный маркер, который дает доступ лишь к части возможностей.</p>
43 <p>Протокол, позволяющий выдавать сторонним приложениям ограниченные права. Пользователь подтверждает разрешение, а система выдает временный маркер, который дает доступ лишь к части возможностей.</p>
44 <h3>CORS</h3>
44 <h3>CORS</h3>
45 <p>Механизм, регулирующий обращение с других доменов. Он определяет, какие запросы разрешены и какие заголовки можно использовать.</p>
45 <p>Механизм, регулирующий обращение с других доменов. Он определяет, какие запросы разрешены и какие заголовки можно использовать.</p>
46 <h3>Ограничение частоты обращений</h3>
46 <h3>Ограничение частоты обращений</h3>
47 <p>Служит для защиты от перегрузок. Если клиент делает слишком много запросов, сервер может временно заблокировать его или вернуть код ошибки.</p>
47 <p>Служит для защиты от перегрузок. Если клиент делает слишком много запросов, сервер может временно заблокировать его или вернуть код ошибки.</p>
48 <h2>Документирование</h2>
48 <h2>Документирование</h2>
49 <p>Чтобы взаимодействие со службой было понятным, разработчики создают описание её возможностей.</p>
49 <p>Чтобы взаимодействие со службой было понятным, разработчики создают описание её возможностей.</p>
50 <h3>OpenAPI / Swagger</h3>
50 <h3>OpenAPI / Swagger</h3>
51 <p>Это форматы, в которых можно описать структуру запросов и ответов. На основе такого описания инструменты автоматически строят документацию, формируют интерфейс для тестирования, генерируют клиентские библиотеки.</p>
51 <p>Это форматы, в которых можно описать структуру запросов и ответов. На основе такого описания инструменты автоматически строят документацию, формируют интерфейс для тестирования, генерируют клиентские библиотеки.</p>
52 <h3>Практические рекомендации</h3>
52 <h3>Практические рекомендации</h3>
53 <ul><li>давать чёткие названия адресам;</li>
53 <ul><li>давать чёткие названия адресам;</li>
54 <li>указывать возможные коды состояния;</li>
54 <li>указывать возможные коды состояния;</li>
55 <li>описывать структуры объектов;</li>
55 <li>описывать структуры объектов;</li>
56 <li>приводить примеры корректных и ошибочных ответов.</li>
56 <li>приводить примеры корректных и ошибочных ответов.</li>
57 </ul><p>Хорошая документация снижает количество ошибок интеграции и упрощает работу со службой.</p>
57 </ul><p>Хорошая документация снижает количество ошибок интеграции и упрощает работу со службой.</p>
58 <h2>Преимущества и ограничения</h2>
58 <h2>Преимущества и ограничения</h2>
59 <p>Подход, основанный на REST-модели, стал популярным благодаря нескольким качествам.</p>
59 <p>Подход, основанный на REST-модели, стал популярным благодаря нескольким качествам.</p>
60 <h3>Преимущества</h3>
60 <h3>Преимущества</h3>
61 <ul><li>простота, основанная на известных веб-механизмах;</li>
61 <ul><li>простота, основанная на известных веб-механизмах;</li>
62 <li>гибкость, независимость от конкретных технологий;</li>
62 <li>гибкость, независимость от конкретных технологий;</li>
63 <li>хорошая читаемость адресов и взаимодействий;</li>
63 <li>хорошая читаемость адресов и взаимодействий;</li>
64 <li>возможность кэширования.</li>
64 <li>возможность кэширования.</li>
65 </ul><h3>Ограничения</h3>
65 </ul><h3>Ограничения</h3>
66 <ul><li>сложность при работе с сильно связанными структурами;</li>
66 <ul><li>сложность при работе с сильно связанными структурами;</li>
67 <li>необходимость большого числа обращений при запросе вложенных данных;</li>
67 <li>необходимость большого числа обращений при запросе вложенных данных;</li>
68 <li>в некоторых случаях - перегрузка сети из-за объёмных ответов.</li>
68 <li>в некоторых случаях - перегрузка сети из-за объёмных ответов.</li>
69 </ul><p>Для сложных графовых связей или потоковых сценариев выбирают альтернативные решения.</p>
69 </ul><p>Для сложных графовых связей или потоковых сценариев выбирают альтернативные решения.</p>
70 <h2>Современные тренды</h2>
70 <h2>Современные тренды</h2>
71 <p>Мир API развивается, и на первый план выходят новые подходы к построению сервисов.</p>
71 <p>Мир API развивается, и на первый план выходят новые подходы к построению сервисов.</p>
72 <h3>GraphQL</h3>
72 <h3>GraphQL</h3>
73 <p>Позволяет клиенту описывать, какие поля нужны. Это снижает объем передаваемой информации и уменьшает число запросов.</p>
73 <p>Позволяет клиенту описывать, какие поля нужны. Это снижает объем передаваемой информации и уменьшает число запросов.</p>
74 <h3>gRPC</h3>
74 <h3>gRPC</h3>
75 <p>Использует бинарный формат и двунаправленные потоки. Хорошо подходит для высоконагруженных систем, сервис-сервис взаимодействий, микросервисной архитектуры.</p>
75 <p>Использует бинарный формат и двунаправленные потоки. Хорошо подходит для высоконагруженных систем, сервис-сервис взаимодействий, микросервисной архитектуры.</p>
76 <h3>Serverless-подходы</h3>
76 <h3>Serverless-подходы</h3>
77 <p>Обработчики вызываются по требованию, а инфраструктура управляется автоматически. Такие решения упрощают масштабирование, уменьшают нагрузку на разработчиков.</p>
77 <p>Обработчики вызываются по требованию, а инфраструктура управляется автоматически. Такие решения упрощают масштабирование, уменьшают нагрузку на разработчиков.</p>
78 <h3>API-шлюзы</h3>
78 <h3>API-шлюзы</h3>
79 <p>Специальные компоненты, которые принимают внешние запросы, проверяют ключи доступа, ограничивают частоту обращений, перенаправляют потоки во внутренние службы.</p>
79 <p>Специальные компоненты, которые принимают внешние запросы, проверяют ключи доступа, ограничивают частоту обращений, перенаправляют потоки во внутренние службы.</p>
80 <h2>Заключение</h2>
80 <h2>Заключение</h2>
81 <p>REST API стал одним из самых распространённых способов организации взаимодействия в веб-среде. Он прост, предсказуем, хорошо подходит для широкого спектра задач. Вместе с тем появляются новые модели, которые решают ограничения классического подхода. Понимание принципов взаимодействия и знание современных инструментов позволяет выбирать оптимальную архитектуру для конкретного проекта.</p>
81 <p>REST API стал одним из самых распространённых способов организации взаимодействия в веб-среде. Он прост, предсказуем, хорошо подходит для широкого спектра задач. Вместе с тем появляются новые модели, которые решают ограничения классического подхода. Понимание принципов взаимодействия и знание современных инструментов позволяет выбирать оптимальную архитектуру для конкретного проекта.</p>