用于更新树层次结构中节点父级的 REST API 设计
Posted
技术标签:
【中文标题】用于更新树层次结构中节点父级的 REST API 设计【英文标题】:REST API design for updating the parent of a node in tree hierarchy 【发布时间】:2019-05-09 05:02:57 【问题描述】:我有三个具有以下结构的数据库表:
Country
id | name
State
id | name | country_id
City
id | name | state_id
这些的现有 REST 端点 URL 是:
/country For list of all countries
/country/country_id For a specific country
/country/country_id/state For list of all states in a country
/country/country_id/state/state_id For a specific state
/country/country_id/state/state_id/city For list of all the cities in a state of a country
/country/country_id/state/state_id/city/city_id For a specific city
现在我需要将一个城市从一个州移动到另一个州,我应该如何为这个操作设计 REST Endpoint?建议。
【问题讨论】:
【参考方案1】:我需要将一个城市从一个州移动到另一个州,我应该如何为此操作设计 REST Endpoint?
据我所知,这里没有很好的答案。
一个常用的启发式方法是考虑如何在网站上执行此操作:您将加载一些表单,使用输入控件来描述您的更改,提交表单,然后 http 客户端将POST
表单数据到服务器指定的某个 URI。
所以这部分很简单——URI 可以是“任何东西”,因为客户端并不关心;它只是使用表单中的 URI。
服务器将接收消息并进行处理。改变其他资源的副作用是可能的,由服务器自行决定,所以没关系。
但是缓存的故事不是很好。 “移动”一个城市的请求的语义改变了源状态、目标状态,也许还有城市本身的表示。我们可以安排表单,使这些资源中的任何一个因成功响应而失效(只需使用该标识符作为请求的目标),但我们没有任何标准化机制来使其他资源失效。
如果整个树层次结构由单个资源描述,那么就没有问题 - 那将是我们无效的一个资源。
(想象一下 wikipedia - 您更改了 Boston
的页面,这也更改了 Massachusetts
的页面。没有标准的方法可以告诉客户 两个 页面都已更改。 )
【讨论】:
以上是关于用于更新树层次结构中节点父级的 REST API 设计的主要内容,如果未能解决你的问题,请参考以下文章