自从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的教程相关推荐

  1. python如何在没有环境的电脑上执行_没安装python的电脑可以运行python写的程序吗 python语言编写的程...

    py2exe 能够把 Python script 转换成可以在windows上独立执行的(即不需安装Python)的exe程序(加上其它必需的运行时函数库). -- 摘自百度知道 py2exe能够把P ...

  2. python写脚本入门-学习Python的教程?:python 脚本菜鸟教程

    学习Python的教程? Python作为一门面向对象的性语言,其实它的学习也很简单 - 配置 - Python基础(语法..数据类型.高级变量.函数.Python高级特性) - 面向对象编程.面向对 ...

  3. python写游戏脚本-使用Python写一个小游戏

    引言 最近python语言大火,除了在科学计算领域python有用武之地之外,在游戏.后台等方面,python也大放异彩,本篇博文将按照正规的项目开发流程,手把手教大家写个python小游戏,来感受下 ...

  4. python写金字塔_金字塔python开发手册

    python API 基本方法 编写策略过程中所需要使用的基本函数.其中init和handle_bar是必须实现的两个方法,其余是可选择实现的方法. init (必须实现) init(context) ...

  5. 用python写数字_用python 写游戏之数字华容道

    当初对这个游戏颇有印象还是在最强大脑节目上面,何猷君以几十秒就完成了这个游戏.写2048游戏的时候,又想起了这个游戏,想着来研究一下. 游戏玩法 用尽量少的步数,尽量短的时间,将棋盘上的数字方块,按照 ...

  6. python写一个系统-使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  7. 我的世界python写游戏_用python写游戏之 Give it up

    <永不言弃 Give It Up>,这是一款极具虐心色彩的音乐题材闯关游戏. 这篇文章就来分析这款游戏原理,并用python写出来一个简易版.废话不多说,直接开始分析. 游戏元素,暂且把主 ...

  8. python写词法分析器_用python写一个简单的词法分析器

    编译原理老师要求写一个java的词法分析器,想了想决定用python写一个. 目标 能识别出变量,数字,运算符,界符和关键字,用excel表打印出来. 有了目标,想想要怎么实现词法分析器. 1.先进行 ...

  9. python写炒股软件_使用Python写一个量化股票提醒系统

    大家在没有阅读本文之前先看下python的基本概念, Python是一种解释型.面向对象.动态数据类型的高级程序设计语言. Python由Guido van Rossum于1989年底发明,第一个公开 ...

  10. python 写命令行界面_使用Python进行命令行界面编程?

    在本节中,我们将使用python开发命令行界面.但是在我们深入研究程序之前,让我们首先了解命令行. 由于存在计算机程序,因此一直在使用命令行,并且命令行是基于命令构建的.命令行程序是从Shell或命令 ...

最新文章

  1. UVa 10055 - Hashmat the Brave Warrior
  2. Kubernetes最佳实践S01E05:如何优雅地终止
  3. 第十五周程序阅读-范型程序设计(1)
  4. ‘聪明的搜索算法’ A*算法
  5. eval 函数 代替函数_eval()函数以及JavaScript中的示例
  6. 解决 List 执行 remove 时报异常 java.lang.UnsupportedOperationException
  7. 请假一天,回粤西老家买了套房
  8. 量子位「AI内参」正式上线,每日AI最全资讯一键Get!
  9. 百度Apollo发布智能驾驶商业化解决方案
  10. misc on starcraft----starcraft2
  11. POJ 1026 Cipher
  12. 【Qt开发】Qt中显示图像的两种方法对比
  13. java基础篇---网络编程(TCP程序设计)
  14. python操作系统接口错误_Python-接口自动化(四) - 许小猪 - 博客园
  15. python换零钱有多少种方案_python练习题4.15换硬币(修正)
  16. 码农枪击了 4 名同事后被警方击毙!后附“程序员保命指南”
  17. 普华集团翟山鹰:金融激荡30年 深度洞察金融的“奥秘”
  18. 任正非:《一江春水向东流》
  19. Excel打开CSV文件,数字起始0丢失问题
  20. 知乎网页(用php从数据库读取数据)

热门文章

  1. Poj3177 分离的路径
  2. spring之Environment
  3. RESTful API介绍
  4. 判断一个对象是否是可调用对象
  5. Ubuntu 14.04 台式机锐捷使用:
  6. [转]thinkphp 模板显示display和assign的用法
  7. 前1000位粉丝的诞生
  8. 装了VS2005再装IIS的小问题
  9. 夸克浏览器有没有linux,夸克浏览器怎么样?夸克浏览器使用说明
  10. python编程语言的优缺点-程序员千万不要入错行!常见的AI编程语言优缺点比较...