项目源码在github仓库

一、什么是Restful风格?

1、基本定义

restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科

REST全程是Representational State Transfer,即表征性状态转移,REST本身并没有创造出新的技术、组件或者服务,其背后的主要理念

就是使用Web现有的特征和能力,更好的使用现有的Web标准中的一些准则和约束。

通俗的理解,区别与我们传统的开发中Web请求的方式get/post,然后用我们自己定义的方法来表示不不同的操作。Restful风格是用了HTTP所特有的方法来处理所有的对象,执行CRUD等相关的操作。HTTP中主要的方法有PUT、DELETE、GET、POST、HEAD等等

2、进一步理解

1)资源与URI(统一资源标识符)

     任何事物,都可以作为资源被引用。如一个实例、一个抽象的概念等,并且每一个资源可以通过URI唯一标识。

2)统一资源接口

     REST遵循统一的接口原则,使用相同的接口对资源进行访问。如HTTP的接口get、post、put等

3)资源的表述

     资源的表述包括数据和描述数据的元数据。资源的表现形式可以有多种,在客户端与服务端之间传递的是数据的表述,而不是资源本身,例如文本可以用HTML、TXT、JSON等形式来表示。

4)资源的链接

     在不同的资源之间,应该阔以相互连接(根据实际需要)

5)状态转移

    REST原则中无状态通信是指服务端不应该保存客户端的状态。客户端应用状态在服务端提供的超媒体的指引下发生变迁,服务端通过超媒体通知客户端当前的状态,进入下一个可能的状态,

二、实例操作

基本环境:JDK8、创建一个Spring Boot项目即可

目标:采用RESTful风格的API来涉及实现一个简单的请求,后台向前台返回一个JSON格式的数据。

1、创建一个model模型,直接上代码,需要注意的地方注释中给出(对象中的变量不能生成set方法)

package com.dzg.domain;

public class Greeting {

    private final long id;//final值没有对应的set方法,直接通过构造函数初始化
    private final String content;

    public long getId() {
        return id;
    }

    public String getName() {
        return content;
    }

    public Greeting(long id, String content) {
        this.id = id;
        this.content = content;
    }
}

2、在控制器中创建控制器,处理前端请求

package com.dzg.controller;

import com.dzg.domain.Greeting;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.concurrent.atomic.AtomicLong;

@RestController
public class GreetingController {
    private static final String template = "Hello,%s";
    private final AtomicLong counter = new AtomicLong();//可以自动更行值得数据类型,不能用Long替代

    @RequestMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name",defaultValue = "World")String name){
  //请求中得参数若没有name值,则默认为World,否则更新为name传过来的新值
        return new Greeting(counter.incrementAndGet(),
                String.format(template,name));//返回为JSON格式
    }
}

3、运行项目,验证

创建项目时会自动生成启动main函数

@SpringBootApplication
public class SpringRestfulServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringRestfulServiceApplication.class, args);
    }

}

运行解释:

其中@SpringBootApplication注释等价于(在项目中点进去,可查看原码)

@Configuration//将class标记为应用上下文中的bean定义的一种资源

@EnableAutoConfiguration //通知Spring Boot基于路径设置添加相应的bean资源,以及各种属性设置

@ComponentScan( //通知spring在程序包中查找其他的组件、配置和服务,使其找到控制器
    excludeFilters = {@Filter(
    type = FilterType.CUSTOM,
    classes = {TypeExcludeFilter.class}
), @Filter(
    type = FilterType.CUSTOM,
    classes = {AutoConfigurationExcludeFilter.class}
)}
)