我正在设计一个允许客户端POST(创建(资源的REST api。让我们调用我的资源是Subscription
,我的 REST API 接受一个名为 Subscription
的 DTOPOST 请求需要与将在服务器端验证的验证码一起发送。
我的问题是放置验证码令牌的最佳位置在哪里,我正在考虑一些选项:
- 直接在
Subscription
内 - 作为 URL 中的参数,例如:/subscriptions?captcha_token=abcd1234
- 作为 HTTP 标头
- 创建一个新的 Dto,用于包装
Subscription
和携带字段captchaToken
欢迎任何其他建议。
谢谢。
对于任何与身份验证或授权相关的内容,我通常依赖于标头或查询字符串参数。
通常,我不喜欢将有效负载与与身份验证相关的材料混合在一起,也不喜欢封装它。
将其放在 HTTP 标头中或作为查询字符串参数可以在那里提供大量的隔离。 此外,由于它独立于请求正文,因此您可以为每个 API 调用实现更广泛的身份验证控制,而无需依赖于请求正文的存在(对于无论如何都不应该携带请求正文的 GET 请求很重要(。
的客户端可以修改/发送 HTTP 标头信息时,才可以使用 HTTP 标头。此方法不适用于标准浏览器。
您没有过滤资源,因此从 REST 的角度来看,查询参数没有意义,并且您不希望将验证码答案作为查询参数发送。
通常,一个人提交验证码信息(id,答案(以及表单数据(有效载荷(。您通常还会将验证码与表单一起显示。
因此,最后唯一有用的选择是将验证码信息作为有效负载/表单数据的一部分发送。
是否应该将数据放入订阅DTO取决于您的设计/偏好。
我建议使用类似Subscription(Data)
和SubscriptionRequest
的东西,其中SubscriptionRequest
包含SubscriptionData
和 Captha 信息(验证码 ID 和答案(