假设我有以下对象图,客户端可以在HTTP PUT请求中提交以更新我的父对象
{
"Id": 123,
"FirstName": "Joe",
"LastName": "Smith",
"Schools": [
{
"Id": 444,
"Name": "Fun University"
},
{
"Id": 555,
"Name": "Unfun University"
}
]
}
在我的服务中,更新学校的唯一方法是通过学生。但是,我不一定能阻止客户端修改“444”ID。
我的问题是: 1.在服务器上验证id为444的学校是否属于id为123的学生是否足够安全? 2.或者,我的客户是否需要使用学生服务请求学生,然后使用学生服务中的学校列表,拨打学校服务(我创建)并在那里进行PUT? / p>
在方案1中,我将使用http://www.mydomain.com/api/students/123(PUT)更新整个对象。
在方案2中,我只使用http://www.mydomain.com/api/schools/444(PUT)
更新学校对象截至目前,我的意图是#1,但这不是一个好方法吗?
答案 0 :(得分:2)
仅在服务器上验证id为444的学校属于id为123的学生
为什么要检查依赖关系?
如果你只是编辑一所学校,这对学生资源没有任何兴趣。
只需发出您的PUT /student/123/school/444
即可处理。如果您的客户有更直接的访问权限,请将/school/{ID}
实施为新服务。
我认为你真正需要的是ID-not-changeable constraint
。
只是禁止任何用户通过put请求更改资源的ID。只需要很少改变ID,并且应该特别小心处理,因为其含义(必须更新所有学生的关系)。
不应允许PUT /students/123
改变学校本身,而只允许学生与他们建立关系(将他们从学生中移除或添加新的附加内容)。
您处理此问题的代码完全取决于您。