RESTful API是利用HTTP请求访问或使用数据的应用程序接口(API)的体系结构样式。这些数据可用于GET,PUT,POST和DELETE数据类型,这些数据类型指的是与资源相关的操做读取、更新、建立和删除。
编程
网站的API是容许两个软件程序相互通讯的代码。API详细说明了开发人员编写从操做系统或其余应用程序请求服务程序的正确方法。json
RESTful API(也称为RESTful Web服务或REST API)基于表示性状态转移(REST),它是Web服务开发中常用的一种体系结构样式和通讯方式。api
REST技术一般优于其余相似技术。这是由于REST使用较少的带宽,使其更适合高效的互联网使用。RESTful API也能够用JavaScript或Python之类的编程语言来构建。数组
浏览器使用的REST能够被视为互联网语言。随着云使用量的兴起,云消费者正在使用API公开和组织对Web服务的访问。REST是构建API的逻辑选择,它容许用户在分布式环境中灵活地链接、管理和交互云服务。浏览器
RESTful API使用分解事务来建立一系列小模块。每一个模块处理事务的一个底层部分。这种模块化为开发人员提供了很大的灵活性,可是对于开发人员来讲,从头开始设计REST API是一个挑战。目前,有几家公司提供了供开发人员使用的工具,例如本文演示工具EOLINKER:www.eolinker.com。
缓存
RESTful API使用命令来获取资源。资源在任何给定时间戳下的状态称为表示资源(resource representation)。RESTful API使用RFC 2616协议定义的现有HTTP方法,例如:安全
GET检索资源;
PUT更改状态或更新资源的状态,该资源能够是对象,文件或块;
POST建立该资源;
DELETE删除资源。
使用REST,网络化组件是用户请求访问的资源,全部调用都是无状态的;RESTful服务在执行之间不能保留任何内容。服务器
REST API支持的数据格式包括:
application/ json
application/ xml
application/ x-www-form-urlencoded
multipart/form-data
restful
因为调用是无状态的,所以REST在云应用程序中颇有用。若是出现故障,无状态组件能够自由地从新部署,它们能够扩展适应负载变化。由于任何请求均可以定向到组件的任何实例,下一个事务没必要记住任何保存的内容。这使得REST更适合用于Web。RESTful模型在云服务中也颇有用,由于经过API绑定到服务是控制URL解码方式的问题。网络
RESTful API设计由Roy Fielding在2000年的博士学位论文中定义。为了成为真正的RESTful API,Web服务必须遵照如下六个REST体系结构约束:
使用统一接口(UI)。资源应该经过单个URL进行惟一标识,而且只有经过使用网络协议的底层方法(例如带HTTP的DELETE,PUT和GET),才能对资源进行操做。
基于客户端服务器。客户端和服务器之间应该要清晰划分。UI和请求收集问题是客户端的领域。数据访问、工做负载管理和安全性是服务器的领域。客户端和服务器的这种松散耦合使得彼此之间能够独立开发。
无状态操做。全部客户端-服务器操做都应该是无状态的,而且所需的任何状态管理都应该在客户端进行而不是服务器上。
RESTful资源缓存。除非明确指出不可能进行缓存,不然全部资源都应容许缓存。
分层系统。REST支持由多层服务器组成的体系结构。
按需编码。大多数时候,服务器会以XML或JSON的形式发送回资源的静态表示。可是,必要时服务器能够向客户端发送可执行代码。
除了设计和体系结构的约束外,我的还必须面对REST API的一些挑战。可能具备挑战性的一些概念可能包括:
端点一致性。
API版本控制。
响应时间长,数据太多。
安全性。须要注意不少方面,包括使用如下方面:
HTTPS;
阻止来自未知IP地址和域的访问;
验证URL;
阻止意外的大有效载荷;
记录请求;
检查故障。
身份验证。使用常见的身份验证方法,例如HTTP基自己份验证(容许使用base64编码的用户名:密码字符串),API密钥,JSON Web Token和其余访问令牌。例如,OAuth 2.0适用于访问控制。
API测试。测试过程当中可能具备挑战性的部分包括:
初始设置
架构更新
测试参数组合
序列API调用
验证测试参数
系统集成
定义错误代码和消息。
对于错误代码,使用标准HTTP错误代码是更常见的作法。错误处理除了解析正文或检查错误外,可能没有其余方法来区分响应是否成功。
随着时间推移的,开发人员开始使用RESTful API,并使用它们为网站和应用程序添加功能。现在,REST API被认为是“互联网的骨干”。