0

1)如何处理人际关系?

假设我有一个由作者撰写的文章资源。

基本上我会有类似的东西:

{
    "article": {
        "id": 1,
        "title": "Foo bar",
        "body": "Lorem ipsum dolor sid amet",
        "published_on": "2011-05-06 21:54:23",
        "author": {
            "id": 25,
            "username": "johndoe"
        }
    }
}

我将访问我的资源api/articles/1

我的问题是,表示这些数据的最佳方式是什么?

我应该做类似的事情:

{
    "article": {
        "id": 1,
        "title": "Foo bar",
        "body": "Lorem ipsum dolor sid amet",
        "published_on": "2011-05-06 21:54:23",
    }
}

并通过调用访问作者api/articles/1/author

仅包含作者 ID(子对象标识符)

{
    "article": {
        "id": 1,
        "title": "Foo bar",
        "body": "Lorem ipsum dolor sid amet",
        "published_on": "2011-05-06 21:54:23",
        "author": {
            "id": 25,
        }
    }
}

或者包括上面看到的完整关系?


2) PUT 或 POST 创建新对象?

看看 SO 和其他地方,我注意到两者都用于创建和/或更新对象。

据我了解,两者都是有效的行动,但这取决于上下文。如果我创建与以前创建的对象相关的子对象,我必须使用POST.

例如:我为一篇文章创建投票,因为该文章已经存在,我将POST重新投票,但是,如果我创建一个新文章,我PUT就投票。

我对吗?


3)我们应该如何格式化日期?

我已经看到 SO 使用 Unix Timestamp,其中 ISO8601 主要用于其他地方。

对此有什么“标准”或建议吗?

4

1 回答 1

2
  1. 如何处理人际关系?

您的第一种方法不是很好,因为它不允许发现作者-可能是您想知道的。

第二种方法是有效的,但需要您提前知道 URI 模式以延迟获取作者,例如api/author/25.

只要您没有一对多的关系(文档的大小呈指数增长)或非常大的嵌套对象,第三种方法就可以了。

由几个人提倡的第四种方法是通过使用超链接而不是抽象标识符或完整文档来采用

  1. PUT 或 POST 创建新对象?

这里没有混淆。POST 始终用于创建新对象,而 PUT 应该更新现有对象(或者如果它不存在则可能创建一个对象。底线:每次调用 POST 时,都会更改系统(资源)的状态。但是你可以调用PUT 多次(幂等性 - 当您想安全地重试时很好)。

请注意,POST 链接通常不包含 ID(例如POST api/articles),而 PUT DO: PUT api/articles/42。如果您知道 ID,则该实体可能已经存在。

  1. 我们应该如何格式化日期?

UNIX 时间戳和都可以。我不确定JSON 模式建议中是否有任何标准设备:

5.23。格式

[...]

date-time 这应该是 UTC 时间中 YYYY-MM-DDThh:mm:ssZ 的 ISO 8601 格式的日期。这是日期/时间戳的推荐形式。

于 2012-07-11T12:34:28.207 回答