36

我的用户在 iOS 应用程序中输入了一些信息字段。必须在我的服务器上验证此信息,该服务器具有 RESTful API。验证后,iOS 应用程序的 UI 会更改以指示结果。

GET、PUT 或 POST 似乎都不合适,因为我没有获取资源,也没有创建或更新资源。

实现此验证的最佳 REST 操作是什么?

4

6 回答 6

12

我使用与您相同的场景并为此使用 PUT。您必须问自己:“当我两次发送相同的请求时,这是否会在服务器上产生不同的状态?” 如果是,使用 POST,如果没有,使用 PUT。

于 2013-08-13T21:02:53.143 回答
9

我的用户在 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)
于 2013-08-13T21:02:58.173 回答
8

我建议使用一个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 方法,其中验证是具有服务器状态的资源。

于 2013-08-14T08:10:52.637 回答
1

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

于 2020-08-13T12:59:39.320 回答
1

我相信它类似于 GET 实体,但由于我们需要发送数据来验证并在 URL 中发送机密数据是错误的习惯,因为只有有效负载数据由 TLS 加密,所以剩下的唯一方法是 POST 或 PUT。

但是,您可以在 validate 中保存或更新数据(例如,“verified”:false)。根据需求,你可以去POSTPUTPOST如果没有更新推荐)

 POST /user/validate-something
于 2021-10-04T16:14:20.737 回答
-1

似乎您没有以正确的方式进行操作,如果验证是在服务器端,那么它应该在使用 POST 方法提交数据时发生。然后您将验证该数据,如果验证失败,则您可以引发 400 BAD REQUEST 错误,否则您可以创建资源。

这种方法更加 RESTful,因为正确使用 POST 方法来创建资源或在验证失败时引发 400

于 2021-06-09T11:01:24.840 回答