我可以在/ user / {username}网址上获取用户的数据,响应为
from itertools import combinations
for pair in combinations([a, b, c], 2):
assert np.array_equal(pair[0], pair[1])
在我的实现中,如果您将数据放在/ user / {username} URL上,则后端将使用指定的用户名创建或更新用户。
当后端在URL中获得用户名(如 / user / foo 和http有效负载)时,正确的处理方式是什么?
{
"id" : 1,
"username" : "testuser",
"email" : "test@example.org"
}
我应该返回 409-冲突,还是应该使用有效负载中的用户名创建或更新用户?
答案 0 :(得分:1)
在最初的REST概念中,URL应该实际上是URI-资源标识符,也就是说,可以唯一地标识系统中的 user 实体。
因此,如果模型中的username
是唯一且不可能有2个同名用户,则可以在资源中使用username
标识符 URL。
示例-/user/foo
但是,如果两个具有不同id
的用户可以拥有相同的username
,那么根据 strict REST的规定,您不能使用username
作为一部分的URL-它将不再是REST,仅是一些在PUT请求的有效负载中接受JSON的网络服务。
长话短说:
1)如果username
不是系统中用户的唯一标识符-请勿在URL中使用它,请改用id
,例如,您提到的URL将是{{1} }
2)如果/user/1
是系统中的唯一标识符-那么您可以拥有username
。
================================================ ===========================
在这两种情况下,您都需要进行完整性检查,以确保有效载荷中的值对应于URL中的值:
1),请检查URL中的/user/foo
是否与有效负载中的相同
对于2),请检查URL中的id
是否与有效负载中的相同
如果不一致,我将返回状态username
-该请求的格式正确,但由于语义错误而无法遵循。
确切描述了语义上的不一致-JSON有效负载的结构是正确的,但是URL和有效负载中的语义HTTP 422 Unprocessable Entity
或id
不匹配。