第十四章:应用程序接口

应用编程接口

业务逻辑被越来越多的移到了客户端一侧,开创出一种称为富互联网应用(Rich Internet Application, RIA)
在RIA中,服务器主要功能是为客户端提供数据存储服务。

在这种模式下,服务器变成了Web服务器或应用编程接口(Application Progamming Interface, API)

REST

RIA架构可采用多种协议与Web服务通信。
REST(Representational State Transfer, REST),表现层状态转移

  • 客户端-服务器 --------- 它们之间必须有明确的界线。
  • 无状态 --------- 客户端发出的请求中必须包含所有必要的信息。服务器不能在两次请求之间保存客户端的任何状态。
  • 缓存 --------- 服务器发出的响应可以标记为可缓存或不可缓存,这杨处于优化目的,客户端(或客户端和服务器之间的中间服务)可以使用缓存。
  • 接口统一 --------- 客户端访问服务器资源时使用的协议必须一致,定义良好,且已经标准化。REST Web服务最常使用的统一接口是HTTP协议。
  • 系统分层 --------- 在客户端和服务器之间可以按需插入代理服务器、缓存或网关,以提高性能、稳定性和伸缩性。
  • 按需代码 --------- 客户端可以选择从服务器上下载代码,在客户端环境中执行。

资源

资源是REST架构方式的核心概念,每个资源都要使用唯一的URL表示。

Flask会特殊对待末端带有斜线的路由。

请求方法

客户端程序在建立起的资源URL上发送请求,使用请求方法表示期望的操作。
GET、POST、DELETE

REST Web服务常用的两种编码方式是JavaScript对象表示法和可扩展标记语言(XML)。
JavaScript是Web浏览器使用的客户端脚本语言。
在设计良好的REST API中,客户端只需要知道几个顶级资源的URL,其他资源的URL子从响应中包含的链接上发掘。

版本

在UR中加入Web服务的版本有助于条理化管理新旧功能,让服务器能为新客户提供新功能,同时2继续支持旧版客户端。

REST Web服务

使用熟悉的route()修饰器及methods可选参数可以声明服务所提供资源URL的路由,处理JSON数据,请求中包含的JSON数据可通过request.json
这个Python字典获取,并且需要包含JSON响应可以使用Flask提供的辅助函数jsonify()从Python字典中生成。

API蓝本

REST API相关的路由是一个自成一体的程序子集,为了更好组织代码,最好把这些路由放到独立的蓝本中。
为所有客户端生成是当响应的一种方法是:在错误处理程序中根据客户端请求的格式改写响应,这种技术称为内容协商。

使用Flask-HTTPAuth认证用户

RIA必须询问用户的登录密令,并将其传给服务器进行验证。
REST Web服务器特征之一是无状态,服务器在两次请求之间不能记住客户端的任何信息。客户端必须在发出的请求中包含所有必要信息,因此所有请求都必须包含
用户密令。

REST架构基于HTTP协议,所以发送密令最佳方式是使用HTTP认证,基本认证和摘要认证都可以,在HTTP认证中,用户密令包含在请求的Authorization首部中。

Flask-HTTPAuth扩展提供了一个便利的包装,可以把协议的细节隐藏在修饰器中。

由于每次请求时都要传送用户密令,所以API路由最好通过安全的HTTP提供,加密所有的请求和响应。

基于令牌的认证

每次请求时,客户端都要发送认证密令,为了避免总是发送敏感信息,我们提供一种基于令牌的认证方案

客户端先把登录密令发送给一个特殊的URL,从而生成认证令牌,一旦客户端获得令牌,就可用令牌代替登录密令认证请求。
出于安全考虑,令牌有过期时间。过期后,客户端必须重新发送登录密令以生成新令牌。

posted @ 2017-04-20 14:47  Cheko  阅读(180)  评论(0编辑  收藏  举报