REST API子资源

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

每个场馆都有来宾:
/venues/1/guests

这是我感到困惑的地方。如果我想要更新一个访客资源,哪种方式更好:

POST /venue/1/guests/1/

或者
POST /guests/1

第二个选项较为简短,由于访客ID是唯一的,第二个选项完全可以胜任。但是第一个选项更加明确。所以我现在不知道该选择哪个路线。
谢谢。

你可能会对http://stackoverflow.com/questions/21363044/are-partial-response-un-restful/21363327#21363327感兴趣。 - Aurélien Bénel
2个回答

2

两种方法都是正确的,但是如果你向客户(客户端开发人员)保证访客ID无论在哪个场馆都是唯一的,我会选择这种方法。

POST /guests/{guestId}

我通常会使用这个:

POST /venues/{venueId}/guests/{guestId}

当我需要修改给定场所的来宾状态时,例如,来宾John Doe的ID为1,在场地ID为1的场所确认出席后,我将向以下URL提交数据(这只是一个示例,假设您可以为给定场所的给定来宾添加/更新的唯一内容是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来更新现有资源,如果你想要符合REST的风格。 - klimpond
虽然我同意你的观点,但这并非铁板钉钉的事情。http://roy.gbiv.com/untangled/2009/it-is-okay-to-use-post。 - shahshi15
1
是的,这并不是铁律,也不是教条。但是,在使用不同的方法来创建和更新资源背后的逻辑对我来说是显而易见的,提及它是很好的。 - klimpond

1

你可以把自己想象成有两个RESTful资源需要管理:

  • A) 场馆和
  • B) 客人

这些资源可以使用POST/GET/DELETE/PUT(CRUD操作)进行独立管理。

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

同时,您可以使用CRUD来将一个资源映射到另一个资源,例如:
POST /venues/[venue-id]/guests/[guest-id]/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接