REST良好的设计实践

时间:2016-07-12 18:55:44

标签: python rest flask

我有几个数据库对象,我必须能够修改它们中的所有字段。所以我真的怀疑实现这个的方式。 我有两个选择:

  1. 为每个对象实现一个通用视图。例如这样: /client PUT。 body将包含字段名称和字段值。

  2. 为每个对象中的每个字段实现视图(其中有很多字段)。

  3. 嗯..第二种方法是通用的,它提供了新对象的简单添加,但可能有点复杂:我们必须检查每个字段是否存在,检查值类型是否匹配等。第一种方法清晰简单,但会有很多观点和很多无聊的工作。所以我不能选择其中之一。

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

    P.S。我正在使用Python的Flask。

1 个答案:

答案 0 :(得分:2)

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

正如@jonrsharpe所说,像../../modify/..这样的网址根本不是RESTful。应该使用HTTP谓词(GET,POST,PUT)。

鉴于您的情况以及是否由我决定,我将每个数据库对象(表中的一个记录/行)公开为REST资源。应使用HTTP Patch semantics修改资源中的各个字段。

假设您的对象有三个字段:field1field2,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!)。