REST API 子资源

Posted

技术标签:

【中文标题】REST API 子资源【英文标题】:REST API sub resources 【发布时间】:2014-02-04 02:38:02 【问题描述】:

创建我的第一个 REST API,我有一个问题。我有一个资源场地:

/venues

每个场地都有客人:

/venues/1/guests

这是我感到困惑的地方。如果我想更新访客资源,这样做是否更好:

POST /venue/1/guests/1/

POST /guests/1

第二个选项更短,因为客人 ID 是唯一的,所以第二个可以正常工作。但首先更明确。

所以我被困在从这里出发的路线上。

谢谢

【问题讨论】:

你可能对***.com/questions/21363044/…感兴趣 【参考方案1】:

这两种方法几乎都是正确的,但是,如果您向客户(客户开发人员)保证,无论他们访问的地点如何,客人 ID 始终是唯一的,我会选择

POST /guests/guestId

我通常会使用这个:

POST /venues/venueId/guests/guestId

当我必须更改给定场地的客人状态时。例如,ID 为 1 的客人 John Doe 已为场地 ID 为 1 的场地回复“是”,然后我会将数据发布到以下网址(这只是一个示例,假设您唯一可以添加/给定场地的给定客人的更新是 RSVP 数据):

POST /venues/1/guests/1
request body: "RSVP", true

但如果我想将 John Doe 的名字更新为 John Foo,我可能会这样做

PUT /guests/1
request body: "firstName":"John","lastName":"Foo"

希望对你有帮助!

【讨论】:

HTTP 协议应该使用 POST 请求来创建新资源并使用 PUT 来更新现有资源,如果您喜欢 RESTy。 虽然我同意你的观点,但它不是一成不变的。 roy.gbiv.com/untangled/2009/it-is-okay-to-use-post. 是的,它不是一成不变的,也不是教条。但是使用不同方法创建和更新资源背后的逻辑对我来说是显而易见的,值得一提。【参考方案2】:

你可以认为你有两个 RESTful 资源需要管理

A) 场地和 B) 客人

这些资源可以使用POST/GET/DELETE/PUT (CRUD operations)独立管理

POST /venues/
GET /venues/
POST /guests/
GET /guests/

您还可以使用 CRUD 将一个资源映射到另一个类似的资源

POST /venues/[venue-id]/guests/[guest-id]/

【讨论】:

以上是关于REST API 子资源的主要内容,如果未能解决你的问题,请参考以下文章

REST API 子资源,要返回的数据?

Spring REST中的子资源

如果通过rest api发布资源,是不是必须存储资源?

REST API 设计 - 通过 ID 加载创建资源

无法在spring boot data rest中直接发布到子资源

基于替代标识符获取rest API中的资源