Доброго всем! У нас открылся новый курс, в рамках, которого мы решили попробовать новый для нас формат — открытые уроки по разным темам, доступные для всех. В понедельник прошло первое занятие такого формата, запись которого мы вам представляем. Под катом доступно краткое изложение теории и ссылка на проект.
Добрый вечер, уважаемые слушатели. Сегодняшний вебинар мы начнем с программы курса “Разработчик JavaEE” в образовательном проекте Otus. В рамках текущего вебинара мы поверхностно пробежимся по основным блокам программы, сделав акценты лишь на основных технологиях, которые будут рассмотрены на занятиях, и постараемся избежать развития холивара на тему сравнения стека JavaEE и Spring. В этом курсе, я постарался учесть наиболее актуальные темы данного стека, которые активно применяются в корпоративном секторе и будут полезны для специалиста данной области. Особенность курса заключается в его практико-ориентированности, получение реальных навыков разработки приложений уровня Enterprise, а также разборе процессов, происходящих «под капотом» каждой из технологий. Программа данного курса доступна на сайте, где Вы можете найти детальную информацию о цели курса, его основных блоках с точностью до разбивки по занятиям и практическим работам, а также немного об авторе курса. Вполне логично начинать курс с инфраструктурных моментов данного стека, погрузиться в мир сервлет-контейнеров и аппликейш серверов, детально познакомившись с эталонными представителями Tomcat и GlassFish, соответственно. Также в данном блоке будут рассмотрены вопросы, посвященные уровню данных в трехуровневой модели приложения, и вопросам взаимодействия посредством распространенных форматов данных: XML и JSON. Во втором блоке мы познакомимся с веб-технологиями, которые включены в стек JavaEE, а именно Servlet API, JSP, современных веб-фреймворках, связанных технологиях HTML, JS, CSS. Третий блок посвящен сервисно-ориентированной архитектуре, где особое внимание будет уделено спецификациям JAX-WS и JAX-RS. Для блока бизнес-логики основные акценты будут сделаны над технологией EJB, а также вопросов организации очередей и их обработки средствами JMS. В пятом блоке мы познакомимся с немаловажными аспектами современных Enterprise приложений: обеспечение безопасности, логирование, тестирование и т.д. Финальным этапом изучения в рамках данного курса является выполнение проектной работы, которую следует рассматривать как этап создания собственного портфолио для будущей карьеры. По программе курса, думаю вполне достаточно, более детально мы познакомимся с ней еще на дне открытых дверей и разберем все интересующие Вас вопросы.
Поводом сегодняшней встречи послужила тема «Строим API, используя SOAP и REST-сервисы», которая оказалась победителем в предварительном голосовании. Действительно данная тема вызывает бурное обсуждение в кругах разработчиков и можно найти достаточно много полезной информации на просторах Интернет. Прежде, чем приступить к практической части вебинара, хочется немного погрузиться в теорию по данному вопросу и определить цель вебинара. Цель занятия заключается в получение навыков разработки JavaEE-приложений, предоставляющих API для внешнего пользования посредством SOAP и REST-сервисов.
Сперва давайте разберемся, что из себя представляет API, и как Вы понимаете его основное предназначение? API расшифровывается как Application Programming Interface и предоставляет доступ к некоторой функциональности системы с возможностью получения результата при передаче некоторых входных параметров. Прикладной интерфейс разработки возникает в тех случаях, когда разработанная функциональность может оказаться полезной для внешнего использования и для возможностей повторного переиспользования. В качестве известных API, можно отметить существующие решения в области социальных сетей (Vkontakte, Facebook, Instagram), брокерских систем, банковского сектора и т.д. При этом есть важная особенность разработки такой системы: когда мы разрабатываем привычные пользовательские приложения, мнение о системе формируется по внешним характеристикам таким, как спроектированный интерфейс приложения и ошибках, возникаемых в ходе его эксплутации. При разработке API следует также брать во внимание и еще не менее важный аспект (сродни удобству использования) – основной пользователь Вашего приложения будет другой разработчик или команда, которая хочет использовать Ваши наработки при развитии своего продукта. И здесь важно посмотреть на API со стороны потенциального пользователя, которому важно выполнить задачу, достигнув цель, минимизировав количество усилий при работе с API. В качестве потребителей такого функционала могут выступать совершенно разные платформы: веб-сайты, порталы, мобильные устройства, информационные системы, автомобили, игровые консоли и т.д. При этом всегда важно держать в голове такие основные моменты при разработке API как понятный протокол взаимодействия, используемый формат данных для коммуникаций, документирование предоставляемых сервисов, вопросы безопасности и многое другое. Вообще говоря, понятие API можно встретить в большом количестве областей, среди которых также имеет место SOA. Как Вы уже наверное успели догадаться, базовая архитектура SOA выглядит так: есть провайдер сервиса (будем называть его сервером), предоставляющим защищенный доступ к своим «услугам» для конечных потребителей (клиентов). Для того чтобы клиент не тратил много времени на поиск нужной ему функциональности, важно иметь каталог сервисов с описанием всех тонкостей протокола взаимодействия (список входных параметров и выходной результат с используемыми типами данных).
Среди известных подходов при разработке сервисов (они же веб-службы) получили распространение SOAP и REST-сервисы. Говоря о первых, следует сослаться на официальную документацию (https://docs.oracle.com/javase/7/docs/technotes/guides/xml/jax-ws/) по спецификации JAX-WS, определенную в стеке JavaEE. В данном случае, SOAP-сервис следует рассматривать как некоторую бизнес-логику, предоставляемую как сервис клиенту через поставщика услуг. В качестве основных реализаций данной спецификации следует отметить такие библиотеки как Metro, Apache CXF, Axis 2, Spring WS. В нашем случае мы познакомимся с возможностями Axis2 фреймворка (хотя в принципе библиотеки предоставляют схожий функционал с некоторыми различиями: в качестве самостоятельного задания может провести сравнительный анализ предоставляемых возможностей фреймворков). Как происходит разработка веб-сервиса на Java, мы посмотрим в практической части.
В отличие от SOAP, REST следует воспринимать не как строгий протокол, определяющий все аспекты взаимодействия клиентской и серверной стороны, а как архитектурный стиль разработки сервисов. Чем больше принципов, определенных автором REST Роем Филдингом, Вы соблюдаете при разработке сервисов, тем более RESTful-нее его можно считать. Среди известных реализаций следует обратить внимание на RESTEasy, Jersey и Restlet.
На этом месте мы закончим с теоретической частью и время приступать к практике.
Здесь комментарии излишни, чтобы посмотреть результат проделанного в рамках данного занятия следует обратиться к проекту, доступного на GitHub.По результатам вебинара, можно считать поставленную цель выполненной!
Спасибо за внимание! До новых встреч!
Как всегда приветствуем конструктивные тапки в комментариях или можно обсудить с преподавателем на дне открытых дверей.
Автор: MaxRokatansky