在设计 REST API 时,是否可以要求在允许创建资源之前完成对资源的搜索?
When designing a REST API, is it possible to require a search for a resource be completed before allowing it to be created?
在现实世界中,可以想象你可以有两个姓氏、名字和出生日期相同的人。
但是,在中等规模的数据库中,它更有可能是同一个人的副本。为了防止创建重复项,我们的用户界面要求用户首先搜索此人。如果他们想要的记录存在,用户可以 select 它。如果没有,他们可以添加它。如果需要,他们可以添加具有相同姓名和出生日期的人员 - 但通常,他们需要现有记录。
关键是,API 应该允许用户创建新记录,但理想情况下,我想要求他们先搜索。
在 API 情况下,我希望能够要求用户先搜索然后在必要时添加它,但我不确定 API 通常如何处理这个问题种情况。通常做什么?
因为其余的架构风格使用无状态请求,所以你不能真正按照你在这里的要求去做。
也就是说,您可能会想象一个引导您完成域应用程序协议的网站:您获取一个已添加书签的 URL;该页面包含一个 link,您可以通过它进入搜索表单;您提交带有搜索条件的表单,它 returns 可能匹配的列表和 link;按照 link 将您带到 "create new record" 表格;用户提交此表单以请求服务器创建新用户。
但从语义上讲,最后一个请求与将 "create new record" URL 硬编码到其中的客户端生成的请求没有什么不同。
您可以通过将信息编码到其中来使 URL 更难猜测。例如,在搜索过程中,您可以将关键搜索词编码到 URL 中,将它们传递给表单并最终提交表单,此时您可以检查提交的记录详细信息是否与之前的搜索相匹配。
超媒体的优势之一 API 是因为客户端不使用 URI 拼写的语义,服务器可以将信息编码到这些 URI 中供以后使用。不幸的是,作为对 "RESTful" API 的约束,超媒体约束难以获得思想共享。当然,这种设计实际上并不能保护您免受真正擅长猜测的客户的侵害。
在现实世界中,可以想象你可以有两个姓氏、名字和出生日期相同的人。
但是,在中等规模的数据库中,它更有可能是同一个人的副本。为了防止创建重复项,我们的用户界面要求用户首先搜索此人。如果他们想要的记录存在,用户可以 select 它。如果没有,他们可以添加它。如果需要,他们可以添加具有相同姓名和出生日期的人员 - 但通常,他们需要现有记录。
关键是,API 应该允许用户创建新记录,但理想情况下,我想要求他们先搜索。
在 API 情况下,我希望能够要求用户先搜索然后在必要时添加它,但我不确定 API 通常如何处理这个问题种情况。通常做什么?
因为其余的架构风格使用无状态请求,所以你不能真正按照你在这里的要求去做。
也就是说,您可能会想象一个引导您完成域应用程序协议的网站:您获取一个已添加书签的 URL;该页面包含一个 link,您可以通过它进入搜索表单;您提交带有搜索条件的表单,它 returns 可能匹配的列表和 link;按照 link 将您带到 "create new record" 表格;用户提交此表单以请求服务器创建新用户。
但从语义上讲,最后一个请求与将 "create new record" URL 硬编码到其中的客户端生成的请求没有什么不同。
您可以通过将信息编码到其中来使 URL 更难猜测。例如,在搜索过程中,您可以将关键搜索词编码到 URL 中,将它们传递给表单并最终提交表单,此时您可以检查提交的记录详细信息是否与之前的搜索相匹配。
超媒体的优势之一 API 是因为客户端不使用 URI 拼写的语义,服务器可以将信息编码到这些 URI 中供以后使用。不幸的是,作为对 "RESTful" API 的约束,超媒体约束难以获得思想共享。当然,这种设计实际上并不能保护您免受真正擅长猜测的客户的侵害。