API Post方法中的参考相关资源

时间:2019-04-23 09:54:10

标签: json api asp.net-core api-design

我正在创建一个用于创建帖子的API端点:

POST > /posts

每个帖子最多可以具有一个类别和多个标签。

创建帖子时,我需要引用其类别和标签(如果有):

  1. 通常我发送CategoryId来引用类别;
  2. 通常我要发送标签名称,因为有些标签可能是新标签,因此我会发送它们。

所以我的Json会是这样的:

{
  "title": "Some title",
  "content": "Some content",
  "categoryId": 1,
  "tagsNames": ["adventure", "drama"]
}

或者我应该允许按名称引用类别,按ID引用标签:

{
  "title": "Some title",
  "content": "Some content",
  "categoryName": "books",
  "tagsIds": [1, 2]
}

要使用不同的端点,可以使用以下命令:

{
  "title": "Some title",
  "content": "Some content",
  "category": {
    "id": 1,
    "name": null
  },
  "tags": [
    {
      "id": null,
      "name": "adventure"
    },
    {
      "id": null,
      "name": "drama"
    }
  ]
}

然后后端确定如何通过ID或名称来引用类别和标签。

这有标准吗?

2 个答案:

答案 0 :(得分:0)

  

这有标准吗?

嗯,这没有标准。选择对您的API更有意义的方法,并确保已记录其属性。

但是一旦您表示了一种关系,就可以使用ID。如果名称是唯一的(并且不会更改),则可以用来标识您的资源。

答案 1 :(得分:0)

如何引用类别和标签取决于选项,类别和标签之间的模型关系。例如

如果模型关系如下:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public Category Category { get; set; }
    public List<Tag> Tags { get; set; }
}

json可以使用以下内容,请注意:您应该像这样public int? TagId { get; set;}

那样使tag的id为空。
{
"title": "Some title",
"content": "Some content",
"category": {
"id": 1,
"name": null
},
"tags": [
{
  "id": null,
  "name": "adventure"
},
{
  "id": null,
  "name": "drama"
}
]
}

如果模型关系如下:

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public int CategoryId { get; set; }
    public List<string> TagsNames { get; set; }
}

您可能会编写如下的json:

{
"title": "Some title",
"content": "Some content",
"categoryId": 1,
"tagsNames": ["adventure", "drama"]
}