java - 使现有 API 更加 RESTful
问题描述
我有一个现有的 API,我正在尝试使其更加 RESTful。
该应用程序涉及送礼者和送礼者。送礼人为送礼人买东西,然后在whatsapp上发送礼物的链接。
在为受赠者创建用户帐户之前,我首先通过将该人绑定到一个电话号码来进行一些验证。我有 2 个端点:
/sendSmsCode
/verifyUser
第一个端点向电话号码发送一个短信代码,第二个端点获取短信代码并验证其正确性。/verifyUser
然后返回一个会话令牌。然后使用此会话令牌来接受礼物并创建用户。
显然,这些不是 RESTful 端点。但是在这个阶段还没有创建用户,所以我不能做类似的事情/users/{id}/send-sms
(我知道它也不会太 RESTful,因为它包含一个动词)。
有什么建议么?
解决方案
我的意思是发表评论,但是评论太长了,所以我将其发布为答案(尽管它可能无法直接回答您的问题)。
显然,这些不是 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
用于将数据发送到此类端点)。
推荐阅读
- python - Pygame中的翻转布尔值(主菜单)
- c# - 将列标题添加到 HTML 表(列表到 HTML 表)
- java - NullPointerException 将在方法调用时抛出
- node.js - 如何使用适用于 node.js 的单实例弹性负载均衡器设置 HTTPS?
- java - java.lang.Error:未解决的编译问题重复的局部变量
- amazon-web-services - HTTP REST:可以根据响应大小在响应正文中返回不同的键吗?
- java - 将表格转换为列表
- python - 使用python“字符串索引必须是整数”在JSON导入中出现错误
- html - 防止 Safari 在具有最大高度和隐藏溢出的容器中折叠子 div
- python - 合并几个txt。用于主题建模的多行文件到一个 csv 文件(1 行 = 1 个文档)