HttpMate简介
沒有人愿意編寫不良代碼。 沒有人會想到“我要創建最糾結和最不可讀的代碼,并確保它不可擴展且難以修改或瀏覽”,從而開始了應用程序開發。 首先要有良好的意愿,甚至可能要牢記所有Clean Code和SOLID原則。 但是,折衷方案通常以所涉及的外部依賴關系的數量為基礎,開始快速蔓延和倍增。
令人羨慕的是,我們沒有找到任何框架使我們能夠開發Web應用程序,并良心宣稱其業務邏輯不依賴于基礎HTTP服務器,持久層或(反)序列化機制(也在DDD中稱為“基礎結構代碼”)。
如果您也覺得自己不再開發應用程序,而是繼續“集成”和“集成”框架,與它的惡魔抗爭,并且從沒有時間來使用實際的業務邏輯。 如果您還只是因為發布了新版本的框架而對無休止的重構感到厭倦。 如果您不確定要使用哪個批注,并且對使用的HTTP框架的入侵性感到坦白,那么HttpMate適合您。
它是非侵入性的,靈活的和超可擴展的。 HttpMate為您提供3種處理HTTP請求的模式-UseCase驅動的,低級HTTP和事件驅動的請求處理,以及混合這些模式以充分利用功能豐富的框架。
沒有更多的理由,讓我們看一些代碼示例。
低級HTTP請求處理
final HttpMate httpMate = HttpMate.aLowLevelHttpMate().get("/api/hello", (httpRequest, httpResponse) -> {final Optional<String> name = httpRequest.queryParameters().getQueryParameter("name");httpResponse.setBody("Hello " + name.orElse("World"));httpResponse.setStatus(OK);}).build(); 本文使用HttpMate的低級HTTP構建器,它只是探討了可能性的表面。
您可以輕松地為任何path / http方法組合注冊處理程序。 在處理程序lambda中,您可以使用請求和響應對象,處理程序可以根據需要變得復雜。
請查看存儲庫的示例部分,以獲取有關低級API的更多信息。
您可能已經看到其他所有HTTP框架都提供了一種編寫少量請求處理程序的簡便方法,盡管這是介紹框架語法的好方法,也是一種出色的營銷工具,但任何現實生活中的挑戰都不僅僅是“只需通過函數調用處理請求”。 全世界都迫切需要一個HTTP框架,該框架將在請求處理和業務邏輯之間提供適當的抽象層,并允許您在重要的事情上不妥協-干凈的體系結構和可擴展性。
UseCase示例
HttpMate允許您“僅將業務邏輯發布為HTTP端點”。 讓我們探討一下發送電子郵件以證明這一點的用例。
我們尚不知道HTTP端點的外觀,但是我們知道我們需要一個Email對象來表示電子郵件的詳細信息:
- 發件人
- 接收者
- 學科
- 身體
我們需要返回,假設每發送一封電子郵件都會有一個回執:
- 追蹤號碼
- 日期
并且我們有一個負責發送電子郵件的類,看起來像這樣:
public class SendEmailUseCase {...public Receipt sendEmail(final Email email) { ...}... }現在,您已經可以使用HttpMate構建器來發布該用例-假設您已經決定了哪個URL和哪種HTTP方法將負責向用戶提供此UseCase:
final HttpMate useCaseDrivenHttpMate = HttpMate.anHttpMateConfiguredAs(UseCaseDrivenBuilder.USE_CASE_DRIVEN).post("/api/sendEmail", SendEmailUseCase.class).mappingRequestsAndResponsesUsing(mapMate()...).build();第一部分是不言自明的:在POST上調用SendEmailUseCase到“ / api / sendEmail”。
還有“ SendEmailUseCase怎么得到一個有效的Email實例?” 聰明的讀者可能會問。
確實,這是一個有效的問題,它是此示例中最復雜的技術細節以及魔鬼隱藏的位置。 為了使本文的重點放在HttpMate上并使其易于閱讀,我們要求另一位同伴與該魔鬼作斗爭。 我們將在另一篇文章中談論那個勇敢的伴侶。
默認情況下,HttpMate使用UseCase類的空默認構造函數對其進行初始化。 也就是說,通過向構建器添加調用,可以輕松地將HttpMate配置為使用任何依賴項注入機制。 以下示例演示了如何使用Google Guice:
final HttpMate useCaseDrivenHttpMate = HttpMate.anHttpMateConfiguredAs(UseCaseDrivenBuilder.USE_CASE_DRIVEN).post("/api/sendEmail", SendEmailUseCase.class).mappingRequestsAndResponsesUsing(mapMate()).configured(toCreateUseCaseInstancesUsing(INJECTOR::getInstance)).build();查看此github存儲庫以獲取SendEmailUseCase的更詳細示例。
最后的話
有很多框架可以提供HTTP終結點配置,但是,大多數情況下,精美的演示無法經受住現實的考驗。 我們希望創建一些既易于配置又可以直觀地為您的應用程序開發提供支持的工具,為您提供完成干凈的代碼和體系結構的工具,并為您的用例奠定良好的基礎。
不僅如此! 還記得我是如何告訴您的,這只是探索可能性的表面嗎? HttpMate和我們正在研究的其他“伙伴”一起提供了更多功能:websocket,事件驅動的HTTP方法,正確完成多部分請求,處理請求和響應,驗證序列化和反序列化等。請繼續關注有關Mate的更多文章家庭!
我們很高興聽到您的反饋并收到您的貢獻,因此請簽出HttpMate和Happy Coding的GitHub存儲庫!
翻譯自: https://www.javacodegeeks.com/2019/08/introducing-httpmate.html
總結
以上是生活随笔為你收集整理的HttpMate简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 林蛙怎么养 林蛙的养殖方法
- 下一篇: 定义资源