是否有不同的基于 Python 的 REST 框架的建议列表,可用于在服务器端编写您自己的 RESTful API?最好各有优劣。
请随时在此处添加建议。 :)
最佳答案
在设计 RESTful API 时需要注意的是 GET 和 POST 的混淆,就好像它们是同一个东西一样。 Django 很容易犯这个错误的function-based views和 CherryPy的默认调度程序,尽管两个框架现在都提供了解决此问题的方法(分别为 class-based views 和 MethodDispatcher)。
HTTP-verbs are very important在 REST 中,除非您对此非常小心,否则您最终会陷入 REST anti-pattern .
一些能做到这一点的框架是 web.py , Flask和 Bottle .与 mimerender 结合使用时库(完全披露:我写的),它们允许您编写漂亮的 RESTful Web 服务:
import web
import json
from mimerender import mimerender
render_xml = lambda message: '<message>%s</message>'%message
render_json = lambda **args: json.dumps(args)
render_html = lambda message: '<html><body>%s</body></html>'%message
render_txt = lambda message: message
urls = (
'/(.*)', 'greet'
)
app = web.application(urls, globals())
class greet:
@mimerender(
default = 'html',
html = render_html,
xml = render_xml,
json = render_json,
txt = render_txt
)
def GET(self, name):
if not name:
name = 'world'
return {'message': 'Hello, ' + name + '!'}
if __name__ == "__main__":
app.run()
服务的逻辑只实现一次,正确的表示选择(Accept header)+派发到适当的渲染函数(或模板)以整洁、透明的方式完成。
$ curl localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/html" localhost:8080/x
<html><body>Hello, x!</body></html>
$ curl -H "Accept: application/xml" localhost:8080/x
<message>Hello, x!</message>
$ curl -H "Accept: application/json" localhost:8080/x
{'message':'Hello, x!'}
$ curl -H "Accept: text/plain" localhost:8080/x
Hello, x!
更新(2012 年 4 月):添加了有关 Django 的基于类的 View 、CherryPy 的 MethodDispatcher 以及 Flask 和 Bottle 框架的信息。提出问题时两者都不存在。
关于python - Python REST(Web 服务)框架的推荐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/713847/