rest - 用于重载 GET 动词的 REST 策略
问题描述
考虑需要创建一个 GET 端点以使用 4 个选项之一获取成员详细信息(这在具有 RPC 调用的遗留应用程序中很常见)
- 通过ID获取会员
- 通过 SSN 获取会员
- 通过Phone和LastName的组合获取成员(都必须通过)
实现 REST 精神并提供这种灵活性的推荐策略是什么?
我能想到的一些选择是:
基于参数
/user/{ID}
/user?ssn=?
/user?phone=?&lname=?
单独的端点
/user/{ID}
/user/SSN/{SSNID}
/user/{lname}/{phone}
用于自定义的 RPC
/user/{ID}
/user/findBySSN/
/user/findbycontact/
解决方案
REST 不在乎您对标识符使用什么拼写。
例如,想想你将如何在网络上做到这一点。您将提供表格,每组搜索条件一个。消费者会选择要使用的表单并提交表单,而无需知道 URI 是什么。
对于 HTML 表单,有特定的处理规则来描述如何将表单信息复制到 URI 中。该表单具有URI Template的方面。
URI 模板既提供了 URI 空间的结构性描述,也提供了在提供变量值时如何构造与这些值对应的 URI 的机器可读指令。
但是没有任何规则限制服务器提供 URI 模板,该模板指示客户端将变量值复制到路径段而不是查询字符串中。
换句话说,在 REST 中,服务器保留对自己的 URI 空间的控制。
推荐阅读
- angular - 将两个 ngValue 和两个 ngModel 放在一起很热?
- reactjs - 你可以在同一个网站上使用 React 平滑滚动和 React Router Links 吗?
- flutter - RangeSlider 偶尔显示空白标签
- c++ - 如何创建一个 (f)16 重复 n 次的数字?
- javascript - 如何在三行而不是 1 行中显示数据?
- javascript - 累积函数数组中每个函数的返回值
- mysql - 加入 1 到 N 个映射列
- laravel - Laravel 自定义或扩展的 belongsToMany
- c++ - 为什么在键类型中使用引用时 lambda 函数在 std::lower_bound 中不起作用?
- swift - 在 CoreData / SwiftUI 的实体中显示属性中的最高数字