在 REST api 上检查正文中的意外参数是一个好习惯吗?
Is it a good practice on a REST api to check for unexpected parameters in the body?
我是第一份工作的初级开发人员。
我们在应用程序中遇到错误,因为队友误用了我们创建的端点,在 POST 正文中的可选参数中输入错误导致后端继续,就好像未设置可选参数一样。
我想知道通常什么是防止此类用户错误的最佳方法,让端点检查它们是否只收到他们期望的没有额外字段的请求正文数据是一种不好的做法吗?
Is it a good practice on a REST api to check for unexpected parameters in the body?
也许吧。更多的自由度有利于兼容性,但需要根据增加的复杂性来衡量这种好处。
您可以将 HTTP 请求的主体视为具有模式的消息 - 该模式可能是隐式的或显式的,它可能是标准化的消息或定制的东西。
问题:我们对架构不需要更改的信心有多大?协调服务器和远程客户端之间的更改有多昂贵?
控制未来变更成本的一种方法是设计消息处理模型,使新客户端可以与旧服务器通信,新服务器可以与旧客户端通信。
The simplest processing model that enables compatible changes is to ignore content that is not understood. -- David Orchard, 2003
您仍然可以报告无法识别的字段,这将为服务器运营商提供一种机制,用于检测在其架构实现中存在拼写错误的客户端。可能更友好的操作体验,但代价是更多的代码。取舍。
忽略内容时可能出现的一种复杂形式:变得(有点?)更难区分正常流量和恶意流量。请参阅 Dan Bergh Johnsson 关于 Secure By Design 的工作。
我是第一份工作的初级开发人员。
我们在应用程序中遇到错误,因为队友误用了我们创建的端点,在 POST 正文中的可选参数中输入错误导致后端继续,就好像未设置可选参数一样。
我想知道通常什么是防止此类用户错误的最佳方法,让端点检查它们是否只收到他们期望的没有额外字段的请求正文数据是一种不好的做法吗?
Is it a good practice on a REST api to check for unexpected parameters in the body?
也许吧。更多的自由度有利于兼容性,但需要根据增加的复杂性来衡量这种好处。
您可以将 HTTP 请求的主体视为具有模式的消息 - 该模式可能是隐式的或显式的,它可能是标准化的消息或定制的东西。
问题:我们对架构不需要更改的信心有多大?协调服务器和远程客户端之间的更改有多昂贵?
控制未来变更成本的一种方法是设计消息处理模型,使新客户端可以与旧服务器通信,新服务器可以与旧客户端通信。
The simplest processing model that enables compatible changes is to ignore content that is not understood. -- David Orchard, 2003
您仍然可以报告无法识别的字段,这将为服务器运营商提供一种机制,用于检测在其架构实现中存在拼写错误的客户端。可能更友好的操作体验,但代价是更多的代码。取舍。
忽略内容时可能出现的一种复杂形式:变得(有点?)更难区分正常流量和恶意流量。请参阅 Dan Bergh Johnsson 关于 Secure By Design 的工作。