【问题标题】:Designing a REST API in Spring Boot [closed]在 Spring Boot 中设计 REST API [关闭]
【发布时间】:2020-09-08 03:58:31
【问题描述】:

我需要设计一个 REST api ListMessages 服务(标题、url、内容和发件人中有 4 个字段),该服务应支持同一端点内的两个响应版本。调用者能够定义他可以处理的响应版本。

  • 第一个版本返回的消息应该只包含标题、内容和发件人字段。第一个版本不能接受除版本参数之外的任何其他参数。

  • 第二个版本返回的消息应该返回所有 4 个字段。第二个版本还带有一个参数,该参数定义返回响应的格式(支持的格式可以是 JSON 和 XML)。

@RequestMapping(value ="/listMessages" , produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
@ResponseBody
public List<?> getAllMessages(@RequestParam Map<String,String> allParams){
    
    if(allParams.get("version").equalsIgnoreCase("v1" ) && allParams.size()==1)
        return listMessagesService.getAllMessages();
    
    else if (allParams.get("version").equalsIgnoreCase("v2") && allParams.size()>1)
        return listMessagesService.getAllMessagesV2("v2");
    
        
        return null;
}

这是我的代码。代码可以接受吗?这样设计 API 可以吗?

【问题讨论】:

标签: java spring-boot rest


【解决方案1】:

您需要对您的 API 进行版本控制。有很多方法可以做到。

  1. URI 版本控制

    例如:http://myapi/v1/users http://myapi/v2/users

  2. 媒体类型版本控制 例子 接受:application/vnd.myapi.v1+json

【讨论】:

    【解决方案2】:

    在提供解决方案之前,根据您的回答我有几个问题会更新设计

    问。您是否获得任何标识符来帮助您识别返回两个字段作为响应或所有四个字段?

    假设:您在请求 json 中有标识符来识别客户端

    在响应 POJO 中使用 @JsonIgnore 属性

    所以当你返回响应时 '

    Coutomer A 仅设置 2 个字段和其他字段或 null Coutomer B 设置所有 4 个字段

    @JsonInclude(JsonInclude.Include.NON_NULL) 会将所有空值隐藏到您的响应 Json 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-28
      • 2019-03-11
      • 2021-04-13
      • 1970-01-01
      • 2020-11-13
      相关资源
      最近更新 更多