REST 应用编程接口

简介

最近几年,Web 程序有种趋势,那就是业务逻辑被越来越多地移到了客户端一侧,开创出了一种称为富互联网应用(Rich Internet Application,RIA)的架构。在RIA 中,服务器的主要功能(有时是唯一功能)是为客户端提供数据存取服务。在这种模式中,服务器变成了Web 服务或应用编程接口(Application Programming Interface,API)。

RIA 可采用多种协议与Web 服务通信。远程过程调用(Remote Procedure Call,RPC)协议,例如XML-RPC,及由其衍生的简单对象访问协议(Simplified Object Access Protocol,SOAP),在几年前比较受欢迎。最近,表现层状态转移(Representational State Transfer,REST)架构崭露头角,成为Web 程序的新宠,因为这种架构建立在大家熟识的万维网基础之上。

Flask 是开发REST 架构Web 服务的理想框架,因为Flask 天生轻量。

REST简介

Roy Fielding 在其博士论文中介绍了Web 服务的REST 架构方式,并列出了6 个符合这一架构定义的特征。

  • 客户端-服务器
    客户端和服务器之间必须有明确的界线。

  • 无状态
    客户端发出的请求中必须包含所有必要的信息。服务器不能在两次请求之间保存客户端的任何状态。

  • 缓存
    服务器发出的响应可以标记为可缓存或不可缓存,这样出于优化目的,客户端(或客户端和服务器之间的中间服务)可以使用缓存。

  • 接口统一
    客户端访问服务器资源时使用的协议必须一致,定义良好,且已经标准化。REST Web服务最常使用的统一接口是HTTP 协议。

  • 系统分层
    在客户端和服务器之间可以按需插入代理服务器、缓存或网关,以提高性能、稳定性和伸缩性。

  • 按需代码
    客户端可以选择从服务器上下载代码,在客户端的环境中执行。

资源就是一切

资源是REST 架构方式的核心概念。在REST 架构中,资源是程序中你要着重关注的事物。例如,在博客程序中,用户、博客文章和评论都是资源。

每个资源都要使用唯一的URL 表示。还是以博客程序为例,一篇博客文章可以使用URL /api/posts/12345 表示,其中12345 是这篇文章的唯一标识符,使用文章在数据库中的主键表示。URL 的格式或内容无关紧要,只要资源的URL 只表示唯一的一个资源即可。

某一类资源的集合也要有一个URL。博客文章集合的URL 可以是/api/posts/,评论集合的URL 可以是/api/comments/。

API 还可以为某一类资源的逻辑子集定义集合URL。例如,编号为12345 的博客文章,其中的所有评论可以使用URL /api/posts/12345/comments/ 表示。表示资源集合的URL 习惯在末端加上一个斜线,代表一种“文件夹”结构。

注意,Flask 会特殊对待末端带有斜线的路由。如果客户端请求的URL 的末端没有斜线,而唯一匹配的路由末端有斜线,Flask 会自动响应一个重定向,转向末端带斜线的URL。反之则不会重定向。

请求方法

客户端程序在建立起的资源URL 上发送请求,使用请求方法表示期望的操作。若要从博客API 中获取现有博客文章的列表,客户端可以向http://www.exam-ple.com/api/posts/ 发送GET 请求。若要插入一篇新博客文章,客户端可以向同一地址发送POST 请求,而且请求主体中要包含博客文章的内容。若要获取编号为12345 的博客文章,客户端可以向http://www.example.com/api/posts/12345 发送GET 请求。表14-1 列出了REST 架构API 中常用的请求方法及其含义。

REST架构API中使用的HTTP请求方法

请求方法目标说明HTTP状态码
GET单个资源的URL获取目标资源200
GET资源集合的URL获取资源的集合(如果服务器实现了分页,就是一页中的资源)200
POST资源集合的URL创建新资源,并将其加入目标集合。服务器为新资源指派URL,并在响应的Location 首部中返回201
PUT单个资源的URL修改一个现有资源。如果客户端能为资源指派URL,还可用来创建新资源200
DELETE单个资源的URL删除一个资源200
DELETE资源集合的URL删除目标集合中的所有资源200

(未完待续)

相关文章:

  1. http://www.pythondoc.com/flask-restful/first.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值