RESTful API 设计:路径参数与请求体对象的职责分离实践

夜涛姑娘_7514

夜涛姑娘_7514

2026-02-09

723人浏览

原创

RESTful API 设计:路径参数与请求体对象的职责分离实践

在 rest api 设计中,应严格区分资源标识(由 @pathvariable 承担)与资源状态数据(由 @requestbody 承担);将路径参数“注入”到请求体对象中违背了关注点分离原则,不仅破坏语义一致性,也增加序列化/反序列化风险和维护成本。

REST 的核心理念之一是 资源导向(Resource-Oriented Architecture):URI 应唯一标识资源或资源集合,而 HTTP 方法定义操作意图。你当前的端点:

POST /v1/myapi/bank/{bank_id}/branch/{branch_id}

从语义上强烈暗示这是一个对已存在分支资源的更新操作(如 PUT 或 PATCH),而非创建新分支。而 POST 通常用于在集合下创建新资源,其标准形式应为:

POST /v1/myapi/bank/{bank_id}/branches   ← 推荐:在 bank 下创建 branch 集合成员

此时 {bank_id} 是父资源标识,branches 是子资源集合名(复数、名词、无 ID),符合 REST 约定。

❌ 为什么将 bankId/branchId 塞入 BankDetails 是不良实践?

  • 语义污染:BankDetails 本应仅描述分支自身的业务属性(如 address, zip),不应承担路由上下文职责;
  • 序列化风险:@JsonProperty(access = JsonProperty.Access.READ_ONLY) 仅影响 Jackson 反序列化行为,但若该对象后续被序列化(如发往 SQS),bankId/branchId 仍可能意外暴露或被消费方误用;
  • 职责混淆:控制器层本应负责协调——解析路径、校验权限、组装领域对象——而非“修补” DTO 结构;
  • 测试与复用困难:该 BankDetails 类因耦合路径参数,难以脱离 Web 层独立单元测试,也无法安全用于其他场景(如内部服务调用、消息消费者)。

✅ 推荐方案:保持 DTO 纯净,显式组合上下文

定义清晰、专注的 DTO:

JS X Monitor
JS X Monitor

X.com (Twitter) 账号监控自动化:定时抓取指定账号最新推文,发现新内容即时推送通知。

下载
public class BankBranchCreationRequest {
    private String address;
    private String zip;
    // no bankId/branchId here —— they're not part of the *resource state*

    // constructors, getters, setters
}

在 Controller 中解耦处理:

@PostMapping("/v1/myapi/bank/{bank_id}/branches")
public ResponseEntity<myresponse> createBankBranch(
        @PathVariable("bank_id") String bankId,
        @RequestBody BankBranchCreationRequest request) {

    // ✅ 正确做法:构造领域对象或消息载荷时,显式组合上下文
    BankBranchCommand command = BankBranchCommand.builder()
            .bankId(bankId)
            .address(request.getAddress())
            .zip(request.getZip())
            .build();

    // 发送至 SQS(例如封装为 JsonMessage)
    sqsService.sendMessage(new BranchCreationMessage(bankId, command));

    return ResponseEntity.ok(new MyResponse("created"));
}</myresponse>
? 提示:BranchCreationMessage 是专为消息队列设计的传输对象(DTO for transport),它可安全包含 bankId 和业务字段,且与 Web 层 DTO 完全隔离。

? 关键原则总结

  • URI 表达资源层级,不表达动作或参数:/bank/{id}/branches 是集合;/branch/{id} 是单个资源;
  • @RequestBody 只承载资源的“状态”:即创建或更新时客户端明确提交的数据;
  • 路径变量属于“请求上下文”,应在 Controller 或 Service 层参与逻辑编排,而非污染数据模型;
  • 面向消息场景(如 SQS)应定义专用消息结构,避免复用 Web DTO,保障演进自由度与类型安全。

遵循此模式,你的 API 更易理解、测试、扩展,也更符合 Spring 生态与云原生架构的最佳实践。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2791

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

497

25

PHP API接口开发与RESTful实践
PHP API接口开发与RESTful实践

本专题聚焦 PHP在API接口开发中的应用,系统讲解 RESTful 架构设计原则、路由处理、请求参数解析、JSON数据返回、身份验证(Token/JWT)、跨域处理以及接口调试与异常处理。通过实战案例(如用户管理系统、商品信息接口服务),帮助开发者掌握 PHP构建高效、可维护的RESTful API服务能力。

2025.11.26

564

16

resource是什么文件
resource是什么文件

Resource文件是一种特殊类型的文件,它通常用于存储应用程序或操作系统中的各种资源信息。它们在应用程序开发中起着关键作用,并在跨平台开发和国际化方面提供支持。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.20

320

3

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.09

3803

4

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

2023.11.14

954

3

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2024.03.12

6706

8

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5510

6

Go 语言 HTTP 编程与中间件开发教程合集
Go 语言 HTTP 编程与中间件开发教程合集

全面讲解 Go 语言 HTTP 编程的核心知识,涵盖 net/http 标准库的 Server/Handler/HandlerFunc 体系、DefaultServeMux 路由注册与自定义路由器、Request / ResponseWriter 请求响应处理、中间件(Middleware)链式设计模式与常见中间件(日志/CORS/认证/限流)开发、http.Client 的超时配置与连接池管理、Cookie / Session 处理、

2026.05.08

561

31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.3万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习