首页 > 解决方案 > 当路径变量在 PUT 方法中为空时的 HTTP 响应

问题描述

当REST服务中的路径参数为空白或使用PUT方法时为空时,我正在尝试找到关于我应该发送哪种类型的响应的最佳实践。

例如,假设我们有以下资源:

PUT 报告/{report-id}/client/{client-id}

我是否应该验证参数 report-id 和 client-id 不为空或空白?

如果它们是空白或 null 我可以想到两种类型的消息:

我不认为有这样做的标准惯例。在那儿?但是,我想听听关于在这种情况下使用什么最佳实践的意见。

标签: javaresthttp-response-codes

解决方案


REST 规范在这里可能很有见地:

REST 中信息的关键抽象是资源。任何可以命名的信息都可以是资源:文档或图像、时间服务(例如“洛杉矶今天的天气”)、其他资源的集合、非虚拟对象(例如人)等等. 换句话说,任何可能成为作者超文本参考目标的概念都必须符合资源的定义。资源是到一组实体的概念映射,而不是在任何特定时间点对应于映射的实体。

由于缺乏资源不能在逻辑上被命名,因此它永远不会存在于 REST 中。因此,我认为您会发现大多数公共 API 都会返回404. 以从 GitHub 获取用户信息为例。该文档指出,可以在 找到用户https://api.github.com/users/{username}https://api.github.com/users/(注意尾部斜杠)返回404. 不管 HTTP 规范怎么说(尽管遵循它总是一个好主意),如果你坚持最小意外返回的原则404是你最好的选择。

作为旁注,在命名资源时,约定是集合应该是复数。因此,对于您的示例,您实际上希望资源看起来更像:/reports/{report-id}/clients/{client-id}. 特别是在处理“空”参数时,它会使请求的确切内容更加清晰。


推荐阅读