无法在python中创建REST服务

时间:2016-08-07 11:04:33

标签: python rest bottle

我想创建一个REST服务,所以我尝试了,这就是我的代码片段

from bottle import route, run

@route('/plot_graph',method='GET')
def plot_graph():
    #compute graph_list (python object of type list)
    #done
    return graph_list

if __name__ == "__main__":
    run(host='0.0.0.0', port=8881, server='cherrypy', debug=True)

现在,当我在浏览器http://localhost:8881/plot_graph中输入此内容时,会出现错误

Error: 500 Internal Server Error

Sorry, the requested URL 'http://localhost:8881/plot_graph' caused an error:

Unsupported response type: <type 'int'>

我的python控制台说它正在侦听但是会发出此警告

Bottle v0.12.9 server starting up (using CherryPyServer())...
Listening on http://0.0.0.0:8881/
Hit Ctrl-C to quit.

/Users/guru/python_projects/implement_LDA/lda/lib/python2.7/site-packages/bottle.py:2777: ImportWarning: Not importing directory '/Users/guru/python_projects/implement_LDA/lda/cherrypy': missing __init__.py
  from cherrypy import wsgiserver

有任何解决方法吗?

1 个答案:

答案 0 :(得分:2)

graph_list需要包含字符串,但是,您的列表看起来像包含整数。您可以将这些整数转换为字符串:

return (str(i) for i in graph_list)

但请注意,列表中的元素连接在一起,可能不是您想要的。所以另一种选择是返回一个bottle将转换为JSON编码响应的字典:

return {'val{}'.format(i): val for i, val in enumerate(graph_list, 1)}

这会创建一个字典,例如{'val1': 1, 'val2': 2, 'val3': 2, 'val4': 5}

对于警告问题,您的主python脚本所在的目录中似乎有一个名为cherrypy的目录。重命名/删除该目录,瓶子将从您的site-packages目录导入CherryPy。或者您只需从调用server='cherrypy'中删除run()即可使用默认的wsgiref服务器。