HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <ul><li><a>Определение</a></li>
1 <ul><li><a>Определение</a></li>
2 <li><a>Принципы работы и классификация</a><ul><li><a>Типы интерфейсов</a></li>
2 <li><a>Принципы работы и классификация</a><ul><li><a>Типы интерфейсов</a></li>
3 </ul></li>
3 </ul></li>
4 <li><a>Почему называется интерфейсом</a></li>
4 <li><a>Почему называется интерфейсом</a></li>
5 <li><a>API и надежные программные продукты</a></li>
5 <li><a>API и надежные программные продукты</a></li>
6 <li><a>Преимущества</a></li>
6 <li><a>Преимущества</a></li>
7 <li><a>REST API</a><ul><li><a>Web API</a></li>
7 <li><a>REST API</a><ul><li><a>Web API</a></li>
8 </ul></li>
8 </ul></li>
9 <li><a>Функции для интерфейса</a></li>
9 <li><a>Функции для интерфейса</a></li>
10 <li><a>Как вызвать</a></li>
10 <li><a>Как вызвать</a></li>
11 <li><a>Примеры</a></li>
11 <li><a>Примеры</a></li>
12 </ul><p>В процессе разработки программного обеспечения часто приходится иметь дело с API. Далее предстоит выяснить, что это такое, для чего используется, а также какие особенности имеет. Предложенные данные будут одинаково полезны как программистам и другим IT-специалистам, так и обычным пользователям.</p>
12 </ul><p>В процессе разработки программного обеспечения часто приходится иметь дело с API. Далее предстоит выяснить, что это такое, для чего используется, а также какие особенности имеет. Предложенные данные будут одинаково полезны как программистам и другим IT-специалистам, так и обычным пользователям.</p>
13 <h2>Определение</h2>
13 <h2>Определение</h2>
14 <p>API интерфейс - это своеобразный набор способов и правил, с помощью которых приложения будут обменивать друг с другом данными. Он представляет собой механизмы, предоставляющие возможность программным продуктам взаимодействовать между собой при помощи некоторых протоколов и определений.</p>
14 <p>API интерфейс - это своеобразный набор способов и правил, с помощью которых приложения будут обменивать друг с другом данными. Он представляет собой механизмы, предоставляющие возможность программным продуктам взаимодействовать между собой при помощи некоторых протоколов и определений.</p>
15 <p>API (или Application Programming Interface) - программный интерфейс приложения. Относительно API слово "приложение" относится к совершенно любому программному обеспечению с теми или иными функциями. Некоторые разработчики рассматривают изучаемый интерфейс в качестве сервисного контракта между двумя программами. он определяет особенности взаимодействия приложений при помощи запросов и ответов. В документации API содержится информация о том, как программистам необходимо структурировать соответствующие ответы и запросы.</p>
15 <p>API (или Application Programming Interface) - программный интерфейс приложения. Относительно API слово "приложение" относится к совершенно любому программному обеспечению с теми или иными функциями. Некоторые разработчики рассматривают изучаемый интерфейс в качестве сервисного контракта между двумя программами. он определяет особенности взаимодействия приложений при помощи запросов и ответов. В документации API содержится информация о том, как программистам необходимо структурировать соответствующие ответы и запросы.</p>
16 <p>В качестве примера API можно рассматривать покупку билетов в кинотеатр по банковской карте. Во время проведения сделки терминал обратится к банковскому API (банку, который выпустил "пластик" покупателя), а затем отправит запрос на оплату. При заказе такси посредством специализированных приложений тоже предстоит иметь дело с программным интерфейсом. Сервис вызова обратится к платежной системе через API.</p>
16 <p>В качестве примера API можно рассматривать покупку билетов в кинотеатр по банковской карте. Во время проведения сделки терминал обратится к банковскому API (банку, который выпустил "пластик" покупателя), а затем отправит запрос на оплату. При заказе такси посредством специализированных приложений тоже предстоит иметь дело с программным интерфейсом. Сервис вызова обратится к платежной системе через API.</p>
17 <h2>Принципы работы и классификация</h2>
17 <h2>Принципы работы и классификация</h2>
18 <p>АПИ архитектура чаще всего объясняется с позиции клиент-серверной модели. Программа, отправляющая запросы - это клиент. Приложение, которое получает запросы и отправляет ответы - сервер.</p>
18 <p>АПИ архитектура чаще всего объясняется с позиции клиент-серверной модели. Программа, отправляющая запросы - это клиент. Приложение, которое получает запросы и отправляет ответы - сервер.</p>
19 <p>Способы работы АПИ отличаются. Они зависят от того, когда и почему они были сформированы:</p>
19 <p>Способы работы АПИ отличаются. Они зависят от того, когда и почему они были сформированы:</p>
20 <ol><li>SOAP API или Simple Object Access Protocol. Это простой протокол доступа к объектам. Обмен данными в этом случае будет осуществляться через XML. Соответствующий интерфейс устарел. Сейчас он является наименее гибким из всех существующих.</li>
20 <ol><li>SOAP API или Simple Object Access Protocol. Это простой протокол доступа к объектам. Обмен данными в этом случае будет осуществляться через XML. Соответствующий интерфейс устарел. Сейчас он является наименее гибким из всех существующих.</li>
21 <li>RPC. Система удаленного вызова процедур. Клиент будет выполнять определенную функцию на сервере, а сервер отправит получившийся результат обратно на клиентскую сторону.</li>
21 <li>RPC. Система удаленного вызова процедур. Клиент будет выполнять определенную функцию на сервере, а сервер отправит получившийся результат обратно на клиентскую сторону.</li>
22 <li>Websocket. Современная разработка АПИ интерфейса. Для передачи данных в ней используются JSON-объекты. Websocket предусматривает двустороннюю связь в клиент-серверных моделях. Серверы смогут отправлять сообщения обратного вызова подключенным клиентам. За счет такого подхода удается добиться максимальной эффективности работы схемы.</li>
22 <li>Websocket. Современная разработка АПИ интерфейса. Для передачи данных в ней используются JSON-объекты. Websocket предусматривает двустороннюю связь в клиент-серверных моделях. Серверы смогут отправлять сообщения обратного вызова подключенным клиентам. За счет такого подхода удается добиться максимальной эффективности работы схемы.</li>
23 <li>REST API. Это самые популярные и распространенные интерфейсы приложений. Они широко используются в Интернете. Здесь клиент отправляет запросы на серверную сторону в виде тех или иных данных. Сервер получает клиентский ввод и обрабатывает его для запуска внутренних функций. Далее происходит возврат выходных данных на клиентскую сторону.</li>
23 <li>REST API. Это самые популярные и распространенные интерфейсы приложений. Они широко используются в Интернете. Здесь клиент отправляет запросы на серверную сторону в виде тех или иных данных. Сервер получает клиентский ввод и обрабатывает его для запуска внутренних функций. Далее происходит возврат выходных данных на клиентскую сторону.</li>
24 </ol><p>Далее предстоит более подробно рассмотреть программные интерфейсы типа REST. Это связано с их широкой распространенностью.</p>
24 </ol><p>Далее предстоит более подробно рассмотреть программные интерфейсы типа REST. Это связано с их широкой распространенностью.</p>
25 <h3>Типы интерфейсов</h3>
25 <h3>Типы интерфейсов</h3>
26 <p>Что значит API простыми словами, понятно. Это интерфейс, помогающий двум программам обмениваться данными и взаимодействовать друг с другом. Классифицировать их можно так:</p>
26 <p>Что значит API простыми словами, понятно. Это интерфейс, помогающий двум программам обмениваться данными и взаимодействовать друг с другом. Классифицировать их можно так:</p>
27 <ol><li>Частные. К данной категории относятся интерфейсы приложений организаций. Они применяются только для того, чтобы соединить между собой системы и данные внутри бизнеса.</li>
27 <ol><li>Частные. К данной категории относятся интерфейсы приложений организаций. Они применяются только для того, чтобы соединить между собой системы и данные внутри бизнеса.</li>
28 <li>Общедоступные. Могут использоваться любым разработчиком или пользователем. С программными интерфейсами соответствующего типа может быть сопряжена покупка или авторизация.</li>
28 <li>Общедоступные. Могут использоваться любым разработчиком или пользователем. С программными интерфейсами соответствующего типа может быть сопряжена покупка или авторизация.</li>
29 <li>Партнерские. Доступ к ним предоставляется только авторизованным сторонним разработчикам. Используются подобные API для взаимодействия между несколькими предприятиями-партнерами.</li>
29 <li>Партнерские. Доступ к ним предоставляется только авторизованным сторонним разработчикам. Используются подобные API для взаимодействия между несколькими предприятиями-партнерами.</li>
30 <li>Составные. Объединяют два и более разных АПИ. Применяются для решения сложных системных требований или поведения.</li>
30 <li>Составные. Объединяют два и более разных АПИ. Применяются для решения сложных системных требований или поведения.</li>
31 </ol><p>В зависимости от типа программного интерфейса будет меняться область его применения и ключевые функции у API.</p>
31 </ol><p>В зависимости от типа программного интерфейса будет меняться область его применения и ключевые функции у API.</p>
32 <h2>Почему называется интерфейсом</h2>
32 <h2>Почему называется интерфейсом</h2>
33 <p>У некоторых разработчиков возникает вопрос о том, почему API - это интерфейс.</p>
33 <p>У некоторых разработчиков возникает вопрос о том, почему API - это интерфейс.</p>
34 <p>Данное описание произошло из определения интерфейсов. Так называется граница между несколькими (обычно - двумя) функциональными системами, на которой осуществляется взаимодействие и обмен данными. Сами процессы внутри каждой имеющейся системы скрыты друг от друга.</p>
34 <p>Данное описание произошло из определения интерфейсов. Так называется граница между несколькими (обычно - двумя) функциональными системами, на которой осуществляется взаимодействие и обмен данными. Сами процессы внутри каждой имеющейся системы скрыты друг от друга.</p>
35 <p>Благодаря такому компоненту, как interface, можно использовать возможности разных программных продуктов, не задумываясь об особенностях обработки запросов и формирования ответов. Пример - смартфон. Пользователю не нужно знать, как происходит обработка нажатия на тачскрин. Достаточно того, что на устройстве имеется кнопка, возвращающая всегда один и тот же результат в качестве ответа на определенные манипуляции.</p>
35 <p>Благодаря такому компоненту, как interface, можно использовать возможности разных программных продуктов, не задумываясь об особенностях обработки запросов и формирования ответов. Пример - смартфон. Пользователю не нужно знать, как происходит обработка нажатия на тачскрин. Достаточно того, что на устройстве имеется кнопка, возвращающая всегда один и тот же результат в качестве ответа на определенные манипуляции.</p>
36 <p>То же самое предоставляет API-интерфейс. Через его вызов допустимо выполнять определенные функции программы, не зная, как они работают на самом деле.</p>
36 <p>То же самое предоставляет API-интерфейс. Через его вызов допустимо выполнять определенные функции программы, не зная, как они работают на самом деле.</p>
37 <p>Пользователям неизвестно, как устроены внутри программы, с которыми они взаимодействуют. Реализация приложений называется "черным ящиком". Она прячется за несколькими уровнями абстракций. Это необходимо, чтобы пользователям было комфортно работать с теми или иными опциями приложения.</p>
37 <p>Пользователям неизвестно, как устроены внутри программы, с которыми они взаимодействуют. Реализация приложений называется "черным ящиком". Она прячется за несколькими уровнями абстракций. Это необходимо, чтобы пользователям было комфортно работать с теми или иными опциями приложения.</p>
38 <p>Уровни абстракций значительно ускоряют разработку программного обеспечения, поэтому разработчик может использовать вызов готовых функций API в других проектах. Это обычная практика. Пример - в большинстве операционных систем имеются собственные API для приложений, чтобы можно было:</p>
38 <p>Уровни абстракций значительно ускоряют разработку программного обеспечения, поэтому разработчик может использовать вызов готовых функций API в других проектах. Это обычная практика. Пример - в большинстве операционных систем имеются собственные API для приложений, чтобы можно было:</p>
39 <ul><li>использовать файловые системы;</li>
39 <ul><li>использовать файловые системы;</li>
40 <li>отрисовывать графические изображения;</li>
40 <li>отрисовывать графические изображения;</li>
41 <li>хранить данные;</li>
41 <li>хранить данные;</li>
42 <li>пользоваться сетевыми функциями;</li>
42 <li>пользоваться сетевыми функциями;</li>
43 <li>воспроизводить видео и аудио и так далее.</li>
43 <li>воспроизводить видео и аудио и так далее.</li>
44 </ul><p>Операционные системы сами определят, какие функции вызывать и какие параметры передавать для реализации желаемый действий. Соответствующие принципы описываются в документации к API, с которой работают создатели различных программных продуктов. Отсутствие данной справочной информации делает использование изучаемого инструмента невозможным.</p>
44 </ul><p>Операционные системы сами определят, какие функции вызывать и какие параметры передавать для реализации желаемый действий. Соответствующие принципы описываются в документации к API, с которой работают создатели различных программных продуктов. Отсутствие данной справочной информации делает использование изучаемого инструмента невозможным.</p>
45 <p>Стоит обратить внимание на то, что, если вызов одного API для облачных вычислений станет быстрее извлекать квадратный корень, все использующие его программы тоже будут функционировать быстрее.</p>
45 <p>Стоит обратить внимание на то, что, если вызов одного API для облачных вычислений станет быстрее извлекать квадратный корень, все использующие его программы тоже будут функционировать быстрее.</p>
46 <h2>Преимущества</h2>
46 <h2>Преимущества</h2>
47 <p>API - мощный инструмент разработчика. Он имеет несколько ключевых преимуществ, за счет которых программисты активно им пользуются:</p>
47 <p>API - мощный инструмент разработчика. Он имеет несколько ключевых преимуществ, за счет которых программисты активно им пользуются:</p>
48 <ol><li>Предоставление доступа к готовым решениям и инструментам. Пример - можно запросить функции библиотеки для машинного обучения TensorFlow. С их помощью получится быстро создавать нейросети, не занимаясь их разработкой с нуля.</li>
48 <ol><li>Предоставление доступа к готовым решениям и инструментам. Пример - можно запросить функции библиотеки для машинного обучения TensorFlow. С их помощью получится быстро создавать нейросети, не занимаясь их разработкой с нуля.</li>
49 <li>Повышение безопасности. Вызов API дает возможность вынести в отдельную программу функциональность, нуждающуюся в защите. Данный прием позволяет свести к минимуму вероятность некорректного использования команд и процедур другими приложениями.</li>
49 <li>Повышение безопасности. Вызов API дает возможность вынести в отдельную программу функциональность, нуждающуюся в защите. Данный прием позволяет свести к минимуму вероятность некорректного использования команд и процедур другими приложениями.</li>
50 <li>Связь разных систем. Если к сайту нужно подключить платежную систему или авторизацию при помощи социальных сетей, на помощь придет API. Разрабатывать соответствующие функциональности с нуля не придется.</li>
50 <li>Связь разных систем. Если к сайту нужно подключить платежную систему или авторизацию при помощи социальных сетей, на помощь придет API. Разрабатывать соответствующие функциональности с нуля не придется.</li>
51 <li>Снижение стоимости разработки. иногда дешевле пользоваться платными API, чем создавать необходимую функциональность с нуля.</li>
51 <li>Снижение стоимости разработки. иногда дешевле пользоваться платными API, чем создавать необходимую функциональность с нуля.</li>
52 </ol><p>Это - основные преимущества изучаемого инструмента. С помощью API можно быстро и эффективно создавать достаточно сложные и безопасные проекты.</p>
52 </ol><p>Это - основные преимущества изучаемого инструмента. С помощью API можно быстро и эффективно создавать достаточно сложные и безопасные проекты.</p>
53 <h2>REST API</h2>
53 <h2>REST API</h2>
54 <p>REST API - Representational State Transfer или "передача репрезентативного состояния". С помощью данного механизма можно определить набор функций, таких как Delete, Get, Put и так далее. Клиенты могут пользоваться ими для доступа к информации, хранящейся на сервере. Клиенты и серверы будут обмениваться данными в интерфейсах программ REST API через протоколы HTTP.</p>
54 <p>REST API - Representational State Transfer или "передача репрезентативного состояния". С помощью данного механизма можно определить набор функций, таких как Delete, Get, Put и так далее. Клиенты могут пользоваться ими для доступа к информации, хранящейся на сервере. Клиенты и серверы будут обмениваться данными в интерфейсах программ REST API через протоколы HTTP.</p>
55 <p>Основным преимуществом такого интерфейса является то, что передача данных производится без сохранения состояния. Это значит, что серверная часть проекта не сохраняет клиентскую информацию между запросами. Клиентские запросы к серверу будут аналогичными URL-адресам, который вводятся в браузере при посещении веб-сайтов. Ответ от сервера - это простые данные без типичного графического отображения страницы.</p>
55 <p>Основным преимуществом такого интерфейса является то, что передача данных производится без сохранения состояния. Это значит, что серверная часть проекта не сохраняет клиентскую информацию между запросами. Клиентские запросы к серверу будут аналогичными URL-адресам, который вводятся в браузере при посещении веб-сайтов. Ответ от сервера - это простые данные без типичного графического отображения страницы.</p>
56 <h3>Web API</h3>
56 <h3>Web API</h3>
57 <p>Web API или Web Service API - interface обработки приложений между сервером и браузером. Все веб-сервисы - это программные интерфейсы, но не все АПИ - это сервисы. REST API - особый тип Web API. В нем применяется стандартная архитектура.</p>
57 <p>Web API или Web Service API - interface обработки приложений между сервером и браузером. Все веб-сервисы - это программные интерфейсы, но не все АПИ - это сервисы. REST API - особый тип Web API. В нем применяется стандартная архитектура.</p>
58 <p>Термины и определения, которые относятся к АПИ (Java API или сервисные API), поддерживаются из-за того, что исторически program interfaces были созданы для Интернета. Современные Web API - это REST API. Соответствующие термины могут применяться в качестве синонимов.</p>
58 <p>Термины и определения, которые относятся к АПИ (Java API или сервисные API), поддерживаются из-за того, что исторически program interfaces были созданы для Интернета. Современные Web API - это REST API. Соответствующие термины могут применяться в качестве синонимов.</p>
59 <h2>Функции для интерфейса</h2>
59 <h2>Функции для интерфейса</h2>
60 <p>Ограничений по используемым наборам функций для рассматриваемого инструмента нет. Программисты включают в АПИ методы, которые будут полезны для взаимодействия клиентских приложений с их сервисом.</p>
60 <p>Ограничений по используемым наборам функций для рассматриваемого инструмента нет. Программисты включают в АПИ методы, которые будут полезны для взаимодействия клиентских приложений с их сервисом.</p>
61 <p>Пример - в АПИ для анализа текстов будут добавлены функции:</p>
61 <p>Пример - в АПИ для анализа текстов будут добавлены функции:</p>
62 <ul><li>поиска однокоренных слов;</li>
62 <ul><li>поиска однокоренных слов;</li>
63 <li>подсчета союзов и иных частей речи;</li>
63 <li>подсчета союзов и иных частей речи;</li>
64 <li>обнаружения самых часто встречающихся словосочетаний или слов.</li>
64 <li>обнаружения самых часто встречающихся словосочетаний или слов.</li>
65 </ul><p>Функции API могут решать не только утилитарные задачи конкретного программного обеспечения. Данный инструмент может послужить маркетинговым компонентом. Это происходит тогда, когда доступ к АПИ предлагается в качестве отдельной услуги.</p>
65 </ul><p>Функции API могут решать не только утилитарные задачи конкретного программного обеспечения. Данный инструмент может послужить маркетинговым компонентом. Это происходит тогда, когда доступ к АПИ предлагается в качестве отдельной услуги.</p>
66 <h2>Как вызвать</h2>
66 <h2>Как вызвать</h2>
67 <p>Вызов API - несложная операция. Данный процесс обычно описывается документацией АПИ. Принципы работы с программными интерфейсами остаются примерно одинаковыми.</p>
67 <p>Вызов API - несложная операция. Данный процесс обычно описывается документацией АПИ. Принципы работы с программными интерфейсами остаются примерно одинаковыми.</p>
68 <p>Вот пример вызова методов библиотек на Python:</p>
68 <p>Вот пример вызова методов библиотек на Python:</p>
69 <p>Если API предоставляет функции через Интернет, нужно отправить на сервер HTTP-запрос в JSON-формате:</p>
69 <p>Если API предоставляет функции через Интернет, нужно отправить на сервер HTTP-запрос в JSON-формате:</p>
70 <p>Выше - пример преобразования речи через Yandex.SpeechKit. Предложенный фрагмент кода можно запустить, чтобы посмотреть результат.</p>
70 <p>Выше - пример преобразования речи через Yandex.SpeechKit. Предложенный фрагмент кода можно запустить, чтобы посмотреть результат.</p>
71 <p>Существуют косвенные вызовы АПИ - в этом случае вызов осуществляется через посредников. Пример - пользователь нажимает на кнопку "Обновить" в браузере. Здесь взаимодействие осуществляется не напрямую, а посредством графического интерфейса.</p>
71 <p>Существуют косвенные вызовы АПИ - в этом случае вызов осуществляется через посредников. Пример - пользователь нажимает на кнопку "Обновить" в браузере. Здесь взаимодействие осуществляется не напрямую, а посредством графического интерфейса.</p>
72 <h2>Примеры</h2>
72 <h2>Примеры</h2>
73 <p>Обмен данными через АПИ - стандартная процедура. Она встречается повсеместно. Пример - нужно получить данные с существующего сайта и передать ее в то или иное приложение.</p>
73 <p>Обмен данными через АПИ - стандартная процедура. Она встречается повсеместно. Пример - нужно получить данные с существующего сайта и передать ее в то или иное приложение.</p>
74 <p>В браузере будет дан запрос и ожидаться ответ в качестве HTML-страницы. При применении API в сторонней программе достаточно фрагмента данных в JSON-формате. Более точную информацию нужно уточнять в документации у создателя интерфейса.</p>
74 <p>В браузере будет дан запрос и ожидаться ответ в качестве HTML-страницы. При применении API в сторонней программе достаточно фрагмента данных в JSON-формате. Более точную информацию нужно уточнять в документации у создателя интерфейса.</p>
75 <p>Со стороны пользователя такая реализация выглядит как возможность выполнить действие, связанное с первое программой, но во втором приложении. Лишний раз переходить в стороннее ПО не придется.</p>
75 <p>Со стороны пользователя такая реализация выглядит как возможность выполнить действие, связанное с первое программой, но во втором приложении. Лишний раз переходить в стороннее ПО не придется.</p>
76 <p>Вот несколько частных случаев использования изучаемого инструмента на практике:</p>
76 <p>Вот несколько частных случаев использования изучаемого инструмента на практике:</p>
77 <ol><li>Google Calendar. Здесь можно синхронизировать данные через Apple iCal и Google Calendar для Android и iOS. Календарь с легкостью подключается к сторонним программам через специальный интерфейс. Пользователи за счет такой интеграции смогут использовать несколько разных приложений со схожей функциональностью и обновлять данные о собственных планах.</li>
77 <ol><li>Google Calendar. Здесь можно синхронизировать данные через Apple iCal и Google Calendar для Android и iOS. Календарь с легкостью подключается к сторонним программам через специальный интерфейс. Пользователи за счет такой интеграции смогут использовать несколько разных приложений со схожей функциональностью и обновлять данные о собственных планах.</li>
78 <li>Прогноз погоды. Данная категория приложений получает информацию о погоде из сторонних источников. Есть проекты, которые напрямую взаимодействуют с метеостанциями. Мобильные разработчики покупают соответствующие сведения и внедряют их в собственные сервисы. Для упрощения таких операций имеются специальные API. Они поддерживают функции, позволяющие делать запросы о погоде в определенных областях.</li>
78 <li>Прогноз погоды. Данная категория приложений получает информацию о погоде из сторонних источников. Есть проекты, которые напрямую взаимодействуют с метеостанциями. Мобильные разработчики покупают соответствующие сведения и внедряют их в собственные сервисы. Для упрощения таких операций имеются специальные API. Они поддерживают функции, позволяющие делать запросы о погоде в определенных областях.</li>
79 <li>Авторизация. Речь идет о кнопках, которые позволяют зарегистрироваться на сервисах через популярные площадки (чаще - социальные сети). Это делается через API.</li>
79 <li>Авторизация. Речь идет о кнопках, которые позволяют зарегистрироваться на сервисах через популярные площадки (чаще - социальные сети). Это делается через API.</li>
80 </ol><p>Программный интерфейс API встречается повсеместно. Его основы уже были рассмотрены. А более детально изучить данный инструмент разработчика помогут компьютерные онлайн-курсы.</p>
80 </ol><p>Программный интерфейс API встречается повсеместно. Его основы уже были рассмотрены. А более детально изучить данный инструмент разработчика помогут компьютерные онлайн-курсы.</p>
81 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
81 <p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a>Otus</a>!</em> </p>
82  
82