c# - REST API 最佳实践 - 在现有 API 的请求/响应中添加新参数
问题描述
我正在使用 .NET 5.0。我目前在生产中部署了一个基于 REST 的 API,商家已经与它集成。现在有一个要求,我还需要在请求和响应中添加更多参数。
在现有的 REST API 中添加参数是不好的做法吗?我应该引入一个新版本,还是可以在同一版本中添加请求/响应参数?
编辑:附加参数不是强制性的
解决方案
API 可以在两个地方被破坏:请求(输入)和响应(输出)。
要求
如果您引入新的输入参数,并且希望在应用程序中保持向后兼容性,则:
- 您的服务器端应该对缺少的输入参数有合理的默认值
- 对于具有这些缺失值的输入,您的服务器端应用程序应该保持相同的行为(返回相同的输出,见下文)。换句话说,默认值(“回退”)足以返回相同的结果。
如果您不遵守上述规定,那么您的 API 在输入方面就被破坏了。
回复
响应很棘手,因为它取决于您的消费者以及响应的内容类型。
如果响应的内容类型是可扩展的,例如 JSON 或 YAML,并且您的 API 使用者知道可以随时将新字段添加到输出中并且可以忽略,那么您的 API 在输出条件。
但是,如果您的消费者期望响应中有一个严格的模式(例如,固定数量的现有字段),那么添加新字段(即使它们可以被忽略)是不可接受的,因此会破坏您的 API。
这取决于..
所以答案是:视情况而定。如果在输出中添加了新字段,那么您应该与您的消费者就扩展响应进行沟通,或者为您的 API 创建一个新端点 ( /v2/...
)。
此外,如果输入参数没有合理的备用值,那么这同样需要v2
API 的入口点。
推荐阅读
- django - Django, select_related 或 prefetch_related 更新时
- python - 使用 Tkinter 网格时遇到问题
- reporting-services - 显示异常数据的 SSRS 报表服务器
- python - 从脚本 1 本身调用的 python 脚本 2 将值返回到 Python 脚本 1
- javascript - 通过在占位符图像上拖放来上传图像
- python - 每次使用 Python 打开和执行新项目时,我们是否需要安装 Selenium?
- javascript - 有没有办法播放视频
- ios - 堆栈视图中的按钮对齐问题
- flutter - Flutter中各种小部件的滚动问题
- python - Textarea 未显示在 django 用户更改表单中