我的用户在 iOS 应用程序中输入了一些信息字段。必须在我的服务器上验证此信息,该服务器具有 RESTful API。验证后,iOS 应用程序的 UI 会更改以指示结果。
GET、PUT 或 POST 似乎都不合适,因为我没有获取资源,也没有创建或更新资源。
实现此验证的最佳 REST 操作是什么?
我的用户在 iOS 应用程序中输入了一些信息字段。必须在我的服务器上验证此信息,该服务器具有 RESTful API。验证后,iOS 应用程序的 UI 会更改以指示结果。
GET、PUT 或 POST 似乎都不合适,因为我没有获取资源,也没有创建或更新资源。
实现此验证的最佳 REST 操作是什么?
我使用与您相同的场景并为此使用 PUT。您必须问自己:“当我两次发送相同的请求时,这是否会在服务器上产生不同的状态?” 如果是,使用 POST,如果没有,使用 PUT。
我的用户在 iOS 应用程序中输入了一些信息字段。必须在我的服务器上验证此信息,该服务器具有 RESTful API。验证后,iOS 应用程序的 UI 会更改以指示结果....我没有获得资源,也没有创建或更新资源。
由于您没有保存任何东西(没有修改任何资源),我认为这在技术上比 RESTful 对我来说更像是 RPC。
以下是我的看法,请勿将其视为福音:
如果信息只是被提交并且您说是或否,并且您没有保存它,我会说没问题POST
..
如果信息实际上被保存/更新,那么选择正确的 HTTP 方法将更加相关。
POST = CREATE / SUBMIT (in an RPC context)
PUT = UPDATE (or CREATE if there is nothing to UPDATE)
我建议使用一个ValidationResource
和两个请求。此资源的每个实例代表一组数据的验证。工作流程:
1.新建ValidationResource
POST /path/to/validations
201 Created
Location: /path/to/validations/<unique-id-of-this-validation>
2.查询结果
GET /path/to/validations/<unique-id-of-this-validation>
200 OK
{'valid': true}
或{'valid': false}
这是一种 RESTful 方法,其中验证是具有服务器状态的资源。
Google 提议为 REST API 使用自定义方法
对于自定义方法,它们应该使用以下通用 HTTP 映射:
https://service.name/v1/some/resource/name:customVerb
使用 : 而不是 / 将自定义动词与资源名称分开的原因是为了支持任意路径。例如,取消删除文件可以映射到 POST /files/a/long/file/name:undelete
来源:https ://cloud.google.com/apis/design/custom_methods
因此,对于验证,URL 应该是 POST /resource:validate
我相信它类似于 GET 实体,但由于我们需要发送数据来验证并在 URL 中发送机密数据是错误的习惯,因为只有有效负载数据由 TLS 加密,所以剩下的唯一方法是 POST 或 PUT。
但是,您可以在 validate 中保存或更新数据(例如,“verified”:false)。根据需求,你可以去POST
或PUT
(POST
如果没有更新推荐)
POST /user/validate-something
似乎您没有以正确的方式进行操作,如果验证是在服务器端,那么它应该在使用 POST 方法提交数据时发生。然后您将验证该数据,如果验证失败,则您可以引发 400 BAD REQUEST 错误,否则您可以创建资源。
这种方法更加 RESTful,因为正确使用 POST 方法来创建资源或在验证失败时引发 400