Backend

Backend #

Этот документ посвящён необходимым знаниям, относящихся к Java 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 из куки, и определяет, какой пользователь сделал запрос

Spring Boot по-умолчанию берёт всю работу с сессиями на себя, и хранит их в памяти. Поэтому, чтобы понимать как они работают, 5 проект реализует работу с сессиями без фреймворков.

JWT #

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

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

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

REST API #

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

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

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

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

Java #

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

Java Servlets #

Сервлет - сущность в Java, реализующая клиент-серверное взаимодействие со стороны сервера. Сервлет принимает соединения от клиентов, и отвечает на запросы.

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

  • Реализовывать сервлеты, пользуясь пакетом javax.servlet-api (или jakarta.servlet)
  • Запускать Java проект с сервлетами с помощью Tomcat

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

Spring #

Spring - основной фреймворк Java разработчика с долгой историей. Основная сложность - из-за возраста у фреймворка существует несколько версий (Spring начинал свою историю как Spring Mvc, позднее эволюционировал в Spring Boot), и одно и то же можно сделать несколькими способами, и новичку не всегда понятно, какой способ лучше.

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

  • Работать с базами данных
  • Реализовывать REST API
  • Создавать веб страницы
  • Библиотеки экосистемы Spring Boot - Spring Security, Spring Sessions

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

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

Шаблонизатор - инструмент создания веб-страниц с динамическим контентом. Классический пример - отображение на веб-странице информации, прочитанной из базы данных.

Для Java и Spring существует множество шаблонизаторов. Остановимся на двух из них, JSP - старый, классический инструмент, который уже не используется, но на примере которого можно понять основные идеи шаблонизации. Thymeleaf - современный и мощный инструмент.

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

  • Передавать данные из Java в шаблон
  • Thymyleaf - интеграция со Spring Boot, Thymeleaf фрагменты

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

Что дальше #

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

  • Websocket
  • XML, Protobuf
  • Альтернативны REST - SOAP, GRPC, GraphQL
  • Более новые Java фреймворки - Micronaut, Quarkus
  • Реактивный бэкенд - Spring Webflux