我正在Flask framework
中开发API,并且越来越大。目前,我有数十个sqlalchemy
模型和更多Marshmallow
CRUD模式。
主要是使用架构,情况变得有些混乱且难以维护,因此我对在较大的Flask应用中组织整体结构的最佳方法有疑问,以及在具有以下优点的端点中更好地维护序列化的方法是什么?
/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
,但是当嵌套在另一个序列化程序中时,这些方法也很难维护。
有什么建议吗?
答案 0 :(得分:0)
棉花糖的目的是通过将视图职责委托给模式来避免对象中的to_dict
方法。参见史蒂文·洛里亚(棉花糖作者)的this presentation。
如果您的API模式接近数据库结构,则可以使用marshmallow-sqlalchemy从模型自动生成API模式来限制重复。
如果API模式与模型之间的差异太大,那么最好为每个资源从头开始构建模式。您仍然可以使用marshmallow-sqlalchemy中的field_for方法来避免重复模型类型和验证器。