«Свет» по заказу Java Web Services Framework Talk

Боуэн слишком долго, или первое, что в сводке:

  1. Рамки «легкие» или не может рассматриваться двумя способами: 1) количества самого тела кадра - такие , как небольшой баночки тонкая рамка без зависимости; 2) кадр получается ли с использованием различных удобного пользователя без блокировки ( «распорок» означает ссылка г - н Ван GuoWei человеческих слов )
  2. Только «легкие» слова не хватает свойства и использование рамы
  3. Для того, чтобы сказать, «легкий», старый код и фермеры, как правило, второй - является ли пользователь с помощью рамки для получения различных объектов без барьера
  4. Для того, чтобы «легкий» намеренно стройный кадр порой нежелательно.

ТЛ; др следующий текст блога

1. Прошлое и настоящее Веб-сервисы Java рамки

Время еще в 2000 году, старая ферма двор река сидит в Тяньцзине, дом 7, взял его жизни первых веб - сервисов, используя последние (год) технологии Java Servlet, и смещают тонкие (кажется) структур для борьбы с HttpServletResponse выход (Обида смотреть на N лет спустя  BeeTL , но не видит  RYTHM  внешнего вида), через шесть месяцев после того, как второй ямы при открытых веб - проекты, от  апача jarkata  откопал имя в  шаблоне скорости , решив дать свои собственному выходной кадр, третий проект ( под кодовым названием Kasino) еще год спустя полтора, не сказать, прямо на множестве  турбинных Apache  рамок услуг ( по оценкам , в настоящее время большинство людей не слышали эти рамки, но только из рамочной программы полученный Velocity и известный  Maven  известного компонент) рамок веб - служб Turbine здесь должны упомянуть еще один такой же период, его Sheng имя () было продолжено до сих пор:.? Struts, а также факторы аварии, старый код фермеры см маршрут Struts / JSP на этот раз был на турбины / скорости лодки, и этот маршрут будет дрейфовать прочь.

Это было более четко определено после использования Турбина концепции сельского хозяйства после того, как рамки веб - сервисов старый код постепенно начал наращивать, однако, после того, как отношения между шаблон MVC, а затем рамки Spring Web Services SpringMVC вниз и из промышленности , чтобы принять. К сожалению , после 2003 г. перестроил старый код встроенных систем и сельскохозяйственных Java веб - службы этой линии временно разошлись, пропустил много замечательных лет в этой области. код 2009-летний фермер вернулся к веб - разработки, и CakePHP первые три месяца боевых действий , оказался это не первый язык противников вселенной, решил вернуться и найти свою первую жену Ja. SSH уже процветает в рамках веб - сервисах Java, но старый код не сразу положить фермер в трюм оружия (и , конечно , не хотел столкнуть последний шаг на EJB ), решил изучить или зарезервирован для поиска дополнительных рамок, которые защищены , чтобы старый фермерский двор бежать в любовном PlayFramework. и сегодня pLAY2 разные,  то Play  дает удивительное чувство, самое захватывающее из нескольких функций :

  1. Разработка модели тепловой нагрузки - это нормально после перезагрузки точки изменения ошибки непосредственно в браузере - нет необходимости перезапустить службу без необходимости перезапуска службы без необходимости перезапуска службы !!!

  2. произошла ошибка модели развития в прямой линии кода веб-страницы ошибок выделенному - не использовал эту функцию, как ожидается, будет трудно развить интуитивное понятие, здесь игра страницы ошибок, вы можете попробовать:

3. Ни одна модель государства - служба Сессия не заканчивается, не делают никакого смысла нарушения и масштаба

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

Время летит, таких как электричество, а затем быстро вступаем во второе десятилетие 21 - го века. Если первое десятилетие двадцатого века заложили основу для рамок веб - сервисов Java, то есть второе десятилетие рамках веб - служб противовыбросового Java. TechEmpower последнего выпуск  Java Micro / полный стек веб - службы рамочных  тридцать видов. внутренний  JFinalNutzRedKaleTiO-MVC  и другие каркасы также все мужчины, и поскольку промышленность снова процветает (весна и осень) сцена.

2. «легкая» учитывая (дискриминация) справедливость

Однажды, «легкие» слова всплыли. Трассировка своих корней, и обеспокоены EJB примерно год. Сельское хозяйство было словами старого кода Java лояльного насоса, но пересекли за J2EE, концепция EJB это приносит и сельскохозяйственные операции настолько старый код был очень неудобно. это была смелой последующим отклоняющейся тоже J2EE заявлением, промышленность нуждается в более легкую раме, и , таким образом , SpringFramework возникла, можно сказать , «легкий» раньше этот атрибут был первоначально модификацией весны Однако цветение до 10 лет в IT времени также рассматриваются как болота, старый Pianpianshaonian Lang весна теперь стала пожилым дядей жирной, и выглядит как «легкая» рано прощаться, но против того , меченой «весомости «ярлык.» , как он применил Bishen « в тот момент ряд структур (или других инструментов) , кажется , хорошо разбирающийся Gusumurong трюк, стал новым поколением» легких „продуктов, таких как , если без“ легкие «слова люди не будут счастливы. Скажите , что вы верите, и если нет, пожалуйста , нажмите здесь , или что есть другие, более сложные выражения, такие как» Крошка «» не зависящих от «» минималистский «» скорость " и даже «Xxx дневник» и так далее, для того , чтобы испечь внезапно «легкие» это Вопрос. Что, что это «легкий», старый код фермеры думали очень четкую концепцию, отражают на три, но оказался на том понимании , на самом деле не ясно. Поэтому решил написать этот пост под их собственного мышления на этом описании блога

«Легкий», который является тяжелым, «светом», а не полагаться на небольшом пакете банка должен быть легче. Следующий вопрос: почему «свет» или «свет» для разработки / обслуживания, какие выгоды. Если определение пределов количества света «и менее зависимого от небольшого пакета банки» (далее по тексту тонких и рамов), преимущества обычно могут иметь непосредственный доступ к:

  1. Простота в использовании
  2. Простота отладки
  3. Уменьшить или даже устранить возможно полагаться слишком много из-за конфликтов, вызванных версии
  4. При необходимости, в целях содействия разработке расширений, или даже непосредственно изменить код магии ядра

Однако мир не является постоянным и вольные хлеба, нет серебряной пули, на вершине «легкий» в глубине мышления продолжается, там будет не то же самое, как найти один за другим разбить его:

  1. Простота в использовании - конечно же, не может быть лучше для новичка, но начинающий лишь этап, но очень небольшая часть карьеры этапе программиста легко использовать конечно, очень важно, но в качестве главной цели для разработки рамок не очень необходимо. с другой стороны, это не только просты в использовании, но и запатентовать тонкий каркас, простой дизайн API, чтобы обеспечить достаточную документацию и примеры проектов, которые могут сделать кадр еще более простой в использовании.
  2. Простота отладки - по справедливости, это важно, потому что это проблема, с которой сталкивается каждый раз, когда разработчика Представьте себе каждый раз, когда вы вводите код приложения более 30 стеков, но и на его пути после N циклов, каждый раз. 20 итераций;. от кода приложения после возвращения также бывает, что такая процедура, вероятно, что разработчики депрессии до смерти, но если только тонкая рамка может сделать это намного проще отлаживать думает есть место здесь членные ароматические, как вы смотрите ??
  3. Уменьшить или даже устранить зависимость, потому что слишком много может привести к противоречивым версиям - естественно, менее вероятно, полагаться менее вероятно, имеют конфликтующие версии, но для того, чтобы уменьшить возможность противоречивых версий, не полагаться на, и посмотреть, как у всех есть чувство недостойное его к тому же? Maven система оказывается не только управлять сложностью зависимой версии этого?
  4. В случае необходимости, способствовать разработке расширений, или даже непосредственно магии, чтобы изменить основной код - по уважительной причине, но поскольку стоимость единовременного только после магии изменить основной код, чтобы догнать новую версию оригинального проекта необходимо будет остановиться, чтобы сделать догонялки, если не мы расстались отсюда. что же касается разработки расширений, не в меньшей степени зависят от запатентованного пакета баночки, пока документация хороший, большой экологического, естественного продолжение проекта прокатки, мы заметили, что расширение Спринг силу, чем это было еще более суровым Танос

С этой простой в тонкий Heroes' ве получил необъективной место. И полагаться на концепции первоначально полученного от „повторного использования“ полностью негативный „зависимость“, то есть в какой-то степени, сводит на нет „повторного использования“. Это старые фермы ярдов что они не могут прийти к согласию. «легкий» концепция будет продолжать рассматривать следующие

 

3. Мое понимание «количество света»

Сельское хозяйство Lightweight чувствовать себя старый код не должен зависеть от количества кода и мерой самой структуры, точнее говоря, пользователей (разработчиков), чтобы играть с чувством, указывающее, является ли легкая рама расположена Железный Человек вес брони неизбежно ОТЛИЧНОЕ, играть, он очень легкий, почти танцуя с ветром, и, конечно, Chang E фея Дзынь хочет прийти обязательно легкие, там есть свои красоты и броня Железного Человека по сравнению видны. легкий вес рамы, чтобы описать преимущества действительности, не могут выражать свои особенности точно.

Легкая программа инициализации 3.1

Если число зависимых рамок, начать пустой проект нуждается вокруг зависимостей (так почти весь мира до того, как, казалось бы, Maven), не обязательно будет чувствовать себя легко. Даже с Maven, Что, то есть океан pom.xml файла Письменных сот строк Код, будет чувствовать себя тяжелым., когда файл П может быть использован в течение 10 до 50 строк и четных строк выписать лист бумаги впечатляющей картины, полагаться несколько раз, он не будет чувствовать себя тяжелым. этот стандарт, традиционный SpringMVC конечно, важнее проект SpringBoot + Starter. Конечно, там обязательно тонкой рамка в легком, будь он используется в современной моде мавенна, возьмите режим банка или пакета в Lib каталог каменного века не тяжелы.

Легкий 3,2-код

Это внутри содержание слишком много, можно только сказать несколько выбрать один или два.

Выражение силы кадр количество кода 3.2.1

Когда рама имеет достаточно выразителен, когда код приложения должен быть меньше грамма в основном, не влияя на чтение для Spring аннотаций улучшен пример (очень важно!):


// 以前的表达
@RequestMapping(value = "/path", method = "POST")
public void doJob() {...} // 新的表达 @PostMapping("/path") public void doJob() {...} 

Существует никаких сомнений в том, что новое выражение уменьшает усталость запястья вероятность возникновения синдрома 5%, а также улучшить читаемость кода на 5%. Это показывает, выразительным кадр имеет очень важную роль в повышении производительности, продление срока службы аспектов сельского хозяйства кода. Это это легкий мы хотим видеть.

3.2.2 рамки контекста для обеспечения устойчивости

Запрос HTTP поставляется с большим количеством контекстной информации, такой как  Accept головка используется , чтобы сообщить серверу, который отвечает потребностям клиента, следующий код:

@GetAction("/employees")
public Iterable<Employee> list() { return employeeDao.findAll(); } 

Если запрашиваемый  Accept=application/json кадр автоматически сериализовать  Iterable<Employee> в JSON массив, и когда  Accept=text/csvкадр может быть сгенерирован автоматически загрузить файл CSV ... такая система неизбежно будет снизить нагрузку на разработчиков иметь дело с различными выходными форматами, намного меньше соответствующего кода, который мы надеемся , см облегченный

3.2.3 рамки для адаптационных возможностей вычислительной среды

Если экземпляр контроллера должен быть одним вариантом осуществления, каждый запрос или требуется новый экземпляр контроллера, чтобы отвечать требованиям данной вычислительной среде. Вкратце, если контроллер не собственный экземпляр состояния должен быть использован в одном варианте осуществления, например, :

@UrlContext("employees")
public class EmployeeService { @Inject private EmployeeDao employeeDao; @GetAction public Iterable<Employee> list() {return employeeDao.findAll();} @PostAction public Employee create(Employee employee) {return employeeDao.save(employee);} ... } 

Выше контроллер  EmployeeService только одно поле  employeeDao, если это поле не зависит от состояния, он  EmployeeService должен быть также состояния, поэтому кадр автоматически , полученный в примере экземпляра одного контроллера.

Ниже приведены примеры различных ситуаций:

@UrlContext("my")
public class MyProfileService { @LoginUser public User me; @GetAction public User getMyProfile() {return me;} } 

Контроллер имеет поле состояния  me, поля на каждом входящем запрос маркерах (или печенье) , связанные с текущим пользователем входа, таким образом , каждый новый запрос должны инициализировать новый  MyProfileService экземпляр.

В вышеприведенном примере кода, мы не видели приложение , используя специальные средства (например, плюс  @Singleton  аннотацию и т.д.) , чтобы сообщить об этом контроллер должен быть инициализирован пример того, как каркас, который является способность автоматически адаптируется к текущему кадру вычислительной среде; эта возможность Это позволяет разработчикам создавать более легкий код.

3.2.4 рамки для идентификации типа параметров приложений и вычислительной мощности

Это особенно важно для структуры веб-служб, данные в конце запроса при условии, что нет типа (даже JSON закодированные данные, и только ограниченный тип данных), а на стороне сервера Java объектов, чем потом иметь свои собственные типы данных, автоматически карта параметра запроса в соответствии с установленными правилами данных приложений Java могут сэкономить много времени, чтобы разработать методы лечения, например, следующие запросы:

@PostAction("employees")
public Employee create(Employee employee) {return employeeDao.save(employee);} 

Параметры обработки могут автоматически связать запрос параметра Работника Java

На основании формы запроса ( ContentType=application/x-www-form-urlencoded)

employee[firstName]=三
employee[lastName]=张
employee[email][email protected]
...

JSON на основе запроса ( ContentType=application/json)

{
  "firstName": "三",
  "lastName": "张",
  "email": "[email protected]", ... } 

Она может быть основана  Content-Type головкой автоматически запрашивать параметры для параметров связывания декларации Java может значительно уменьшить количество коды приложения, что приводит к «легким» разработчикам любят.

3.3 пары легкой поддержки развития

Это когда описанные выше Playframework упоминались. Фермеры думают, что старый код и код легкая по сравнению структуры также имеет важное значение для развития легкой поддержки.

модель 3.3.1 Разработка и модель продукта

Буду разделено на модель разработки продукта и режим рамки выполнения является PlayFramework первым ввел рамки веб-сервисы Java. Эта структура позволяет различение введения удобно поддерживать в процессе развития, не заботясь о влиянии на производительности во время выполнения или безопасности. Следующее описание основывается на модель развития обсуждение

3.3.2 Тепловая нагрузка

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

страница ошибки 3.3.3 Разработка

ошибка процесса развития неизбежна, если структура может обеспечить сделать его проще для разработчиков приложений, чтобы быстро найти точку ошибки, но и принести легкое чувство:

Если маршрут не может быть найден:

Когда программная ошибка компиляции:

Когда Ошибка выполнения:

Когда ошибка шаблон страницы:

Lightweight документация 3.4 API

До и после окончания разделения стало мейнстримом ситуации, документации API, более важные соответствующие инструменты (например, Swagger) также появилась на свет, однако Кураж необходимо добавить дополнительные примечания приложения, таким образом, местные жители чувствуют себя немного тяжелый лаг .:

@ApiOperation(value = "View a list of available products", response = Iterable.class)
@RequestMapping(value = "/list", method= RequestMethod.GET,produces = "application/json") public Iterable list(Model model){ Iterable productList = productService.listAllProducts(); return productList; } 

Если кадр генерируется непосредственно из документации JavaDoc чувствует себя немного легкий, но также, например:

    /**
     * Create a bookmark.
     *
     * Normal operation
     *
     * * It shall add a bookmark successfully with URL and brief description provided and respond with 201 and new bookmark ID.
     *
     * Exceptional cases
     *
     * * It shall respond 401 if a guest user (user that not logged in) submit request to add bookmark
     * * It shall respond 400 with error message "URL expected" when a logged in user submit request to add bookmark without URL provided
     * * It shall respond 400 with error message "description expected" when a logged in user submit request to add bookmark without description provided.
     *
     * Refer: [github issue](https://github.com/act-gallery/bookmark/issues/3)
     *
     * @param bookmark an new bookmark posted
     * @return ID of the new bookmark
     */
    @PostAction
    @PropertySpec("id") public Bookmark create(@Valid Bookmark bookmark) { AAA.requirePermission(AppPermission.PERM_CREATE_BOOKMARK); bookmark.owner = me.email; return bookmarkDao.save(bookmark); } 

Документация API формируется следующим образом:

Здесь содержание JavaDoc непосредственно в кадр отформатированный документ описывает API, при его создании возвращаемые данные запросов и JSON иллюстративный пример, в дополнение к разработчикам приложений, чтобы четко написать о методах JavaDoc описанных не делали каких-либо дополнительных работ, а передний конец уже доступен документация API очень ясно. также легкий очень полезным для разработки документа

Легкий 3,5 тест

Тест хорошо известны проблемы, чтобы разработать структуру веб-сервисов для простой программы HelloWorld, что примерно тестовый код может быть:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public class HttpRequestTest { @LocalServerPort private int port; @Autowired private TestRestTemplate restTemplate; @Test public void testGreetingService() throws Exception { assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/", String.class)).contains("Hello World"); } } 

Такой тест немного тяжеловат для легкого полностью разработан с точкой зрения на самом деле гораздо больше методов может быть использован, чтобы выразить то же смысл:

Scenario(Hello Service):
  interactions:
  - request:
      get: /
    response:
      json:
        result: Hello World

Конечно, тестовый прогон должен Lightweight:

Командная строка для запуска под (среда CICD):

Или ввод в разработке:

自动测试之所以难, 难在写测试用例的麻烦. 如果框架能够以一种简单的方式让开发写测试用例, 且支持易行的方式来运行测试用例, 这种轻量化将让自动测试不再成为开发人员的阻抗, 而是一种动力.

3.6 部署的轻量

传统基于 Servlet 的部署并不是一个很舒适的过程. 老码农理解的部署轻量可以是:

直接打包 -> scp 上传 -> 运行远端脚本暂停服务并解包重启服务. 这个过程应该可以在 Jenkins 里面简单配置完成.

或者可以稍微前卫一点, 直接打个 docker 包?

4. 总结

老码农最近对 Java web 服务端框架中的 "轻量" 做了一点自己的分析与思考, 在本文中分享出来. 希望能够为各位 Java web 端玩家带来一点不同的意见, 欢迎大家在评论中就这方面发表自己的看法, 只要有道理, 赞同与反对都是好评论.

 

рекомендация

отwww.cnblogs.com/AIPAOJIAO/p/11106738.html
рекомендация