`
hudeyong926
  • 浏览: 2034994 次
  • 来自: 武汉
社区版块
存档分类
最新评论

REST api架构

 
阅读更多
RESTful架构,就是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

REST优势

REST改善了用户接口跨多个平台的可移植性,并且通过简化服务器组件,改善了系统的可伸缩性。最为关键的是通过分离用户接口和数据存储这两个关注点,使得不同用户终端享受相同数据成为了可能。

1. 无状态性

无状态性是在客户-服务器约束的基础上添加的又一层规范。他要求通信必须在本质上是无状态的,即从客户到服务器的每个request都必须包含理解 该request所必须的所有信息。这个规范改善了系统的可见性(无状态性使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前 request,而不必了解所有的request历史),可靠性(无状态性减少了服务器从局部错误中恢复的任务量),可伸缩性(无状态性使得服务器端可以 很容易的释放资源,因为服务器端不必在多个request中保存状态)。同时,这种规范的缺点也是显而易见得,由于不能将状态数据保存在服务器上的共享上 下文中,因此增加了在一系列request中发送重复数据的开销,严重的降低了效率。

2. 缓存

为了改善无状态性带来的网络的低效性,我们填加了缓存约束。缓存约束允许隐式或显式地标记一个response中的数据,这样就赋予了客户端缓存 response数据的功能,这样就可以为以后的request共用缓存的数据,部分或全部的消除一部分交互,增加了网络的效率。但是用于客户端缓存了信 息,也就同时增加了客户端与服务器数据不一致的可能,从而降低了可靠性。

B/S架构的优点是其部署非常方便,但在用户体验方面却不是很理想。为了改善这种情况,我们引入了REST. REST在原有的架构上增加了三个新规范:统一接口,分层系统和按需代码。

3. 统一接口

REST架构风格的核心特征就是强调组件之间有一个统一的接口,这表现在REST世界里,网络上所有的事物都被抽象为资源,而REST就是通过通用 的链接器接口对资源进行操作。这样设计的好处是保证系统提供的服务都是解耦的,极大的简化了系统,从而改善了系统的交互性和可重用性。并且REST针对 Web的常见情况做了优化,使得REST接口被设计为可以高效的转移大粒度的超媒体数据,这也就导致了REST接口对其它的架构并不是最优的。

4. 分层系统

分层系统规则的加入提高了各种层次之间的独立性,为整个系统的复杂性设置了边界,通过封装遗留的服务,使新的服务器免受遗留客户端的影响,这也就提高了系统的可伸缩性。

5. 按需代码

REST允许对客户端功能进行扩展。比如,通过下载并执行applet或脚本形式的代码,来扩展客户端功能。但这在改善系统可扩展性的同时,也降低了可见性。所以它只是REST的一个可选的约束。

 

REST规范接口

每个资源都有对应的URI,不同的HTTP Method对应的对资源不同的操作,GET(读取资源信息)、POST(添加资源)、PUT(更新资源信息)、DELETE(删除资源)。几乎所有的计算机语言都可以通过HTTP协议同REST服务器通信。

GET /tickets # 获取ticket列表
GET /tickets/12 # 查看某个具体的ticket
POST /tickets # 新建一个ticket
PUT /tickets/12 # 更新ticket 12.
DELETE /tickets/12 #删除ticekt 12

如果关系依托于另外一个资源,Restful原则提供了很好的指导原则。让我们来看一个例子。SupportFu的一个ticket包含许多消息(message)。这些消息逻辑上与/tickets接入点的映射关系如下:

  • GET /tickets/12/messages - 获取ticket #12下的消息列表
  • GET /tickets/12/messages/5 - 获取ticket #12下的编号为5的消息
  • POST /tickets/12/messages - 为ticket #12创建一个新消息
  • PUT /tickets/12/messages/5 - 更新ticket #12下的编号为5的消息
  • PATCH /tickets/12/messages/5 - 部分更新ticket #12下的编号为5的消息
  • DELETE /tickets/12/messages/5 - 删除ticket #12下的编号为5的消息

结果过滤,排序和搜索

GET /tickets?sort=-priority - 获取票据列表,按优先级字段降序排序

 

场景:

  • A:http://www.nowamagic.net/articles
  • B:http://www.nowamagic.net/articles/{id}

A网址:GET方法:显示全部用户信息;同时有个POST方法,用来添加用户;

B网址:GET方法:显示当前用户信息;PUT方法:更新用户信息;DELETE方法:删除该用户信息。

 注意RESTClient form的enctype属性x-www-form-urlencoded,form-data 是文件上传

最常见的一种设计错误,就是URI包含动词 因为"资源"表示一种实体,所以应该是名词,URI不应该有动词,动词应该放在HTTP协议中。举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。

如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:

POST/accounts/1/transfer/500/to/2

 正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:

POST/transaction

HTTP/1.1
Host: 127.0.0.1
from=1&to=2&amount=500.00

另一个设计误区,就是在URI中加入版本号:

http://www.example.com/app/1.0/foo
http://www.example.com/app/1.1/foo

因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分

Accept: vnd.example-com.foo+json; version=1.0
Accept: vnd.example-com.foo+json; version=1.1

二、处理返回值。 返回值要么是JSON格式,要么是XML格式。

PHP如何获取rest的HTTP的请求PUT或DELETE的数据

$method = $_SERVER['REQUEST_METHOD']; //请求
$rawbody = file_get_contents("php://input");
$form = json_decode($rawbody, true); //数据

前端 MVC 框架支持

在 AngularJS 中原生提供了 RESTful 的操作接口。也可以用Jquery的Ajax,浏览器支持不好

//注意:Jquery其它HTTP请求方法,如PUT和DELETE 也可以使用,但仅部分浏览器支持。
//getOne or delete
$.ajax({
    url:'/api/work/1',
    type:"GET", //DELETE
    success:function(data) {
      console.log(data);
    },
    error:function (xhr, ajaxOptions, thrownError){
      console.log(xhr.responseText);
    } 
  });

var postData = {
    "title": "title31",
    "author_id": "31",
    "content": "content31",
    "create_time": "2013-08-20 09:23:14"
};
//create or update
$.ajax({
    url:'/api/work',
    data:JSON.stringify(postData)
    type:"POST", //PUT
    success:function(data) {
        console.log(data);
    },
    error:function (xhr, ajaxOptions, thrownError){
        console.log(xhr.responseText);
    } 
});

sfsd

 
 
 
 
 
 
  • 大小: 71.5 KB
分享到:
评论

相关推荐

    OpenDaylight REST API研究

    OpenDaylight REST API 是一个基于 Representational State of Resource (REST) 架构风格的应用程序接口,提供了一种统一的方式来与 OpenDaylight 控制器交互。 OpenDaylight REST API 使得开发人员可以使用标准的 ...

    H3C CAS REST API接口

    REST(Representational State Transfer)API是H3C CAS系统提供的一种接口方式,用于允许外部应用程序与CAS系统进行交互,实现系统的集成和二次开发。通过REST API,开发者可以远程操作和管理H3C CAS中的各种资源,...

    odoo rest api

    1. **RESTful架构**:REST是一种网络应用程序的设计风格和开发方式,基于HTTP协议,使用URI(Uniform Resource Identifier)定位资源,通过HTTP方法(GET, POST, PUT, DELETE)操作资源。这种设计使得API易于理解和...

    Rest api下载

    根据提供的文件信息,本文将对“Rest api下载”这一主题进行深入探讨,并结合描述与链接内容,提炼出关键知识点。 ### 一、Rest API简介 REST(Representational State Transfer)是一种网络应用程序的设计风格和...

    Salesforce_REST_API

    REST(Representational State Transfer)是一种网络架构风格,适用于分布式超媒体系统,如万维网。Salesforce REST API的优点在于其易集成和开发的特性,非常适合作为与Salesforce平台交互的技术选择,尤其是在移动...

    Rest api服务器配置

    首先,理解REST(Representational State Transfer)架构风格的核心原则至关重要。REST强调的是资源的表述和状态转移,每个URL代表一个资源,通过HTTP方法(GET、POST、PUT、DELETE等)来操作这些资源的状态。在轻量...

    java rest api入门实例

    REST即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,...

    基于HTTP的REST软件架构

    开发REST API时,可以使用Swagger或OpenAPI规范来文档化API,便于其他开发者理解和使用。同时,工具如Postman可以帮助测试和调试RESTful服务。 综上所述,基于HTTP的REST软件架构为构建分布式、高性能、易维护的...

    C#调用Rest API.7z

    REST(Representational State Transfer)是一种软件架构风格,用于构建分布式系统,尤其是Web服务。在C#中,我们可以使用各种库和框架来实现与RESTful服务的通信。 首先,让我们了解REST的基本概念。REST基于HTTP...

    REST API.md

    REST是设计分布式网络服务或API时遵循的架构原则以及设计风格, 前后端分离最佳实践的开发标准或规范。本文为资料收藏的.md笔记,选取比较重要的资料,收集了以下内容: 重要概念介绍,如前述的第2-第4个关键词。 ...

    C# REST API

    REST(Representational State Transfer)是一种架构风格,用于设计分布式系统,尤其是Web服务。本篇将详细讲解如何使用C#来创建一个REST API,并获取天气数据。 首先,我们需要理解REST的基本原则。RESTful API...

    HTTP-API_restAPI_iot_httpapi_iiot_agneyaslabs_

    HTTP-API_restAPI_iot_httpapi_iiot_agneyaslabs_ 这个主题涉及的是使用HTTP RESTful API来与Avarana IoT平台交互的技术细节,该平台由Agneyas Labs开发。REST(Representational State Transfer)是一种网络应用...

    wp-rest-api-schema-validator:使用完整的JSON架构验证器验证WP REST API请求

    WP REST API架构验证器 使用完整的JSON架构验证器验证WP REST API请求。 WordPress附带有一个验证器rest_validate_request_arg() ,该验证器支持JSON Schema规范的有限子集。 当编写具有最低配置的端点模式时,该库...

    rest-client 一款自动化测试 REST API 的工具

    REST(Representational State Transfer)是一种广泛应用于Web服务的架构风格,它强调简洁、无状态和可缓存的交互,而REST客户端就是开发者用来验证这些接口是否按预期工作的利器。 ### 一、REST客户端的核心功能 ...

    REST API 安全设计指南.pdf

    REST API 安全设计指南。REST的全称是REpresentational State Transfer,它利用传统Web特点,提出 提出一个既适于客户端应用又...是一个REST API安全设计的指南,权当抛砖引玉,推荐网站后台设计及网站架构师们阅读。

    基于Spring Boot的REST API项目框架.zip

    【基于Spring Boot的REST API项目框架】是一种现代化的软件开发方式,主要应用于构建Web服务,尤其是面向API的应用。Spring Boot简化了Spring应用的初始搭建以及开发过程,它集成了大量常用的第三方库配置,如JPA、...

Global site tag (gtag.js) - Google Analytics