应该通过正文发送 null 或空字符串值吗?
Should send null or empty string value via body?
我们应该根据请求发送 null 或空字符串值吗?
我的意思是我们有一个可选值,它目前有一个值。如果用户想要删除该可选字段的值,API 应该理解 null 或 empty 是删除值吗?
例如:
{
name: { type: String, required: true },
phone: { type: String, required: false }
}
在数据库中:
{
name: "Alex",
phone: "012-333.222"
}
现在,用户想删除他们的 phone 号码
我们应该定义如下:
PUT /users/user-id-1
{
phone: null
}
这似乎是一个糟糕的约定
虽然在前端,通常这取决于是否使用删除按钮,或者,他们只是将字段留空
phone: ''
- 表示用户将字段留空
phone: null
- 表示用户单击删除字段按钮。您决定是删除该字段,还是只将文档字段设置为空。
我通常会删除该字段,因为它现在没用了。
如果您只想更新文档中的一个 属性 您可以使用 PATCH 方法而不是 PUT 方法,您的代码应该如下所示:
PATCH /users/user-id-1
{
phone: ""
}
Should we send a null or empty string value on request ?
REST doesn't care; which is to say that it tells us to use self descriptive messages to transfer documents over a network,但它并没有告诉我们文档的表示应该是什么。
您要查看的是消息模式定义,特别是设计您的模式,使其可以以向后兼容的方式扩展。 XML 社区花了很多时间探索这些想法; Orchard 2004 可能是一个很好的起点。
在 HTTP 中,描述资源更改的基本机制是使用带有新表示副本的 PUT 命令。所以一个请求可能看起来像:
PUT /users/user-id-1
Content-Type: application/json
{
name: "Alex",
phone: null
}
如果您的模式定义为 phone
字段是可选的,并且可选和 null 是等效的(与其他一些隐含值相反),那么您可以等效地使用:
PUT /users/user-id-1
Content-Type: application/json
{
name: "Alex"
}
在表示非常大而您所做的更改很小的情况下,您可能希望支持 PATCH。
PATCH /users/user-id-1
Content-Type: application/merge-patch+json
{
phone: null
}
请注意,HTTP PATCH specification includes the Allow-Patch 允许客户端发现服务器支持资源的哪些补丁表示。
我们应该根据请求发送 null 或空字符串值吗?
我的意思是我们有一个可选值,它目前有一个值。如果用户想要删除该可选字段的值,API 应该理解 null 或 empty 是删除值吗?
例如:
{
name: { type: String, required: true },
phone: { type: String, required: false }
}
在数据库中:
{
name: "Alex",
phone: "012-333.222"
}
现在,用户想删除他们的 phone 号码 我们应该定义如下:
PUT /users/user-id-1
{
phone: null
}
这似乎是一个糟糕的约定
虽然在前端,通常这取决于是否使用删除按钮,或者,他们只是将字段留空
phone: ''
- 表示用户将字段留空
phone: null
- 表示用户单击删除字段按钮。您决定是删除该字段,还是只将文档字段设置为空。
我通常会删除该字段,因为它现在没用了。
如果您只想更新文档中的一个 属性 您可以使用 PATCH 方法而不是 PUT 方法,您的代码应该如下所示:
PATCH /users/user-id-1
{
phone: ""
}
Should we send a null or empty string value on request ?
REST doesn't care; which is to say that it tells us to use self descriptive messages to transfer documents over a network,但它并没有告诉我们文档的表示应该是什么。
您要查看的是消息模式定义,特别是设计您的模式,使其可以以向后兼容的方式扩展。 XML 社区花了很多时间探索这些想法; Orchard 2004 可能是一个很好的起点。
在 HTTP 中,描述资源更改的基本机制是使用带有新表示副本的 PUT 命令。所以一个请求可能看起来像:
PUT /users/user-id-1
Content-Type: application/json
{
name: "Alex",
phone: null
}
如果您的模式定义为 phone
字段是可选的,并且可选和 null 是等效的(与其他一些隐含值相反),那么您可以等效地使用:
PUT /users/user-id-1
Content-Type: application/json
{
name: "Alex"
}
在表示非常大而您所做的更改很小的情况下,您可能希望支持 PATCH。
PATCH /users/user-id-1
Content-Type: application/merge-patch+json
{
phone: null
}
请注意,HTTP PATCH specification includes the Allow-Patch 允许客户端发现服务器支持资源的哪些补丁表示。