Python REST良好设计实践

Python REST良好设计实践,python,rest,flask,Python,Rest,Flask,我有几个数据库对象,我必须能够修改其中的所有字段。所以我真的很怀疑如何实现这一点。 我有两个选择: 为每个对象实现一个通用视图。例如: /客户看跌期权。其中body将包含字段名和字段值 为每个object中的每个字段实现视图——它们有很多 嗯。。第二种方法是通用的,它可以方便地添加新对象,但可能有点复杂:我们必须检查每个字段是否存在,检查值类型是否匹配等。第一种方法清晰简单,但会有很多视图和大量枯燥的工作。所以我不能选择其中一个 这两种方法的优点和缺点是什么?这些优点和缺点不明显,将来可能会引起

我有几个数据库对象,我必须能够修改其中的所有字段。所以我真的很怀疑如何实现这一点。 我有两个选择:

为每个对象实现一个通用视图。例如: /客户看跌期权。其中body将包含字段名和字段值

为每个object中的每个字段实现视图——它们有很多

嗯。。第二种方法是通用的,它可以方便地添加新对象,但可能有点复杂:我们必须检查每个字段是否存在,检查值类型是否匹配等。第一种方法清晰简单,但会有很多视图和大量枯燥的工作。所以我不能选择其中一个

这两种方法的优点和缺点是什么?这些优点和缺点不明显,将来可能会引起麻烦? 谢谢


另外,我正在使用Python的烧瓶。

[将我的评论转换为答案]

正如@jornsharpe所说,像.././modify/这样的URL。。一点也不安宁。应该改用HTTP动词GET、POST、PUT

考虑到您的情况,如果由我决定,我会将表中的每个数据库对象公开一条记录/行作为REST资源。修改资源中的各个字段应使用

假设您的对象有三个字段:field1、field2、field3`,如果我只想修改field2,我会让webservice接受如下内容:

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.

注意:我在回答中概述的补丁数据格式是错误的。关于数据应该如何处理,谢谢@Jim

如果将一个表记录作为一个资源公开,并且为了修改记录中的各个字段,使用修改端点不是RESTful的,该怎么办;若要更改状态,请修补或放置到正常端点。@jornsharpe我知道。我写这篇文章只是因为它很好地展示了我想要做的事情。不要把描述方法等弄得一团糟。为什么要用你已经知道的坏习惯来询问好习惯呢?我建议你多读点书。@jornsharpe我希望我的编辑对你有好处。现在如果你能帮我,我会很高兴的。谢谢。第二部分正是我要问的。这并不是补丁的工作原理——请求主体应该是一组更改,而不仅仅是任意字段。作为规范的一部分,您可以链接到状态–这应该是一个补丁文档。吉姆:我只是粗略地看了一下。好文章。我想我终究还是像个白痴一样在打补丁!