Spring Boot REST API 端点映射最佳实践

Posted

技术标签:

【中文标题】Spring Boot REST API 端点映射最佳实践【英文标题】:Spring Boot REST API Endpoint Mapping best practice 【发布时间】:2018-12-04 18:20:51 【问题描述】:

我正在使用以下端点 URL 映射和 HTTP 方法,例如(POST、DELETE、GET、PUT)

POST 创建新交易 -

@PostMapping("/trade")

DELETE 用于删除具有特定 ID 的交易 -

@DeleteMapping("/trade/id")

GET 获取特定交易的详细信息 -

@GetMapping("/trade/id")

PUT 用于更新交易详情 -

@PutMapping(“/trade/id”)

GET for Retrieve all Trade list of the collection -

@GetMapping("/trades")

Spring 目前支持五种类型的内置注解,用于处理不同类型的传入 HTTP 请求方法,即 GET、POST、PUT、DELETE 和 PATCH。这些注释是:

@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping

从命名约定可以看出,每个注解都是为了处理各自传入的请求方法类型,即@GetMapping用于处理GET类型的请求方法,@PostMapping用于处理POST类型的请求方法,等等

如果我在这里遗漏了什么请提出建议

【问题讨论】:

您需要指定API版本 【参考方案1】:

添加API版本如

@RestController
@RequestMapping("/API/V1")
public class TestController 

@RequestMapping("/greeting")
    public String greeting( 
        return "welcome";
    

【讨论】:

这个答案好像少了一个RequestMethod?【参考方案2】:

对于版本控制,您可以使用多种方法:

    URI 路径: 在端点的 URL 路径中包含版本号。 例如v1 中的/api/v1/trade
public class TradeController 

  @GetMapping("v1/trade")
  public Trade tradeVersionOne() 
    return new Trade("123","Trade Result");
  

  @GetMapping("v2/trade")
  public Trade tradeVersionTwo() 
    return new Trade(new RealTimeTrade("123", "Real Time Trade Result"));
  


    查询参数: 将版本号作为具有指定名称的查询参数传递。 例如:?version=1 in /api/trade?version=1
public class TradeController 

  @GetMapping(name = "v1/trade", params = "version=1")
  public Trade tradeVersionOne() 
    return new Trade("123","Trade Result");
  

  @GetMapping(name = "v2/trade", params = "version=2")
  public Trade tradeVersionTwo() 
    return new Trade(new RealTimeTrade("123", "Real Time Trade Result"));
  
 

    自定义 HTTP 标头: 在请求中定义一个包含版本号的新标头。

    内容协商: 在Accept 标头中包含版本号以及接受的内容类型。

【讨论】:

以上是关于Spring Boot REST API 端点映射最佳实践的主要内容,如果未能解决你的问题,请参考以下文章

Java Spring Boot将rest api映射到模型[重复]

为啥我登录后无法进入管理 REST API 请求映射 - Spring Boot

使用带有 MySQL 数据库的 Spring Boot Rest API 的一对一映射

如果 xml 元素命名约定与 POJO 属性命名约定不同,则发送到 Spring Boot REST API 的 XML 元素不会映射到 POJO

如果xml元素命名约定与POJO属性命名约定不同,则发送到Spring Boot REST API的XML元素不会映射到POJO

列出所有已部署的 REST 端点(spring-boot、tomcat)