首页 > 解决方案 > 使现有 API 更加 RESTful

问题描述

我有一个现有的 API,我正在尝试使其更加 RESTful。

该应用程序涉及送礼者和送礼者。送礼人为送礼人买东西,然后在whatsapp上发送礼物的链接。

在为受赠者创建用户帐户之前,我首先通过将该人绑定到一个电话号码来进行一些验证。我有 2 个端点:

/sendSmsCode 
/verifyUser

第一个端点向电话号码发送一个短信代码,第二个端点获取短信代码并验证其正确性。/verifyUser然后返回一个会话令牌。然后使用此会话令牌来接受礼物并创建用户。

显然,这些不是 RESTful 端点。但是在这个阶段还没有创建用户,所以我不能做类似的事情/users/{id}/send-sms(我知道它也不会太 RESTful,因为它包含一个动词)。

有什么建议么?

标签: javarest

解决方案


我的意思是发表评论,但是评论太长了,所以我将其发布为答案(尽管它可能无法直接回答您的问题)。

显然,这些不是 RESTful 端点。

REST 是一种架构风格,而不是设计 URI 的食谱。强调 REST 本身并不关心 URI 拼写是永远不够的,只要 URI 符合RFC 3986 即可

要被视为 RESTful,应用程序必须遵循Roy Thomas Fielding 的论文第 5 章中定义的一组约束。

您在问题中提到使用使用会话令牌。如果会话状态保留在服务器上,那么它根本就不是 RESTful。REST 应用程序是无状态的,其中一个请求包含服务器理解的所有必需信息,而不利用存储在服务器上的会话状态。

我不能做类似的事情/users/{id}/send-sms(我知道它也不会太 RESTful,因为它包含一个动词)。

REST 架构风格的一个重要概念是资源及其标识符

URI(或通用资源标识符)旨在标识资源而不是表达对资源的操作。对资源进行的操作可以用请求方法来表示。请求方法是请求语义的主要来源,指示客户端发出此请求的目的以及客户端期望的成功结果。

为了正确识别资源,使用名词是自然的选择(因为动词由 HTTP 方法表示)。但不强制只使用名词。只要您遵守 REST 约束,您肯定可以设计一个带有一些动词的 RESTful API(并可能POST用于将数据发送到此类端点)。


推荐阅读