社区编辑申请
注册/登录
基于Spring设计并实现RESTful Web Services
开发 前端
从和Amazon Web Services的整合,到聚合多个数据源,RESTful网络服务遵从了Roy Fielding的架构风格的指导方针,提供了简单、高效的web APIs,支持的API用户数量从少量到百万级别。在本教程中,你将会使用Spring来创建一个具有生产力的RESTful网络服务。

在本教程中,你将会使用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以供提交,跟踪,取消,以及修改订单。

Yummy Noodle Bar 

你需要什么

  • 大约每节三十分钟。你应该能够在每周的午餐时间,通过整个教程,以您的方式轻松的工作(或在周末做这一切!)
  • 安装构建工具Gradle,版本1.6或更高版本。
  • 一份代码拷贝(可通过git下载的ZIP文件获得)。
  • 你选择的IDE。Spring推荐Spring Tool Suite,这是免费下载的。

下载并运行代码

如果你下载过基础代码,你会发现本教程每节都在一个单独的文件夹,编号为1,2,3,等。也有一些代码片段:实际上是原始的,并且每个部分有单独的完整代码片段。

初始的 代码集包括:

  • 一个项目布局
  • 本教程开始创建的核心领域与事件类(上面的'Yummy Noodle Bar Application')
  • 对于这些类的一些基本的单元测试

每个部分的完整代码在包括初始代码的基础上,再加上教程某一点的实现代码。

你可以选择从初始代码集,或者你也可以从一个给定部分的完整代码集开始。不是每个代码文件都显示在教程中,因为那会将事情搞得很慢。但重要的事情是,比如写测试,创建RESTful服务,以及看一些关键领域的对象。

有许多用于构建的系统,而本教程使用Gradle和Gradle Wrapper来进行构建,所以如果你手头有一份代码的拷贝,你不需要安装任何东西来运行这些代码。

例如,如果你想要检查最初的代码集,你可以这样做:

  1. $ git clone https://github.com/spring-guides/tut-rest.git    
  2. $ cd tut-rest/initial    
  3. $ ./gradlew clean test 

在那里,你可以浏览build/reports/tests 并查看所有的测试结果。

如果你想跳到第6节,本教程的***一部分,来运行该web应用及其测试,可以这样:

  1. $ cd ../6/complete   
  2. $ ./gradlew tomcatRunWar 

在另外一个控制台中输入:

  1. $ ./gradlew test  

有些章节不需要运行该web应用来执行测试。

Yummy Noodle Bar应用框架和核心领域

该应用目前的架构在下面这个"Life Preserver"图中有所展示:

Life Preserver showing Core packages 

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能够服务于你的应用程序的整个生命周期中。

Life Preserver showing Core and REST domain 

把你的应用程序和外面的世界整合在一起,需要考虑下面的一些设计和实现约束:

  • 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

责任编辑:林师授 来源: OSCHINA编译
相关推荐

2022-04-30 08:43:52

Spring模块化框架

2022-06-27 17:46:53

PythonFlask

2022-05-30 09:32:07

Spring容器

2022-06-16 10:38:24

2022-05-06 20:18:36

2022-04-27 09:30:01

Python爬虫人工智能

2022-04-24 15:15:57

前端技术阿里

2022-06-14 11:01:48

SpringBootTomcatUndertow

2022-06-13 06:33:04

浏览器浏览器插件

2022-06-16 08:35:10

CSS属性前端

2022-05-05 09:27:31

Linux服务器优化

2022-06-10 06:55:21

JustAuthSpring

2022-06-21 09:27:01

PythonFlaskREST API

2022-04-11 07:34:46

OAuth2UAA节点

2022-04-26 08:41:54

JDK动态代理方法

2022-05-20 16:50:33

区块链Web3加密资产

2022-04-13 08:00:00

Hilla开发Java

2022-05-20 14:08:13

Web3元宇宙区块链

2022-06-01 06:06:28

Web 3元宇宙数字化

2022-05-18 12:04:19

Mybatis数据源Spring

同话题下的热门内容

哪个版本的JVM最快?无代码软件发展简史及未来趋势携程基于 GraphQL 的前端 BFF 服务开发实践为什么会存在 1px 问题?怎么解决?一文搞定常考Vue-Router知识点EcmaScript 2022 正式发布,有哪些新特性?一文详解|增长那些事儿远程医疗:优势、前景和现有IT解决方案

编辑推荐

太厉害了,终于有人能把TCP/IP协议讲的明明白白了!牛人5次面试腾讯不成功的经验HBase原理–所有Region切分的细节都在这里了Javascript如何监听页面刷新和关闭事件如何搭建一个HTTPS服务端
我收藏的内容
点赞
收藏

51CTO技术栈公众号