【发布时间】:2017-07-06 13:30:18
【问题描述】:
我很难理解更新资源的 REST 原则。
例如,此响应包含资源的 id
获取 /users/5 { “用户 ID”:5 "first_name" : "约翰", "last_name" : "Doe", “minutes_active”:10
} 这假设资源的 id 是在请求的 url 中声明的
GET /users/5
{
"first_name" : "John",
"last_name" : "Doe",
"address":
{
"street" : "First Street 10",
"postal" : "0000",
"city": "Dublin"
},
"phones": [
{
"type" : "work",
"number" : "555 473-0000",
},
{
"type" : "home",
"number" : "555 473-0000",
}]
}
如果我只想更新地址,我正在考虑使用以下选项之一。
1.
POST /users/5
{
"address":
{
"street" : "First Street 10",
"postal" : "0000",
"city": "Dublin"
}
}
2.
PUT /users/5
{
"address":
{
"street" : "First Street 10",
"postal" : "0000",
"city": "Dublin"
}
}
3.
PUT /users/5/address
{
"address":
{
"street" : "First Street 10",
"postal" : "0000",
"city": "Dublin"
}
}
虽然 POST 不是幂等的,但在这种情况下它总是会做同样的工作(充当幂等),以及 PUT。我在某处读到这种类型的请求被认为是部分更新,对于这种类型的请求,我们应该使用 PATCH。
此时我想避免使用 PATCH,并使用一些替代方法。
此外,如果我将地址隔离为 /users/5/address 中的单独资源,我可以使用 PUT,这将是一个完全遵循 REST 原则的解决方案。但这可能是我开发人员想要更新 fe 的问题。电话和地址都使用一个请求。
如果我真的想使用选项 1 或 2(以及一些大型系统,如 zendesk、twitter 正在这样做),我会遇到任何我目前没有真正看到的严重问题吗?
【问题讨论】:
标签: rest api restful-architecture api-design