API端点更新一对一关系

时间:2019-08-26 11:35:34

标签: api api-design

我有两个实体Post和PostStatus:

Post (PostId PK, PostStatusId FK, Title, Content)

PostStatus (PostStatusId PK, Name)

Post有一个PostStatus,始终定义,并带有以下三个值之一:

PostStatusId    Name    
1               Approved
2               OnHold
3               Rejected

我为Posts网址创建了一个API端点,如下所示:

HTTP POST     /posts             > Create new post
HTTP PUT      /posts/{postId}    > Update post 
HTTP DELETE   /posts/{postId}    > Delete post 
HTTP GET      /posts/{postId}    > Get post

将PostStatus更新为以下三个值之一的正确API网址是:ApprovedOnHoldRejected

我有2个选择:

  1. 仅更新PostStatus。

  2. 更新PostStatus,但发送额外的数据,具体取决于PostStatus。

1 个答案:

答案 0 :(得分:1)

没有必要映射API返回的资源来对应数据库结构。最好将它们分开,因为它可以为您提供更大的灵活性。例如,您将来可能希望切换到NoSQL,那么它将可能是具有Post和Post状态的单个集合。但是API接口不应更改。

话虽如此,我将把状态包含在API返回的Post对象中。然后,更新状态仅为PATCH(如果您只想更新状态):

PATCH /posts/{id}
{ status: OnHold }

或者如果要替换整个资源,请使用PUT