首页 > 解决方案 > 在设计 REST API 时,是否可以要求在允许创建资源之前完成对资源的搜索?

问题描述

在现实世界中,可以想象两个人的姓、名和出生日期相同。

但是,在中等规模的数据库中,它更有可能是同一个人的复制品。为了防止创建重复项,我们的用户界面要求用户首先搜索此人。如果他们想要的记录存在,用户可以选择它。如果没有,他们可以添加它。如果需要,他们可以添加具有相同姓名和出生日期的人员 - 但通常,他们需要现有记录。

关键是,API 应该允许用户创建新记录,但理想情况下,我想要求他们先搜索。

在 API 情况下,我希望能够要求用户先搜索,然后在必要时添加,但我不确定 API 通常如何处理这种情况。通常会做什么?

标签: restapi-design

解决方案


因为其余的架构风格使用无状态请求,所以你不能在这里真正做你所要求的。

也就是说,您可能会想象一个网站会引导您完成域应用程序协议:您获取一个带有书签的 URL;该页面包含一个链接,您可以通过该链接访问搜索表单;您提交带有搜索条件的表单,它会返回一个可能匹配的列表和一个链接;点击链接将您带到“创建新记录”表格;用户提交此表单以请求服务器创建新用户。

但从语义上讲,最后一个请求与将“创建新记录”URL 硬编码到其中的客户端生成的请求没有什么不同。

您可以通过将信息编码到其中来使该 URL 更难猜测。例如,在搜索过程中,您可以将关键搜索词编码到 URL 中,将它们传递给表单并最终传递给表单提交,此时您可以检查提交的记录详细信息是否与之前的搜索匹配。

超媒体 API 的优点之一是,由于客户端不使用 URI 拼写的语义,服务器可以将信息编码到这些 URI 中以供以后使用。不幸的是,超媒体约束作为对“RESTful”API 的约束难以获得人们的关注。当然,这种设计实际上并不能保护您免受真正善于猜测的客户的侵害。


推荐阅读