当用户注册我的网络应用程序时,我会发送一封电子邮件来验证他的收件箱。 在电子邮件中有一个指向这样的资源的链接:
GET /verify/{token}
由于资源在幕后更新,它是否会破坏RESTful方法?
如何以RESTful方式完成?
答案 0 :(得分:7)
你所说的不是REST。 REST用于机器到机器的通信,而不用于人机交流。您可以开发第一方REST客户端,它将激活发送到REST服务。
您可以在浏览器中使用验证URI来访问REST客户端:
# user follows a hyperlink in the browser manually
GET example.com/client/v1/verify/{token}
# asking the client to verify the token
之后,REST客户端将从REST服务获取用于验证的超链接,并在后台将POST发送到服务。
# the REST client follows the hyperlinks given by the service automatically
# the REST client can run either on the HTTP client or server side
GET example.com/api/v1
# getting the starting page of the REST service
# getting the hyperlink for verification
POST example.com/api/v1/verification {token}
# following the verification hyperlink
如果您有服务器端第一方REST客户端,那么对REST服务的HTTP请求将完全在服务器上运行,您将无法在浏览器中看到任何相关信息。如果您有客户端REST客户端,那么您可以使用AJAX CORS在浏览器中发送POST,或者您可以尝试使用HTML表单直接POST(不推荐)。无论如何,激活应该是POST或PUT。
答案 1 :(得分:0)
你不是在思考REST吗?通过电子邮件验证,您希望用户只需单击他正在使用的任何邮件用户代理的链接,这样您最终将在服务器上进行简单的GET(显示为用户的超链接),令牌在路径中或作为查询字符串的一部分:
GET http://example.com/verify-email/TOKEN
GET http://example.com/verify-email?token=TOKEN
这个用例都可以。它不是真正的你正在获得或创造的资源;只是后端某个进程的触发器。
为什么你认为这会与好的设计相冲突?
答案 2 :(得分:0)
这取决于你想做什么。
例如,在验证用户后是否会触发电子邮件?如果是这样,它不是幂等方法,你应该使用POST。
示例:
POST /users/{id}/verify/{token}
如果该方法除了更新之外没有任何后果,我认为你应该使用PUT。