烧瓶组织棉花糖模式

时间:2019-11-01 17:47:16

标签: python flask serialization sqlalchemy marshmallow

我正在Flask framework中开发API,并且越来越大。目前,我有数十个sqlalchemy模型和更多Marshmallow CRUD模式。

主要是使用架构,情况变得有些混乱且难以维护,因此我对在较大的Flask应用中组织整体结构的最佳方法有疑问,以及在具有以下优点的端点中更好地维护序列化的方法是什么?

  • 嵌套json响应
/v0/user/all

{ 
   "data":{ 
      "id":1,
      "name":"foo",
      "phone":"927487286",
      "courses":[ 
         { 
            "id":12,
            "name":"Math",
            "place":{ 
               "id":1,
               "location":"Foo Street"
            }
         }
      ]
   }
}
  • 可以使用在不同端点使用但具有不同字段的架构
/v0/courses/{id}

{ 
   "data":{ 
      "id":12,
      "name":"Math",
      "place":{ 
         "location":"Foo Street"
      }
   }
}

我当时正在考虑在模型中实现方法to_dict,但是当嵌套在另一个序列化程序中时,这些方法也很难维护。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

棉花糖的目的是通过将视图职责委托给模式来避免对象中的to_dict方法。参见史蒂文·洛里亚(棉花糖作者)的this presentation

如果您的API模式接近数据库结构,则可以使用marshmallow-sqlalchemy从模型自动生成API模式来限制重复。

如果API模式与模型之间的差异太大,那么最好为每个资源从头开始构建模式。您仍然可以使用marshmallow-sqlalchemy中的field_for方法来避免重复模型类型和验证器。