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://www.pythondoc.com/flask-restful/first.html
- REST 应用编程接口
- REST接口
- rest接口
- REST接口
- 应用编程数据库接口
- 网络应用编程接口
- Ch4 应用编程接口
- 网络应用编程接口
- 项目应用:使用springmvc框架完成rest接口开发
- 系统调用接口与应用编程接口
- HTTP Servlet应用编程接口
- HTTP Servlet应用编程接口
- WCF REST简单应用 编程初始化 help页面实现
- Android rest接口
- hbase rest接口
- REST接口设计风格
- REST接口设计规范
- Rest接口操作Kylin
- 日语中的○○为什么要读作ほにゃらら?
- HDU3374 String Problem(KMP + 最大最小表示)
- JavaWeb中读取文件资源的路径问题
- 命名空间
- supervisor 杂记
- REST 应用编程接口
- Jquery的zTree--Js点击树节点
- Python 07(列表)
- Eclipse使用技巧小结
- Codeforces Round #428 (Div. 2):D. Winter is here(组合数公式)
- PHP判断手机是IOS还是Android
- hdu 4458 Shoot the Airplane 点在平面内 相对运动
- P1349 广义斐波那契数列
- Vue.js知识总结 (一)