一文带你搞懂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)