我有一个完整的API文档,它使用flaskrestplus在python3.5/flask中构建。我想添加一个功能块-返回一个pickled对象作为我的一个响应的一部分。在
不特定于flaskrestplus的通用解决方案是受欢迎的,但是由于我的API已经完全文档化并完成了(除了这一点),我宁愿把它挂在一边,而不是从根本上改变我正在使用的框架。在
我的模型架构如下(简化):
get_fields = api.model('get-myresource', {
'id': fields.Integer(description='Id of the resource.'),
'other_field': fields.Integer(description='some other fields too.'),
'pickled_obj': fields.Raw(description='Marshalling fields.Raw fails, as the serialised binary cant be expressed as json'),
})
以及一个示例类(将被pickle)和我想要形成api响应的模型:
^{pr2}$api端点方法声明为:
import pickle
from flask import request
from flask_restplus import Resource, Namespace
from .my_schema_file import get_fields
api = Namespace('myresource', description='Whatever')
@api.route('')
class MyResource(Resource):
@api.response(200, 'Resource(s) returned successfully', get_fields)
@api.response(400, 'Bad Request')
@api.response(404, 'Not Found')
@api.response(500, 'Application Error')
@api.marshal_with(get_fields, code=200, description='Resource(s) returned successfully')
def get(self):
# Argument parsing and fetch from the database
data = MyDataModel()
return data, 200
在这个例子中,我使用字段。原始()作为pickled对象的封送处理程序不起作用(没有json表示)。那么,我应该做些什么来尽量减少API框架的重组呢?在
[编辑:修复原始Q中的语法错误]
最终答案:
最后,我们不再使用pickle,以避免在更新类时出现版本控制问题,然后尝试取消旧版本的pickle。在
我们最终使用了this SO answer中的建议,即使用jsonpickle库序列化任意类对象并将其从API中取出。在
相关问题 更多 >
编程相关推荐