Backend

Backend #

Этот документ посвящён необходимым знаниям, относящихся к Go Backend, напрямую или косвенно.

Общие знания #

Владение общими знаниями хорошо тем, что они применимы к любой Backend платформе, будь то Java, .Net, NodeJS или другие.

Клиент-серверное взаимодействие, IP адреса, DNS #

Базовые идеи, о которых необходимо иметь общее представление. Что нужно знать:

  • Что такое IP адрес
  • Разница между TCP и UDP
  • Что такое TCP сокет
  • Клиент-серверное взаимодействие. Что именно происходит, когда браузер запрашивает страницу сайта
  • Что такое DNS

Избранные курсы и учебные ресурсы #

HTTP #

Главный протокол WEB.

Что нужно знать:

  • HTTP методы
  • Заголовки, cookies
  • Коды ответа
  • Form data, multipart form data

Избранные курсы и учебные ресурсы #

Авторизация #

При авторизации пользователя, бэкенд приложению необходимо авторизовывать запросы, и понимать, кто их делает. Например, при загрузке страницы личного кабинета, неавторизованному пользователю будет отказано в доступе, а авторизованному - показана его личная информация.

Для реализации этого на практике используется 2 основных идеи и способов “привязки” сессии текущего пользователя к клиентам (обычно, браузерам). Идеи:

  • Сессии
  • JWT

Способы привязки:

  • Cookies
  • HTTP заголовки

Сессии #

Классическая реализация:

  • Сессия генерируется при авторизации, сохраняется в БД (колонки - id, user id), ID сессии устанавливается клиенту через куку
  • При каждом запросе клиент отправляет куку, бэкенд приложение ищет сессию в БД по ID из куки, и определяет, какой пользователь сделал запрос

JWT #

JWT расшифровывается как Json Web Token. Информация о сессии целиком хранится внутри токена. При генерации токена он подписывается секретным ключом, который знает только бэкенд приложение, что позволяет защититься от его подделки.

Основное преимущество - JWT токены не хранятся со стороны бэкенда, а передаются целиком при каждом запросе.

Избранные курсы и учебные ресурсы #

REST API #

REST - набор правил взаимодействия клиента и сервера на основе HTTP. Сделать работающее клиент-серверное приложение легко, элегантно его спроектировать - сложно.

Что нужно знать:

  • Отличие RESTful от RESTless
  • Базовые дизайн принципы и типовые ошибки, которых следует избегать

Избранные курсы и учебные ресурсы #

Go #

Перейдём к знаниям, относящимся напрямую к Backend разработке на Go.

Go HTTP #

Необходимо изучить, как в go происходит обработка http запросов и документацию http библиотеки.

Что нужно уметь:

Избранные курсы и учебные ресурсы #

Frameworks #

В Go нет единого доминирующего фреймворка, как, например, Spring в Java. Вместо этого экосистема предлагает множество лёгких и специализированных библиотек - особенно для маршрутизации, - а базовый функционал веб-приложений (роутинг, middleware, обработка запросов/ответов и пр.) часто собирается из отдельных компонентов под конкретные задачи.

Что нужно уметь:

  • Работать с middleware
  • Работать с context
  • Уметь правильно составлять зависимости между компонентами приложений

Избранные курсы и учебные ресурсы #

  • Примеры таких библиотек:
  • Практика - проекты с 5 по 7

Шаблонизаторы веб-страниц #

Шаблонизатор - это механизм генерации HTML-разметки с динамическим содержимым. Типичный сценарий: встраивание данных из БД (например, списка постов или профиля пользователя) в заранее подготовленную HTML-структуру.

Go предоставляет встроенные пакеты text/template и html/template. Они компилируют шаблоны в AST и обеспечивают безопасную (с автоматическим экранированием) подстановку данных - без необходимости подключать сторонние зависимости.

Что нужно уметь:

  • Передавать данные из Go в шаблон

Избранные курсы и учебные ресурсы #

Что дальше #

Перечисленные выше знания и инструменты - база для Go Junior. Если есть желание и необходимость углубиться в Backend технологии, советую обратить внимание на:

  • Websocket
  • XML, Protobuf
  • Альтернативны REST - SOAP, GRPC, GraphQL
  • Очереди сообщений