【问题标题】:Should I validate API response on the client?我应该在客户端验证 API 响应吗?
【发布时间】:2019-01-14 21:15:27
【问题描述】:
假设我有一个使用 RESTFUL API 的应用程序。例如:我正在向端点发送请求:“/products”,并且收到一些 JSON 格式的响应。然后,我在我的 SPA 应用程序中使用该数据。
一段时间后响应的形状发生了变化。我没有被告知这个事实。结果,我的 SPA 应用程序崩溃了。更改后,我在应用程序中使用的一些属性在 API 响应中丢失了。我可以防止这种情况发生,当我将验证我的 SPA 应用程序中的每个响应并在响应中缺少它时放置一些占位符值。但这可能会导致一些性能问题。
无论如何,将 API 响应验证放在客户端是一个好习惯吗?
【问题讨论】:
标签:
json
rest
api
validation
web-applications
【解决方案1】:
我认为您遇到的问题实际上与验证无关,但它与您的服务器以非向后兼容的方式升级有关。您需要的可能是处理更新的更好方法。
我不认为偶尔下载一个模式并盲目地填写缺失的属性是要走的路。您可以构建您的服务,使其具有一些向后兼容性吗?如果您确实必须打破向后兼容性,您有充分的理由吗?客户端是否有理智的方式来支持它,或者您是否需要更新客户端?
如果你控制服务器和客户端,对我有用的策略是:
- 不要立即进行重大更改。首先将服务器更新到新版本,然后在以后的更新中停止支持以前的版本。
- 客户端偶尔可以检查服务器支持的版本。如果他们发现服务器已放弃对客户端使用的版本的支持,请更新客户端。 (也许只是刷新?)
但这是相当广泛的。不确定这对您有多大帮助,因为它取决于具体情况。
【解决方案2】:
根据您的描述,以及我对 Restful API 的经验,没有关于它的最佳实践,但在某些情况下,API 支持多种自定义内容类型并接受包含版本的标头以处理与不同版本的向后兼容性数据传输对象。
如果您无法访问您调用的 API,您最好在客户端应用程序上使用空对象模式来处理缺失值以防止崩溃。
【解决方案3】:
您只需在项目中引入 api 版本控制。因此,您的客户可以依赖某个版本,直到您决定更进一步。客户端和服务器开发变得更加独立。