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

相关推荐