REST 应用编程接口

来源:互联网 发布:java最新框架整合书籍 编辑:程序博客网 时间:2024/05/19 17:48

简介

最近几年,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