生成响应

原来设计的 REST 服务器使用 Flask 的 jsonify 函数来生成响应。Flask-RESTful 会自动地处理转换成 JSON 数据格式,因此下面的代码需要替换:

  1. return jsonify( { 'task': make_public_task(task) } )

现在需要写成这样:

  1. return { 'task': make_public_task(task) }

Flask-RESTful 也支持自定义状态码,如果有必要的话:

  1. return { 'task': make_public_task(task) }, 201

Flask-RESTful 还有更多的功能。make_public_task 能够把来自原始服务器上的任务从内部形式包装成客户端想要的外部形式。最典型的就是把任务的 id 转成 uri。Flask-RESTful 就提供一个辅助函数能够很优雅地做到这样的转换,不仅仅能够把 id 转成 uri 并且能够转换其他的参数:

  1. from flask.ext.restful import fields, marshal
  2.  
  3. task_fields = {
  4. 'title': fields.String,
  5. 'description': fields.String,
  6. 'done': fields.Boolean,
  7. 'uri': fields.Url('task')
  8. }
  9.  
  10. class TaskAPI(Resource):
  11. # ...
  12.  
  13. def put(self, id):
  14. # ...
  15. return { 'task': marshal(task, task_fields) }

task_fields 结构用于作为 marshal 函数的模板。fields.Uri 是一个用于生成一个 URL 的特定的参数。它需要的参数是 endpoint。