REST因为易于构建、易于使用而迅速成为Web上构建Web服务的事实标准。关于REST如何融入微服务世界的讨论更为广泛,但是对于本教程,让我们看看如何构建RESTful服务。为什么要休息?REST包含网络规则、其架构、优势和其他一切。这并不奇怪,因为它的作者RoyFielding参与了十多个管理网络运行方式的规范。有什么好处?Web及其核心协议HTTP提供了一系列功能:适当的操作(GET、POST、PUT、DELETE等)缓存重定向和转发安全(加密和身份验证)这些是构建弹性服务的关键因素。但这还不是全部。Web由许多微小的规范组成,因此它可以轻松地发展而不会陷入“标准战争”的泥潭。开发人员能够利用第3方工具包来实施这些不同的规范,并立即拥有触手可及的客户端和服务器技术。通过在HTTP之上构建,RESTAPI提供了一种构建方式:向后兼容的API可演进的API可扩展的服务安全服务从无状态服务到有状态服务的范围而是一种方法、一种风格、一组对您的体系结构的约束,可以帮助您构建网络规模的系统。在本教程中,我们将使用Spring组合来构建RESTful服务,同时利用REST的无堆栈特性。入门我们将在学习本教程时使用SpringBoot。转到SpringInitializr并将以下依赖项添加到项目中:NetworkJPAH2将名称更改为“Payroll”并选择“GenerateProject”。A.zip将下载。解压它。在里面,您会发现一个简单的、基于Maven的项目,包括一个pom.xml构建文件(注意:您可以使用Gradle。本教程中的示例将基于Maven。)SpringBoot可以与任何IDE一起使用。您可以使用Eclipse、IntelliJIDEA、Netbeans等。SpringToolSuite是一个开源的、基于Eclipse的IDE发行版,它提供了Eclipse的JavaEE发行版的超集。它包括使使用Spring应用程序更容易的功能。这绝不是必需的。但是,如果您希望为击键带来额外的魅力,请考虑一下。到目前为止的故事......让我们从我们可以构建的最简单的东西开始。事实上,我们甚至可以省略REST的概念以使其尽可能简单。(稍后,我们将添加REST以了解差异。)大局:我们将创建一个简单的工资单服务来管理公司的员工。我们将员工对象存储在(H2内存中)数据库中,并访问它们(通过称为JPA的东西)。然后我们将用允许通过Internet访问的东西(称为SpringMVC层)包装它。以下代码在我们的系统中定义了一个Employee。nonrest/src/main/java/payroll/Employee.javapackagepayroll;importjava.util.Objects;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.Id;@EntityclassEmployee{私有@Id@GeneratedValueLongid;privateStringname;privateStringrole;Employee(){}Employee(Stringname,Stringrole){this.name=name;this.role=role;}publicLonggetId(){returnthis.id;}publicStringgetName(){returnthis.name;}publicStringgetRole(){returnthis.role;}publicvoidsetId(Longid){this.id=id;}publicvoidsetName(Stringname){this.name=name;}publicvoidsetRole(Stringrole){this.role=role;}@Overridepublicbooleanequals(Objecto){if(this==o)returntrue;if(!(oinstanceofEmployee))returnfalse;Employeeemployee=(Employee)o;返回Objects.equals(this.id,employee.id)&&Objects.equals(this.name,employee.name)&&Objects.equals(this.role,employee.role);}@OverridepublicinthashCode(){返回Objects.hash(this.id,this.name,this.role);}@OverridepublicStringtoString(){return"Employee{"+"id="+this.id+",name='"+this.name+'\''+",role='"+this.role+'\''+'}';}}这个Java类虽然小,但是包含的东西很多:@Entity是一个JPA注解,用来让这个对象准备好存放在基于JPA的数据存储ID、名称和角色是我们的Employee域对象的属性。id标有更多JPA注释以指示它是主键并由JPA提供程序自动填充。当我们需要创建一个新实例但还没有id时,就会创建一个自定义构造函数。有了这个域对象定义,我们现在可以转向SpringDataJPA来处理繁琐的数据库交互。SpringDataJPA存储库是支持针对后端数据存储创建、读取、更新和删除记录的方法的接口。一些存储库还支持适当的数据分页和排序。SpringData在接口的方法命名上是按照约定进行全面实现的。除了JPA之外,还有几个存储库实现。您可以使用SpringDataMongoDB、SpringDataGemFire、SpringDataCassandra等。对于本教程,我们将坚持使用JPA。Spring使访问数据变得容易。通过简单地声明以下EmployeeRepository接口,我们将能够自动创建新员工更新现有删除员工查找员工(一个,所有或通过简单或复杂的属性搜索)importorg.springframework.data.jpa.repository.JpaRepository;interfaceEmployeeRepositoryextendsJpaRepository
