一文带你搞懂RESTful!
RESTful是一种基于http方法的,很流行的API设计风格。
API:应用程序编程接口,一组接口规范,客户端与服务端通过请求响应来进行数据通信。
REST:表述性状态传递,决定了接口的形式与原则
RESTful风格的好处:URL定位资源,HTTP动词描述操作。

RESTful是面向资源的
所有符合REST接口的URL都是名词,不可以存在动词
GET/api/flowers/{id}1复制代码类型:[java]
如果URL中出现了动词:GET/api/getflowers/{id},那么它不符合REST的接口。
用HTTP状态码表述结果(200:OK,400:BadRequest,500:InternalServerError)。
资源的筛选,排序,部分选择和分页
// 数据筛选GET/flowers?color=red// 数据排序,按照数量降序,按照产地升序GET/flowers?sort=-num+place// 数据的部分选择,指获取其中一些字段GET/flowers?fields=id,color,num// 分页GET/flowers?offset=5&limit = 21234567891011复制代码类型:[java]
我们要面向扩展开放,面向版本关闭,来版本化我们的API。
开发RESTful接口
下面我们使用POST,DELETE,PUT,GET方法来对Pets进行操作。
首先我们创建一个名为Pets的model类。
package com.javafamily.familydemo.model;import lombok.Builder;import lombok.Data;import java.util.Date;@Data@Builderpublic class Pets { private long id; private String name; private String varieties; private Date createTime;
}12345678910111213141516复制代码类型:[java]
然后再创建一个统一接口响应的数据格式,让用户体验更加完善。
package com.javafamily.familydemo.model;import lombok.Data;@Datapublic class Response { private boolean isok; private int code; private String message; private Object data; public Response() {
} public static Response success() {
Response response = new Response();
response.setIsok(true);
response.setCode(200);
response.setMessage("success!"); return response;
} public static Response success(Object obj) {
Response ajaxResponse = new Response();
response.setIsok(true);
response.setCode(200);
response.setMessage("success!");
response.setData(obj); return Response;
} public static Response success(Object obj, String message) {
Response ajaxResponse = new Response();
response.setIsok(true);
response.setCode(200);
response.setMessage(message);
response.setData(obj); return Response;
}
}123456789101112131415161718192021222324252627282930313233343536373839404142复制代码类型:[java]
之后在controller中创建PetsController来对宠物进行增删改查。
package com.javafamily.familydemo.controller;import com.javafamily.familydemo.model.Response;import com.javafamily.familydemo.model.Pets;import lombok.extern.slf4j.Slf4j;import org.springframework.web.bind.annotation.*;import java.util.Date;@Slf4j@RestControllerpublic class PetsController { // 根据id,查询一只宠物信息
@RequestMapping(value = "/pets/{id}", method = RequestMethod.GET)
public Response getPets(@PathVariable("id") long id) {
Pets pets = Pets.builder()
.id(1L)
.name("javafamily")
.varieties("language")
.createTime(new Date()).build();
log.info("pets" + pets); return Response.success(pets);
} // 添加一只宠物信息
@RequestMapping(value = "/pets", method = RequestMethod.POST)
public Response savePets(@RequestBody Pets pets) {
log.info("savePets" + pets); return Response.success();
} // 修改一只宠物信息
@RequestMapping(value = "/pets", method = RequestMethod.PUT)
public Response updatePets(@RequestBody Pets pets) {// if (pets.getId() == null) {// // TODO 异常// }
log.info("updatePets" + pets); return Response.success();
} // 根据id,删除一只宠物信息
@RequestMapping(value = "/pets/{id}", method = RequestMethod.DELETE)
public Response deletePets(@PathVariable("id") long id) {
log.info("deletePets" + id); return Response.success();
}
}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960复制代码类型:[java]
验证接口正确性
我们使用postman对接口进行测试
GET

POST
为了让Date类型在添加宠物信息过程中可以自动转换,我们在application.properties中添加代码。
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+812复制代码类型:[java]

PUT

DELETE

赞 (0)
