基于guice、resteasy、mybatis和undertow实现的轻量级restful服务

简介: 前段时间一直在做公司的微服务项目,技术栈主要是Spring Boot+Thrift,感觉使用Spring Boot确实太方便了:1. 无xml配置。

前段时间一直在做公司的微服务项目,技术栈主要是Spring Boot+Thrift,感觉使用Spring Boot确实太方便了:

1. 无xml配置。

2. 自动配置。

3. 应用可打包为单独的jar包独立运行。

4. 可嵌入tomcat、jetty或undertow,无需部署war包。

5. 使用Spring Data,以非常少的代码遍可以操作数据库。

......


但是由于Spring Boot框架本身过于庞大,再加上自动配置等功能,导致应用的启动速度较慢,资源消耗也较大,所以就有了使用其他轻量级的框架实现RESTful服务的想法,综合考虑,决定用Google Guice取代Spring IoC,用RESTEasy取代Spring MVC,用MyBatis取代Hibernate JPA,服务内嵌Undertow,实现轻量级的RESTful服务,也希望能给想开发RESTful服务的同僚们一些小小的帮助。

  • Google Guice

Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。Guice非常小而且快,号称比Spring快十倍左右。

  • RESTEasy

其是 JAX-RS 规范的一个完整实现并通过 JCP 认证。

  • MyBatis

简单灵活,对SQL可控,有利于编写性能更好的DAO层。

  • Undertow

使用Undertow作为嵌入式的Web容器,方便部署。


项目结构如下图所示:


  • dao:数据访问层,包括数据访问接口与MyBatis Mapper实现类
  • exception:异常类
  • mapper:MyBatis Mapper接口
  • model:实体类
  • resouce:REST Resouce(Controller),定义RESTful API.
  • service:服务接口与实现类
  • support:guice、mybatis、undertow的相关支持工具类(Guice Injector单例类、事务注解、事务拦截器、Session管理类、Druid连接池工厂类等)。

启动SimpleREST
启动MySQL并执行脚本,脚本文件在script文件夹下。

在开发工具(以Eclipse为例)中启动:

  1. 导入到Eclipse
  2. 设置配置文件:src/main/resources/conf/simplerest.properties,相关设置项请参考文件中的注释设置。
  3. 在启动配置中,添加启动参数:-f 盘符:\simplerest\src\main\resources\conf\simplerest.properties
  4. 启动程序
  5. 打开浏览器,输入地址:http://localhost:8888/goods/,检查是否可以返回数据,如果不能返回数据,请查看输出日志获取错误原因。


Eclipse中启动参数的设置:
  1. 鼠标右键点击项目simplerest,选择Run As->Run Configurations...
  2. 点击右侧的Arguments页签
  3. 在Program arguments中输入:-f 盘符:\simplerest\src\main\resources\conf\simplerest.properties
  4. 点击Apply


打包
执行 mvn package,成功后会在项目的target文件下生成 simplerest-1.0.0.zip,解压后执行bin\run.bat(linux下执行run.sh)即可运行服务。


相关RESTful API
以货品(goods)为例,主机名:localhost,端口为默认的8888

获取全部货品(Method:GET)
http://localhost:8888/goods/

分页查询货品(Method:GET)
http://localhost:8888/goods/listPaged?pageIndex=1&pageSize=2

得到指定Id的货品(Method:GET)
http://localhost:8888/goods/223c9e36055811e7b74a00155d010e04

添加货品(Method:POST)
http://localhost:8888/goods/

http body(application/json)
{
    "name": "固态硬盘"
}

修改货品(Method:POST)
http://localhost:8888/goods/223c9e36055811e7b74a00155d010e04

http body(application/json)
{
  "name": "奥迪轿车"
}

删除货品(Method:DELETE)
http://localhost:8888/goods/223c9e36055811e7b74a00155d010e04


调试工具
建议使用Chrome浏览器,安装Postman插件。


开发步骤:

  1. 在model包中创建模型类,如Student.java。
  2. 在src/main/resources/com/ln/simplerest/mapper下创建mapper.xml,如StudentMapper.xml,并在xml文件中定义CURD方法。
  3. 在mapper包中定义mapper类,如StudentMapper.java。
  4. 在dao包中定义dao接口,如StudentDao.java
  5. 在dao.impl包中实现dao接口,如StudentMapperDaoImpl.java,注意设置为@Singleton单例模式。
  6. 在service包中定义service接口,如StudentService.java。
  7. 在service.impl包中实现service接口,如StudentServiceImp.java,注意设置为@Singleton单例模式。
  8. 在resource包下定义资源文件,如StudentResource.java,注意继承AbstractResource类并将其设置为@Singleton单例模式。
  9. 在support.guice包的AppModule.java中绑定dao和service类。
  10. 在support.undertow包的ApplicationClass.java中注册资源类(StudentResource.java)。


源码下载地址

https://github.com/lining90567/simplerest

http://git.oschina.net/lining90567/simplerest

相关文章
|
4月前
|
缓存 弹性计算 API
用 Go 快速开发一个 RESTful API 服务
用 Go 快速开发一个 RESTful API 服务
|
10天前
|
JSON 关系型数据库 测试技术
使用Python和Flask构建RESTful API服务
使用Python和Flask构建RESTful API服务
|
3月前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
4月前
|
JavaScript 安全 API
构建高效后端服务:RESTful API 设计与实现
【8月更文挑战第31天】在数字化时代,一个清晰、高效且安全的后端服务是应用程序成功的关键。本文将深入探讨如何设计并实现一个遵循REST原则的API,确保服务的可扩展性和维护性。我们将从基础概念出发,逐步引入真实代码示例,展示如何利用现代技术栈创建高性能的后端服务。无论你是初学者还是有经验的开发者,这篇文章都将为你提供新的视角和实用的技巧。
|
4月前
|
缓存 Java API
从零到一:构建一个高效的 RESTful API 服务
本文将详细介绍如何从头开始设计和实现一个高效的 RESTful API 服务。我们将探讨 API 设计的最佳实践、选择合适的技术栈、实现常见功能(如认证、数据验证、错误处理)以及优化性能的策略。通过实例代码和实际应用场景的分析,读者将能够掌握构建高效且易于维护的 API 服务的关键步骤和技巧。
|
4月前
|
API Java Python
API的神秘面纱:从零开始构建你的RESTful服务
【8月更文挑战第31天】在现代网络应用开发中,RESTful API已成为数据交互的标准。本文通过比较流行的技术栈(如Node.js、Python的Django和Flask、Java的Spring Boot)及其框架,帮助你理解构建RESTful API的关键差异,涵盖性能、可扩展性、开发效率、社区支持、安全性和维护性等方面,并提供示例代码和最佳实践,指导你选择最适合项目需求的工具,构建高效、安全且易维护的API服务。
59 0
|
4月前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
80 0
|
4月前
|
Java 网络架构 数据格式
Struts 2 携手 RESTful:颠覆传统,重塑Web服务新纪元的史诗级组合!
【8月更文挑战第31天】《Struts 2 与 RESTful 设计:构建现代 Web 服务》介绍如何结合 Struts 2 框架与 RESTful 设计理念,构建高效、可扩展的 Web 服务。Struts 2 的 REST 插件提供简洁的 API 和约定,使开发者能快速创建符合 REST 规范的服务接口。通过在 `struts.xml` 中配置 `<rest>` 命名空间并使用注解如 `@Action`、`@GET` 等,可轻松定义服务路径及 HTTP 方法。
64 0
|
4月前
|
前端开发 API 开发者
JSF与RESTful服务的完美邂逅:如何打造符合现代Web潮流的数据交互新体验
【8月更文挑战第31天】随着互联网技术的发展,RESTful架构风格因其实现简便与无状态特性而在Web服务构建中日益流行。本文探讨如何结合JavaServer Faces (JSF) 和 JAX-RS 构建RESTful API,展示从前端到后端分离的完整解决方案。通过定义资源类、配置 `web.xml` 文件以及使用依赖注入等步骤,演示了在JSF项目中实现RESTful服务的具体过程,为Java开发者提供了实用指南。
42 0
|
4月前
|
JSON API 数据库
探索FastAPI:不仅仅是一个Python Web框架,更是助力开发者高效构建现代化RESTful API服务的神器——从环境搭建到CRUD应用实战全面解析
【8月更文挑战第31天】FastAPI 是一个基于 Python 3.6+ 类型提示标准的现代 Web 框架,以其高性能、易用性和现代化设计而备受青睐。本文通过示例介绍了 FastAPI 的优势及其在构建高效 Web 应用中的强大功能。首先,通过安装 FastAPI 和 Uvicorn 并创建简单的“Hello, World!”应用入门;接着展示了如何处理路径参数和查询参数,并利用类型提示进行数据验证和转换。
124 0