0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Веб-приложения постоянно обрабатывают запросы от веб-клиентов и формируют ответы. Эти действия одинаково реализуются во всех веб-приложениях. Чтобы не копировать в проектах один и тот же код, такие действия выносятся в библиотеки, которые называются<strong>микрофреймворками</strong>.</p>
1
<p>Веб-приложения постоянно обрабатывают запросы от веб-клиентов и формируют ответы. Эти действия одинаково реализуются во всех веб-приложениях. Чтобы не копировать в проектах один и тот же код, такие действия выносятся в библиотеки, которые называются<strong>микрофреймворками</strong>.</p>
2
<p>В этом уроке разберем микрофреймворк Fiber. Мы расскажем, чем он помогает разработчикам и как на нем реализовать веб-приложение.</p>
2
<p>В этом уроке разберем микрофреймворк Fiber. Мы расскажем, чем он помогает разработчикам и как на нем реализовать веб-приложение.</p>
3
<h2>Что такое микрофреймворк Fiber</h2>
3
<h2>Что такое микрофреймворк Fiber</h2>
4
<p>Схема работы веб-приложения выглядит следующим образом:</p>
4
<p>Схема работы веб-приложения выглядит следующим образом:</p>
5
<ol><li>Разбор входящих запросов</li>
5
<ol><li>Разбор входящих запросов</li>
6
<li>Поиск обработчика по пути запроса</li>
6
<li>Поиск обработчика по пути запроса</li>
7
<li>Выполнение логики обработчика</li>
7
<li>Выполнение логики обработчика</li>
8
<li>Формирование и отправка ответа</li>
8
<li>Формирование и отправка ответа</li>
9
</ol><p>Первый, второй и четвертый шаги реализуются схоже во всех веб-приложениях. И чтобы не повторяться в каждом проекте, их выносят в микрофреймворки. Так веб-разработчики могут сосредоточиться на бизнес-логике приложений - на коде внутри обработчиков запросов.</p>
9
</ol><p>Первый, второй и четвертый шаги реализуются схоже во всех веб-приложениях. И чтобы не повторяться в каждом проекте, их выносят в микрофреймворки. Так веб-разработчики могут сосредоточиться на бизнес-логике приложений - на коде внутри обработчиков запросов.</p>
10
<p>В языке Go есть много микрофреймворков. Они отличаются мелкими деталями. Например, разной структурой объектов запроса. Один из самых популярных микрофреймворков на Go -<strong>Fiber</strong>. Он позволяет быстро писать высокопроизводительные веб-приложения с помощью того, что запросы и ответы эффективно обрабатываются.</p>
10
<p>В языке Go есть много микрофреймворков. Они отличаются мелкими деталями. Например, разной структурой объектов запроса. Один из самых популярных микрофреймворков на Go -<strong>Fiber</strong>. Он позволяет быстро писать высокопроизводительные веб-приложения с помощью того, что запросы и ответы эффективно обрабатываются.</p>
11
<p>Микрофреймворк ценится программистами, так как упрощает разработку. Поэтому важно разобраться, как на нем реализуется веб-приложение.</p>
11
<p>Микрофреймворк ценится программистами, так как упрощает разработку. Поэтому важно разобраться, как на нем реализуется веб-приложение.</p>
12
<h2>Как реализовать веб-приложение на Fiber</h2>
12
<h2>Как реализовать веб-приложение на Fiber</h2>
13
<p>Посмотрим, как Fiber упрощает реализацию веб-приложения. Представим, что у нас есть страница с адресом компании:</p>
13
<p>Посмотрим, как Fiber упрощает реализацию веб-приложения. Представим, что у нас есть страница с адресом компании:</p>
14
<p>Запускаем веб-приложение, открываем браузер и переходим на страницу<em><a>http://localhost/address</a></em>- получаем в ответ строку "145 DUNDEE SOUTH SAN FRANCISCO CA 94080-1023. USA".</p>
14
<p>Запускаем веб-приложение, открываем браузер и переходим на страницу<em><a>http://localhost/address</a></em>- получаем в ответ строку "145 DUNDEE SOUTH SAN FRANCISCO CA 94080-1023. USA".</p>
15
<p>Разберем, как данный пример ложится на общую схему работы веб-приложений:</p>
15
<p>Разберем, как данный пример ложится на общую схему работы веб-приложений:</p>
16
<ol><li>Разбор входящих запросов</li>
16
<ol><li>Разбор входящих запросов</li>
17
<li>Поиск обработчика по пути запроса</li>
17
<li>Поиск обработчика по пути запроса</li>
18
</ol><p>Эти пункты выполняются в следующей строке:</p>
18
</ol><p>Эти пункты выполняются в следующей строке:</p>
19
<p>Здесь обработчик должен вызваться при получении GET запроса по пути "/address". При этом логика, где разбирается запрос и сопоставляются пути с обработчиком, находится в микрофреймворке Fiber, а мы используем готовые функции.</p>
19
<p>Здесь обработчик должен вызваться при получении GET запроса по пути "/address". При этом логика, где разбирается запрос и сопоставляются пути с обработчиком, находится в микрофреймворке Fiber, а мы используем готовые функции.</p>
20
<p>Следующие два шага:</p>
20
<p>Следующие два шага:</p>
21
<ol><li>Выполнение логики обработчика</li>
21
<ol><li>Выполнение логики обработчика</li>
22
<li>Формирование и отправка ответа</li>
22
<li>Формирование и отправка ответа</li>
23
</ol><p>В примере выше эти пункты тоже описываются одной строкой:</p>
23
</ol><p>В примере выше эти пункты тоже описываются одной строкой:</p>
24
<p>Большую часть времени веб-разработчики пишут код внутри обработчиков. При этом используют готовые библиотеки для удобства и эффективности. В нашем примере не нужно писать низкоуровневый код по передаче байт в сетевом соединении для ответа. Мы вызываем функцию из Fiber c.SendString(), которая сделает всё за нас.</p>
24
<p>Большую часть времени веб-разработчики пишут код внутри обработчиков. При этом используют готовые библиотеки для удобства и эффективности. В нашем примере не нужно писать низкоуровневый код по передаче байт в сетевом соединении для ответа. Мы вызываем функцию из Fiber c.SendString(), которая сделает всё за нас.</p>
25
<p>Теперь мы знаем, как реализовать веб-приложение на Fiber. Он заметно упрощает разработку, так как готовые библиотеки с функциями частично выполняют работу программиста.</p>
25
<p>Теперь мы знаем, как реализовать веб-приложение на Fiber. Он заметно упрощает разработку, так как готовые библиотеки с функциями частично выполняют работу программиста.</p>
26
<p>Упрощенно логика обработчика выглядит так: прочитай запрос и отдай ответ. Поэтому важно знать, как работать с запросами и ответами в используемом микрофреймворке. Рассмотрим, как это делается в Fiber.</p>
26
<p>Упрощенно логика обработчика выглядит так: прочитай запрос и отдай ответ. Поэтому важно знать, как работать с запросами и ответами в используемом микрофреймворке. Рассмотрим, как это делается в Fiber.</p>
27
<h2>Как работать с запросами и ответами в Fiber</h2>
27
<h2>Как работать с запросами и ответами в Fiber</h2>
28
<p>В стандартном пакете net/http запрос и ответ разделены в разные структуры. В Fiber все нужное содержится в одной структуре *fiber.Ctx. Если использовать ее, можно читать параметры и тело запроса, а также отправлять любые ответы.</p>
28
<p>В стандартном пакете net/http запрос и ответ разделены в разные структуры. В Fiber все нужное содержится в одной структуре *fiber.Ctx. Если использовать ее, можно читать параметры и тело запроса, а также отправлять любые ответы.</p>
29
<p>Разберем работу с запросом и ответом в Fiber на примере. Представим, что нам нужно реализовать веб-приложение, у которого есть страница с профилями пользователей. Когда программа получает профиль, передается его идентификатор с помощью GET параметра profile_id.</p>
29
<p>Разберем работу с запросом и ответом в Fiber на примере. Представим, что нам нужно реализовать веб-приложение, у которого есть страница с профилями пользователей. Когда программа получает профиль, передается его идентификатор с помощью GET параметра profile_id.</p>
30
<p>Если profile_id не указан, то приложение должно возвращать ответ со статусом 422 (Unprocessable Entity) и текстом ошибки в теле. Если передается корректный profile_id, то возвращается строка с идентификатором профиля:</p>
30
<p>Если profile_id не указан, то приложение должно возвращать ответ со статусом 422 (Unprocessable Entity) и текстом ошибки в теле. Если передается корректный profile_id, то возвращается строка с идентификатором профиля:</p>
31
<p>Запускаем веб-приложение, открываем браузер и переходим на страницу<em><a>http://localhost/profiles</a></em>- получаем в ответ строку ошибки "profile_id is required".</p>
31
<p>Запускаем веб-приложение, открываем браузер и переходим на страницу<em><a>http://localhost/profiles</a></em>- получаем в ответ строку ошибки "profile_id is required".</p>
32
<p>Попробуем передать корректный идентификатор профиля. Переходим по ссылке<em><a>http://localhost/profiles?profile_id=300</a></em>- получаем в ответ строку "User Profile ID: 300".</p>
32
<p>Попробуем передать корректный идентификатор профиля. Переходим по ссылке<em><a>http://localhost/profiles?profile_id=300</a></em>- получаем в ответ строку "User Profile ID: 300".</p>
33
<p>Разберем подробнее код обработчика из данного примера.</p>
33
<p>Разберем подробнее код обработчика из данного примера.</p>
34
<p>По описанию веб-приложения от нас требовалось считывать GET параметр с идентификатором профиля. Это происходит в этой строке:</p>
34
<p>По описанию веб-приложения от нас требовалось считывать GET параметр с идентификатором профиля. Это происходит в этой строке:</p>
35
<p>Запросы, которые приходят на сервер, не всегда корректны. Поэтому profile_id может быть не указан или передан пустым значением. Мы обрабатываем такое ошибочное поведение и возвращаем ошибку:</p>
35
<p>Запросы, которые приходят на сервер, не всегда корректны. Поэтому profile_id может быть не указан или передан пустым значением. Мы обрабатываем такое ошибочное поведение и возвращаем ошибку:</p>
36
<p>Если получаем корректное значение profile_id, то возвращаем его в ответе:</p>
36
<p>Если получаем корректное значение profile_id, то возвращаем его в ответе:</p>
37
<p>В итоге у нас получилось считать GET-параметры запроса и отправить ответы с помощью микрофреймворка Fiber.</p>
37
<p>В итоге у нас получилось считать GET-параметры запроса и отправить ответы с помощью микрофреймворка Fiber.</p>
38
<h2>Выводы</h2>
38
<h2>Выводы</h2>
39
<ul><li>Веб-приложения работают одинаково, поэтому разработчики используют микрофреймворки. С их помощью не нужно писать один и тот же код, чтобы обработать запросы</li>
39
<ul><li>Веб-приложения работают одинаково, поэтому разработчики используют микрофреймворки. С их помощью не нужно писать один и тот же код, чтобы обработать запросы</li>
40
<li>Fiber - один из популярных микрофреймворков на Go с интуитивными функциями и высокой производительностью</li>
40
<li>Fiber - один из популярных микрофреймворков на Go с интуитивными функциями и высокой производительностью</li>
41
<li>Обработчика на GET HTTP-запросы настраивают через вызов функции Get("/path", func(c *fiber.Ctx) error {})</li>
41
<li>Обработчика на GET HTTP-запросы настраивают через вызов функции Get("/path", func(c *fiber.Ctx) error {})</li>
42
<li>Вся информация о HTTP-запросе находится в структуре c *fiber.Ctx</li>
42
<li>Вся информация о HTTP-запросе находится в структуре c *fiber.Ctx</li>
43
<li>Чтобы написать ответ, необходимо вызвать функцию c.SendString() у объекта контекста Fiber. При этом можно предварительно указать код статуса ответа функцией c.Status()</li>
43
<li>Чтобы написать ответ, необходимо вызвать функцию c.SendString() у объекта контекста Fiber. При этом можно предварительно указать код статуса ответа функцией c.Status()</li>
44
</ul>
44
</ul>