当前位置: 首页 > 科技观察

如何使用Pyramid和Cornice编写PythonWebAPI

时间:2023-03-19 13:15:52 科技观察

使用Pyramid和Cornice构建和描述可扩展的RESTfulWeb服务。Python是一种高级的、面向对象的编程语言,以其简单的语法而闻名。它一直是构建RESTfulAPI的顶级编程语言之一。Pyramid是一个PythonWeb框架,旨在随着您的应用程序扩展而扩展:这允许简单的应用程序成长为大型、复杂的应用程序。此外,Pyramid为PyPI(Python包索引)提供了强大的支持。Cornice有助于使用Pyramid构建和描述RESTfulWeb服务。本文将使用Web服务检索名言的示例来展示如何使用这些工具。构建Pyramid应用程序首先为您的应用程序创建一个虚拟环境和一个用于保存代码的文件:$mkdirtutorial$cdtutorial$touchmain.py$python3-mvenvenv$sourceenv/bin/activate(env)$pip3安装cornicetwisted导入Cornice和Pyramid模块使用以下命令导入这些模块:frompyramid.configimportConfiguratorfromcorniceimportServicedefineservice将报价服务定义为服务对象:QUOTES=Service(name='quotes',path='/',description='Getquotes')编写报价逻辑目前为止这只支持获取报价。用QUOTES.get修饰函数。以下是将逻辑绑定到REST服务的方法:@QUOTES.get()defget_quote(request):return{'WilliamShakespeare':{'quote':['爱所有人,相信少数人,做错事,不要做错事','有些人天生伟大,有些人成就伟大,有些人是强加于他们的伟大。']},'Linus':{'quote':['空谈是廉价的。显示代码。']}}与其他框架不同,装饰器不会更改get_quote函数。如果您导入该模块,您仍然可以定期调用该函数并检查结果。这在为PyramidRESTful服务编写单元测试时很有用。定义application对象最后,使用scan找到所有被修饰的函数并将它们添加到配置中:withConfigurator()asconfig:config.include("cornice")config.scan()application=config.make_wsgi_app()defaultscancurrent模块。如果您想扫描包中的所有模块,您还可以提供包的名称。运行服务我使用Twisted的WSGI服务器来运行应用程序,但如果需要,您可以使用任何其他WSGI服务器,例如Gunicorn或uWSGI。(env)$python-mtwistedweb--wsgi=main.application默认情况下,Twisted的WSGI服务器运行在端口8080上。您可以使用HTTPie测试该服务:(env)$pipinstallhttpie...(env)$httpGETHTTP/1.1200OKContent-Length:220Content-Type:application/jsonDate:2019年12月2日星期一16:49:27GMTServer:TwistedWeb/19.10.0X-Content-Type-Options:nosniff{“Linus”:{“quote”:[“谈话很便宜。给我看代码。”]},"WilliamShakespeare":{"quote":["爱所有人,相信少数人,不伤害任何人","有些人生来伟大,有些成就伟大,有些伟大强加于他们。"]}}为什么要使用金字塔?Pyramid不是最流行的框架,但它被用于一些知名项目,如PyPI。我喜欢Pyramid,因为它是认真对待单元测试的框架之一:由于装饰器不修改函数并且没有线程局部变量,因此可以直接从单元测试调用函数。例如,需要访问数据库的函数将从通过request.config传递的request.config对象中获取它。这允许单元测试人员将模拟(或真实)数据库对象放入请求中,而无需仔细设置全局变量、线程局部变量或其他特定于框架的内容。如果您正在寻找一个经过测试的库来构建您的下一个API,请尝试Pyramid。你不会失望的。