我有几个数据库对象,我必须能够修改它们中的所有字段。所以我真的怀疑实现这个的方式。 我有两个选择:
为每个对象实现一个通用视图。例如这样:
/client PUT
。 body将包含字段名称和字段值。
为每个对象中的每个字段实现视图(其中有很多字段)。
嗯..第二种方法是通用的,它提供了新对象的简单添加,但可能有点复杂:我们必须检查每个字段是否存在,检查值类型是否匹配等。第一种方法清晰简单,但会有很多观点和很多无聊的工作。所以我不能选择其中之一。
这两种方法的优点和缺点是什么,这些方法不明显,将来会引起麻烦? 感谢。
P.S。我正在使用Python的Flask。
答案 0 :(得分:2)
[将我的评论转换为答案]
正如@jonrsharpe所说,像../../modify/..
这样的网址根本不是RESTful。应该使用HTTP谓词(GET,POST,PUT)。
鉴于您的情况以及是否由我决定,我将每个数据库对象(表中的一个记录/行)公开为REST资源。应使用HTTP Patch semantics修改资源中的各个字段。
假设您的对象有三个字段:field1
,field2
,field3`,如果我只想修改字段2,我可以接受以下内容:
Verb: PATCH
URL: /path/to/your/object #Does not have modify or any similar "verbs"
Data: {"field2": "newValue"} #JSON is just an example.
结果(使用JSON,因为它有点容易阅读)
{"field1": "oldValue1", "field2": "newValue", "field3": oldValue3"}
例如:/ client PUT
这可能有效,也可能无效。 HTTP PUT语义替换整个对象。因此,如果您仅传入一个字段,则结果(理想情况下)应如下所示:
{"field2": "newValue"} #The other fields are lost.
注意:我在答案中概述的补丁数据格式是错误的。 Please read this article关于数据应该如何(感谢@Jim!)。