python写web难受-用Python编写web API的教程
自从Roy Fielding博士在2000年他的博士论文中提出REST(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。
什么是Web API呢?
如果我们想要获取一篇Blog,输入http://localhost:9000/blog/123,就可以看到id为123的Blog页面,但这个结果是HTML页面,它同时混合包含了Blog的数据和Blog的展示两个部分。对于用户来说,阅读起来没有问题,但是,如果机器读取,就很难从HTML中解析出Blog的数据。
如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。比如,读取http://localhost:9000/api/blogs/123,如果能直接返回Blog的数据,那么机器就可以直接读取。
REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,以JSON格式编写的REST风格的API具有简单、易读、易用的特点。
编写API有什么好处呢?由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。
一个API也是一个URL的处理函数,我们希望能直接通过一个@api来把函数变成JSON格式的REST API,这样,获取注册用户可以用一个API实现如下:
@api
@get('/api/users')
def api_get_users():
users = User.find_by('order by created_at desc')
# 把用户的口令隐藏掉:
for u in users:
u.password = '******'
return dict(users=users)
所以,@api这个decorator只要编写好了,就可以把任意的URL处理函数变成API调用。
新建一个apis.py,编写@api负责把函数的返回结果序列化为JSON:
def api(func):
@functools.wraps(func)
def _wrapper(*args, **kw):
try:
r = json.dumps(func(*args, **kw))
except APIError, e:
r = json.dumps(dict(error=e.error, data=e.data, message=e.message))
except Exception, e:
r = json.dumps(dict(error='internalerror', data=e.__class__.__name__, message=e.message))
ctx.response.content_type = 'application/json'
return r
return _wrapper
@api需要对Error进行处理。我们定义一个APIError,这种Error是指API调用时发生了逻辑错误(比如用户不存在),其他的Error视为Bug,返回的错误代码为internalerror。
客户端调用API时,必须通过错误代码来区分API调用是否成功。错误代码是用来告诉调用者出错的原因。很多API用一个整数表示错误码,这种方式很难维护错误码,客户端拿到错误码还需要查表得知错误信息。更好的方式是用字符串表示错误代码,不需要看文档也能猜到错误原因。
可以在浏览器直接测试API,例如,输入http://localhost:9000/api/users,就可以看到返回的JSON:
python写web难受-用Python编写web API的教程相关推荐
- python如何在没有环境的电脑上执行_没安装python的电脑可以运行python写的程序吗 python语言编写的程...
py2exe 能够把 Python script 转换成可以在windows上独立执行的(即不需安装Python)的exe程序(加上其它必需的运行时函数库). -- 摘自百度知道 py2exe能够把P ...
- python写脚本入门-学习Python的教程?:python 脚本菜鸟教程
学习Python的教程? Python作为一门面向对象的性语言,其实它的学习也很简单 - 配置 - Python基础(语法..数据类型.高级变量.函数.Python高级特性) - 面向对象编程.面向对 ...
- python写游戏脚本-使用Python写一个小游戏
引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...
- python写金字塔_金字塔python开发手册
python API 基本方法 编写策略过程中所需要使用的基本函数.其中init和handle_bar是必须实现的两个方法,其余是可选择实现的方法. init (必须实现) init(context) ...
- 用python写数字_用python 写游戏之数字华容道
当初对这个游戏颇有印象还是在最强大脑节目上面,何猷君以几十秒就完成了这个游戏.写2048游戏的时候,又想起了这个游戏,想着来研究一下. 游戏玩法 用尽量少的步数,尽量短的时间,将棋盘上的数字方块,按照 ...
- python写一个系统-使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- 我的世界python写游戏_用python写游戏之 Give it up
<永不言弃 Give It Up>,这是一款极具虐心色彩的音乐题材闯关游戏. 这篇文章就来分析这款游戏原理,并用python写出来一个简易版.废话不多说,直接开始分析. 游戏元素,暂且把主 ...
- python写词法分析器_用python写一个简单的词法分析器
编译原理老师要求写一个java的词法分析器,想了想决定用python写一个. 目标 能识别出变量,数字,运算符,界符和关键字,用excel表打印出来. 有了目标,想想要怎么实现词法分析器. 1.先进行 ...
- python写炒股软件_使用Python写一个量化股票提醒系统
大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...
- python 写命令行界面_使用Python进行命令行界面编程?
在本节中,我们将使用python开发命令行界面.但是在我们深入研究程序之前,让我们首先了解命令行. 由于存在计算机程序,因此一直在使用命令行,并且命令行是基于命令构建的.命令行程序是从Shell或命令 ...
最新文章
- UVa 10055 - Hashmat the Brave Warrior
- Kubernetes最佳实践S01E05:如何优雅地终止
- 第十五周程序阅读-范型程序设计(1)
- ‘聪明的搜索算法’ A*算法
- eval 函数 代替函数_eval()函数以及JavaScript中的示例
- 解决 List 执行 remove 时报异常 java.lang.UnsupportedOperationException
- 请假一天,回粤西老家买了套房
- 量子位「AI内参」正式上线,每日AI最全资讯一键Get!
- 百度Apollo发布智能驾驶商业化解决方案
- misc on starcraft----starcraft2
- POJ 1026 Cipher
- 【Qt开发】Qt中显示图像的两种方法对比
- java基础篇---网络编程(TCP程序设计)
- python操作系统接口错误_Python-接口自动化(四) - 许小猪 - 博客园
- python换零钱有多少种方案_python练习题4.15换硬币(修正)
- 码农枪击了 4 名同事后被警方击毙!后附“程序员保命指南”
- 普华集团翟山鹰:金融激荡30年 深度洞察金融的“奥秘”
- 任正非:《一江春水向东流》
- Excel打开CSV文件,数字起始0丢失问题
- 知乎网页(用php从数据库读取数据)