似乎各种python web框架现在都可以实现RESTful接口。
对于Django来说,除了tastypie和活塞之外,django-rest-framework还是值得一提的。我已经顺利地迁移了我的一个项目。
Django REST框架是Django的轻量级REST框架 旨在使构建连接良好,自我描述的RESTful变得容易 Web API。
快速举例:
from django.conf.urls.defaults import patterns, url from djangorestframework.resources import ModelResource from djangorestframework.views import ListOrCreateModelView, InstanceModelView from myapp.models import MyModel class MyResource(ModelResource): model = MyModel urlpatterns = patterns('', url(r'^$', ListOrCreateModelView.as_view(resource=MyResource)), url(r'^(?P<pk>[^/]+)/$', InstanceModelView.as_view(resource=MyResource)), )
以官方网站为例,以上所有代码都提供api,自我解释文档(如基于soap的webservice)甚至沙箱进行测试。非常方便。
链接: http://django-rest-framework.org/
我强烈推荐使用TurboGears或Bottle:
TurboGears的:
瓶子:
我们正在研究严格的REST服务框架,请查看 http://prestans.googlecode.com
它目前在早期的Alpha,我们正在测试mod_wsgi和谷歌的AppEngine。
寻找测试人员和反馈。谢谢。
我没有看到任何理由使用Django来暴露REST api,有更轻松,更灵活的解决方案。 Django带来了很多其他的东西,并不总是需要。如果您只想将某些代码公开为REST服务,那么肯定不需要。
我个人的经验,fwiw,就是一旦你拥有一个通用的框架,你就会开始使用它的ORM,它的插件等等,因为它很容易,而且很快就会产生依赖性这很难摆脱。
选择一个Web框架是一个艰难的决定,我会避免选择一个完整的堆栈解决方案来暴露REST API。
现在,如果你真的需要/想要使用Django,那么Piston是django应用程序的一个很好的REST框架。
话虽这么说,CherryPy看起来也很不错,但似乎比REST更多RPC。
看看样本(我从未使用过它),如果你只需要REST,web.py可能是最好的,也是最干净的。
活塞 是一个非常灵活的框架,用于为Django应用程序创建RESTful API。
看到 Python Web框架 维基。
你可能不需要 全栈 框架,但剩下的列表仍然很长。
我们正在使用 Django的 用于RESTful Web服务。
请注意 - 开箱即用 - Django没有足够的细粒度认证来满足我们的需求。我们用过 Django-REST接口 ,这帮了很多忙。 [我们已经推出了自己的产品,因为我们做了很多扩展,它已成为维护的噩梦。]
我们有两种URL:“html”URL实现面向人的HTML页面,“json”URL实现面向Web服务的处理。我们的视图功能通常如下所示。
def someUsefulThing( request, object_id ): # do some processing return { a dictionary with results } def htmlView( request, object_id ): d = someUsefulThing( request, object_id ) render_to_response( 'template.html', d, ... ) def jsonView( request, object_id ): d = someUsefulThing( request, object_id ) data = serializers.serialize( 'json', d['object'], fields=EXPOSED_FIELDS ) response = HttpResponse( data, status=200, content_type='application/json' ) response['Location']= reverse( 'some.path.to.this.view', kwargs={...} ) return response
关键是有用的功能是从两个演示中分解出来的。 JSON演示文稿通常只是请求的一个对象。 HTML演示文稿通常包括各种导航辅助工具和其他帮助人们提高工作效率的上下文线索。
该 jsonView 功能都非常相似,这可能有点烦人。但它是Python,所以如果有帮助的话,让它们成为可调用类的一部分或编写装饰器。
jsonView
2010年,Pylons和repoze.bfg社区“联手”创建 金字塔 ,一个最基于repoze.bfg的Web框架。它保留了其父框架的哲学,可以用于 RESTful服务 。值得一看。
我不是蟒蛇世界的专家,但我一直在使用 Django的 这是一个优秀的Web框架,可用于创建一个宁静的框架。
以下是关于REST的CherryPy文档中的讨论: http://docs.cherrypy.org/dev/progguide/REST.html
特别是它提到了一个名为MethodDispatcher的内置CherryPy调度程序,它根据HTTP动词标识符(GET,POST等)调用方法。
的web2py 包括对轻松构建RESTful API的支持,如上所述 这里 和 这里 (视频)。特别要看一下 parse_as_rest ,它允许您定义将请求args映射到数据库查询的URL模式;和 smart_query ,使您可以在URL中传递任意自然语言查询。
parse_as_rest
smart_query
惊讶没人提到 烧瓶 。
from flask import Flask app = Flask(__name__) @app.route("/") def hello(): return "Hello World!" if __name__ == "__main__": app.run()
我你正在使用Django然后你可以考虑 Django的tastypie 作为替代 django的活塞 。调整到非ORM数据源比活塞更容易,并且很好 文件 。
我很喜欢 CherryPy的 。这是一个宁静的Web服务的示例:
import cherrypy from cherrypy import expose class Converter: @expose def index(self): return "Hello World!" @expose def fahr_to_celc(self, degrees): temp = (float(degrees) - 32) * 5 / 9 return "%.01f" % temp @expose def celc_to_fahr(self, degrees): temp = float(degrees) * 9 / 5 + 32 return "%.01f" % temp cherrypy.quickstart(Converter())
这强调了我对CherryPy的真正喜爱;这是一个完全可行的例子,即使对于不了解框架的人也是如此。如果您运行此代码,则可以立即在Web浏览器中查看结果;例如访问 HTTP://本地主机:8080 / celc_to_fahr度= 50 会显示 122.0 在您的Web浏览器中。
122.0