基于Spring设计并实现RESTful Web Services(转)
基于Spring设计并实现RESTful Web Services
在本教程中,你将会使用Spring来创建一个具有生产力的RESTful网络服务。
为什么用RESTful网络服务?
从和Amazon Web Services的整合,到聚合多个数据源,RESTful网络服务遵从了Roy Fielding的架构风格的指导方针,提供了简单、高效的web APIs,支持的API用户数量从少量到百万级别。
你要实现一个RESTful风格的网络服务,可能会是因为:
- 你正在创建一个API,而客户端需要通过网络才能使用它。
- 你想要开放你们单位的数据提供给各类客户们通过网络来使用。
- 你需要把你的应用和组织内其它应用整合起来,但是你无法控制其它应用所用的语言、工具或架构。
或者你只是出于好奇想看看Spring实现的RESTful网络服务长什么样子。不管处于什么原因,你找对地方了。
你将创建什么
Yummy Noodle Bar(美味面条吧)正在全球化。它想要给一系列商务聚合组织提供一个RESTful Web服务,特别是Let’s Nosh(让我们来点小吃),一个受欢迎的餐厅指南,它将大型商务引入小规模的面条吧。你将扩展Yummy Noodle Bar的内部应用程序,创建一个新的公共Web API以供提交,跟踪,取消,以及修改订单。
你需要什么
- 大约每节三十分钟。你应该能够在每周的午餐时间,通过整个教程,以您的方式轻松的工作(或在周末做这一切!)
- 安装构建工具Gradle,版本1.6或更高版本。
- 一份代码拷贝(可通过git 或下载的ZIP文件获得)。
- 你选择的IDE。Spring推荐Spring Tool Suite,这是免费下载的。
下载并运行代码
如果你下载过基础代码,你会发现本教程每节都在一个单独的文件夹,编号为1,2,3,等。也有一些代码片段:实际上是原始的,并且每个部分有单独的完整代码片段。
初始的 代码集包括:
- 一个项目布局
- 本教程开始创建的核心领域与事件类(上面的'Yummy Noodle Bar Application')
- 对于这些类的一些基本的单元测试
每个部分的完整代码在包括初始代码的基础上,再加上教程某一点的实现代码。
你可以选择从初始代码集,或者你也可以从一个给定部分的完整代码集开始。不是每个代码文件都显示在教程中,因为那会将事情搞得很慢。但重要的事情是,比如写测试,创建RESTful服务,以及看一些关键领域的对象。
有许多用于构建的系统,而本教程使用Gradle和Gradle Wrapper来进行构建,所以如果你手头有一份代码的拷贝,你不需要安装任何东西来运行这些代码。
例如,如果你想要检查最初的代码集,你可以这样做:
- $ git clone https://github.com/spring-guides/tut-rest.git
- $ cd tut-rest/initial
- $ ./gradlew clean test
在那里,你可以浏览build/reports/tests 并查看所有的测试结果。
如果你想跳到第6节,本教程的最后一部分,来运行该web应用及其测试,可以这样:
- $ cd ../6/complete
- $ ./gradlew tomcatRunWar
在另外一个控制台中输入:
- $ ./gradlew test
有些章节不需要运行该web应用来执行测试。
Yummy Noodle Bar应用框架和核心领域
该应用目前的架构在下面这个"Life Preserver"图中有所展示:
Life Preserver图是一种工具,用来构建那些遵从了Hexagonal Architecture原则的应用,有时也被称为'Ports and Adapters',它最早由Alistair Cockburn进行描述。Life Preserver图展示了你的应用的核心领域以及包围在其周围的整合领域,这些领域可以直接对应到程序包或组件,你将会在整个教程中使用到它们,所以这是一种理解事物模型的很棒的方式。
打开初始项目,你将会看到上面的life preserver图映射到了src/main/java/com/yummynoodleba目录下的不同包中。
在核心应用的顶层包com.yummynoodlebar.core中,包含着下列内容:
- domain. 组件包,只包含应用核心领域概念。这些类是核心领域普世语言(领域驱动设计里的术语,建议参考链接里的原文 - 译者注)的显式表达。
- repository. 组件,用于存储和获取系统领域对象的当前状态。
- event. 组件,包含领域可以接收和处理的事件。
- service. 组件,用于接收到事件时,处理可执行的操作。
花些时间让你自己熟悉每个包里的组件。对核心领域组件的测试在项目的src/test里。这些测试会告诉你如何使用这些组件。
RESTful web服务领域
RESTful web服务能够把你的应用和所有可能用到你服务的客户端集成在一起。因此,RESTfulF服务存在于他们自己的集成领域,在你的应用程序核心之外,正如下面的图一样,RESTfulF能够服务于你的应用程序的整个生命周期中。
把你的应用程序和外面的世界整合在一起,需要考虑下面的一些设计和实现约束:
- RESTful服务API是你的关注的地方;核心应用程序结构不应影响API的设计。
- 组件实现RESTful服务需要提高速度,这样更适合更多的用户依赖你的服务。
- 你的RESTful服务组件不应该包含任何核心应用程序逻辑,但是他们需要和你的应用程序核心领域组件进行合作,这样更方便协调必要的功能服务接口
英文原文:Designing and Implementing RESTful Web Services with Spring
译文链接:http://www.oschina.net/translate/designing-and-implementing-restful-web-services-with-spring
- 使用Spring进行单元测试
- Java EE 7意味着Spring框架是否已经过时?
- Spring 3.2三个值得关注的新特性
- 加速Java应用开发1―Spring调试启动速度
- 开始使用 Spring Data JPA
基于Spring设计并实现RESTful Web Services(转)的更多相关文章
- 使用 Spring 3 来创建 RESTful Web Services(转)
使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...
- CRUD using Spring MVC 4.0 RESTful Web Services and AngularJS
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- 使用 Spring 3 来创建 RESTful Web Services
来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...
- Spring 3 来创建 RESTful Web Services
Spring 3 创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参考实现 ...
- 【转】Spring 4.x实现Restful web service
http://my.oschina.net/yuyidi/blog/352909 首先我们还是跟之前一样,创建一个maven项目,不过因为Spring Restful web service是基于Sp ...
- Spring Boot - Building RESTful Web Services
Spring Boot Building RESTful Web Services https://www.tutorialspoint.com/spring_boot/spring_boot_bui ...
- RESTful Web Services初探
RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...
- 【转】RESTful Web Services初探
近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...
- RESTful Web Services简单介绍
近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...
随机推荐
- 解决DataSnap支持的Tcp长连接数受限的两种方法
如何解决DataSnap支持的Tcp长连接数受限的问题? 方案一: 采用代理服务器方式,基本流程为: 1.客户先连接代理服务器:2.获取可用的服务器IP和端口:3.关闭与代理服务器之间的连接:4.建立 ...
- python_day2_homework_1(简单购物商城)
'''简单购物商城(要求):1,商品展示,价格2,买,加入购物车3,付款,钱不够''' 1 #_*_ coding: utf-8 _*_ __author__ = 'A-rno' meu_list_1 ...
- Python脚本控制的WebDriver 常用操作 <十三> 处理button group层的定位
下面将使用webdriver来定位同一层的按钮 测试用例场景 button group就是按钮组,将一组按钮排列在一起. 处理这种对象的思路一般是先找到button group的包裹(wrapper) ...
- android----sqlite中的 query() 参数分析
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, Strin ...
- owin 中间件 katana 如何解密cookie
.NET MVC5 默认的用户登录组件是AspNet.Identity ,支持owin,并且微软自己实现的一套owin 中间件叫 katana 补充一下 katana项目源码地址:https://ka ...
- 总线(BUS)和总线操作
1.什么是总线? 答:总线是运算部件之间数据流通的公共通道. 2.总线的作用? 答:提高专用信号处理逻辑电路的运算能力和速度. 3.总线与部件之间是怎么连接的? 答:各运算部件和数据寄存器组是通过带控 ...
- 高精度计算的类(BigInteger和BigDecimal)
这两个类 在Java中没有对应的基本类型.不过,这两个类包含的方法,提供的操作与对基本类型所能执行的操作差不多. 也就是说,能对基本类型 int float 等的操作,也同样能作用于这两个类,只不过必 ...
- CentOS-6.5安装配置JDK-7和JDK-8
安装说明 系统环境:centos-6.5 软件:jdk-7-linux-x64.rpm , jdk-8u5-linux-i586.tar.gz 下载地址:http://www.oracle.com/ ...
- Careercup - Google面试题 - 4807591515389952
2014-05-06 00:45 题目链接 原题: What would happen if you have only one server for a web cache (a web brows ...
- PDF.NET框架操作——工具应用(一)
PDF.NET是个开源的项目其解决UI层(WinForm / Web)控件数据绑定.映射与查询: BLL层实体对象查询(OQL):DAL层SQL语句和.NET数据访问代码映射(查看 SQL-MAP ...