“神奇领域”的RESTful原则

时间:2017-11-06 07:38:21

标签: rest api idempotent

在移动应用客户端的RESTful API后端中,我们有一个资源User,数据库字段为birthday

当Sam对自己的个人资料GET /user/1进行身份验证时,我们会收到这样的资源:

{
    id: 1,
    name: "Sam Smith",
    birthday: "1990-01-01",
    age: 27
}

在这种情况下,age仅仅是客户的便利,不必计算Sam的年龄。

但是当一个陌生人要求Sam的个人资料GET /user/1时,他收到的资源略有不同:

{
    id: 1,
    name: "Sam Smith",
    age: 27
}

此处,隐私birthday被省略,现在age不仅仅是方便,还需要它,因为客户端无法在没有birthday的情况下计算年龄。

我已经在指示客户端根据权限可能会省略某些字段。

但是当Sam希望更新他的个人资料时,他会获取之前收到的资源,并对其进行修改,并PUT /user/1

{
    id: 1,
    name: "Sam Smith",
    birthday: "2000-02-02", // Birthday was changed
    age: 27 // Should he update the age? It's the same data source as birthday.
}

服务器端我可以选择忽略age,但客户可能认为他们可以直接更改age字段。我可以禁止age资源上的PUT字段,但客户端必须修改从GET请求中收到的资源架构。

在这种情况下,最佳原则是什么?

客户端是否真的在PUT请求中计算新的年龄,即使服务器会忽略它,否则会返回HTTP 409冲突响应?

0 个答案:

没有答案