java - REST API Url 中的额外查询参数

标签 java web-services api rest resteasy

在我的 Rest 应用程序中,资源 url 还支持查询参数,如 pageSize、pageNum、name 等。所以请求 url 看起来像

/resource/{id}?pageNum=1&pageSize=25&desc="hello"

现在假设客户端添加了一个额外的查询参数,比如我的服务器不支持的“lang”

/resource/{id}?pageNum=1&pageSize=25&desc="hello"&lang="eng" ,但我的服务器不支持任何 lang 参数。

什么应该是最好的设计决策

选项 1:忽略额外的无效查询参数并提供请求。

选项 2:向客户端抛出错误的请求消息。

提前致谢 辛拉

最佳答案

毫无疑问,客户必须遵守 Api 文档。

但是 API 中的某些更改呢(只是不涉及迁移到新 API 版本的小更改)

比如说,一个API资源:/dummy/api/Iid1支持3个查询参数,即a,b,c

所以完整的 URi :/dummy/api/Id1?a=1&b=20&c=45 是 API 公开的有效请求,所有查询参数,即 a、b、c 都是可选参数, 即如果请求中不存在这些参数,则服务器将它们处理为某个默认值,如 a = 0, b = 0, c= 0

一段时间以来,大量客户基于上述 URL 方案构建他们的应用程序。

现在 API 提供者想要废弃参数 'b' 并决定抛出额外/未知参数的异常

这意味着所有围绕最后一个涉及参数“b”的 URL 方案构建的客户端应用程序都将失败!

这只是表明,为额外的/未知的查询参数抛出异常,总是会导致客户端和服务器关注点的紧密耦合,我想这完全违背了 REST 原则,其中心主题可能是“完全分离客户端和服务器关注点,以便两者可以单独发展”

所以我认为只有丢失/无效的“强制”参数应该抛出异常,而不是选项参数,永远不要。

关于java - REST API Url 中的额外查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15947074/

相关文章:

java - Apache CXF 无法发送由 : java.net.SocketException 引起的消息:连接重置

c# - 为什么 Process.Start 在 asp.net web 服务中不起作用?

security - 如何保护我的 API 服务免遭 api key 盗版

javascript - 如何使用 NodeJS 为 Sequelize 模型添加默认值?

java - android 在 fragment 中使用什么代替 onRestart()

java - 帮助 Java SAX 解析器理解错误的 xml

java - JSP 中如何创建 session ?

java - Google Web Toolkit 转储所有请求和响应

linux - ambari + API 语法以更改 ambari 服务的参数

java - 清理基于 Play-framework 的项目