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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值