restful,restfulness

http://www.itjxue.com  2023-01-20 00:52  来源:未知  点击次数: 

REST和RESTFUL

REST(Representational State Transfer),表述性状态转移,定义了互联网架构原则,是一种架构风格,具体原则如下:

1.互联网所有资源都可以被抽象为资源

2.每个资源都有唯一的资源标识符

3.同一个资源具有多个表现形式(可以是json,xml等等)

4.对资源的操作不会改变资源标识符

5.所有的操作都是无状态的

主要是就是说互联网上的资源可以用一种规则来表示,对资源的操作是无状态的。

RESTFUL,是指遵守rest规则的web服务,restful是一种ROA(Resource Oriented Architecture,面向资源的架构),restful的核心概念就是资源(Resource)。

互联网中客户端和服务端的交互就是资源的表述,这种表述是无状态的,也就意味着服务端要报错资源的所有状态,客户端可以通过http协议按照规定的规则访问或者改变资源的状态,就是所谓的“表述性状态转移”。

具体表现形式如下:

GET /users 获取用户列表

GET /users/1 获取id(主键)为1的用户

POST /users 创建用户

PUT /users/1 修改id为1的用户(整条数据替换)

PATCH /users/1 修改id为1的用户(数据局部字段替换)

DELETE /users/1 删除id为1的用户

简单来说就是通过请求方法名来表示行为,url来表示操作的资源

更多例子:

GET /users/1/products 获取id为1用户下的产品列表

GET /users/1/products/1 获取id为1用户下的id为1的产品

GET /users/name/aaa/products 获取name为aaa的用户下的产品列表

GET /users/name/aaa/products/name/ppp 获取name为aaa的用户下的名为ppp的产品

POST /users/1/products id为1的用户下创建一个产品

PUT /users/1/products/1 修改id为1的用户下的id为1的产品(整条数据替换)

PATCH /users/1/products/1 修改id为1的用户下的id为1的产品(数据局部字段替换)

DELETE /users/1/products/1 修改id为1的用户下的id为1的产品

什么是 restful?

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POST,DELETE,PUT和GET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。

RESTful架构将服务器分成前端服务器和后端服务器两部分,前端服务器为用户提供无模型的视图;后端服务器为前端服务器提供接口。浏览器向前端服务器请求视图,通过视图中包含的AJAX函数发起接口请求获取模型。

项目开发引入RESTful架构,利于团队并行开发。在RESTful架构中,将多数HTTP请求转移到前端服务器上,降低服务器的负荷,使视图获取后端模型失败也能呈现。但RESTful架构却不适用于所有的项目,当项目比较小时无需使用RESTful架构,项目变得更加复杂。

Flask扩展系列1--Restful

1、首先了解什么是 restful 架构?

rest :representational state transfer表现层状态转化

资源 :网络上的一个实体,或者说一个具体的信息。每种资源对应一个特定的URI,要获取这个资源,就是访问这个URI就可以

表现层 :representation 把资源呈现出来的形式,叫做表现层,在HTTP请求的头信息中用Accept和Content-Type字段指定,是对“表现层”的描述

状态转化 :客户端想要操作服务器,必须通过某种手段,让服务器发生状态转化,有 GET 、 POST 、 PUT 、 DELETE 四种方式,其中 GET 是用来获取资源, POST 是用来新建资源(也可以进行更新资源), PUT 用来更新资源, DELETE 用来删除资源

所以restful架构是:

1)每一个URI代表一个资源;

2)客户端和服务器之间,传递这种资源的某种表现层;

3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现“表现层状态转化”;

误区:最常见的一种设计错误,就是URI中包含动词。因为“资源”表示一种实体,所以应该是名词,URI不应该有动词,动词应该放到HTTP协议中

2、Flask-RESTful基本请求

其中一个接口有两种请求方式,一个是get,另一个是post。

get返回USER_LIST这个json数据;

post需要传一个参数,然后返回整个USER_LIST,请求一次post方法就会多添加一次数据,如果post请求中找不到name字段,则返回“400 Bad Request”错误;

由于类UserList没有定义put()和delete()函数,所以在”PUT”或”DELETE”请求时会返回”405 Method Not Allowed”错误。

其中在postman中是这么进行传递的

GET请求

POST请求

另外,路由支持多个路径,比如:

访问userlist和users两个路径的效果完全一样

3、带参数的请求

上面的例子中我们都是针对USER_LIST这个列表的,如果我们需要针对具体的user进行操作呢,就需要传递具体的user_id了,这时候,我们就需要路由支持带参数。

在User类的get(),post(),put()等成员函数中,记得加上参数user_id来获取传入的变量值

4、参数解析

在“POST”和“PUT”请求中,直接访问form表单并验证的工作有些麻烦,Flask-RESTful提供了 reqparse库来简化,可以通过 parser.add_argument() 方法来定义form表单字段,并指定其类型,然后在put或者post函数中调用 parser.parse_args() 来获取表单内容,并返回一个字典,该字典就包含表单的内容。 parser.parse_args() 方法会自动验证数据类型,返回400错误,还可以添加strict参数,如 parser.parse_args(strict=True) ,此时出现为定义的参数,也会返回400错误

RESTful接口详解

REST是英文representational state transfer(表象性状态转变)或者表述性状态转移;Rest是web服务的一种架构风格;使用HTTP,URI,XML,JSON,HTML等广泛流行的标准和协议;轻量级,跨平台,跨语言的架构设计;它是一种设计风格,不是一种标准,是一种思想

Rest架构的主要原则:

符合REST原则的架构方式即可称为RESTful

什么是Restful:

对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务;rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构).

为什么会出现Restful

在Restful之前的操作:

GET 根据用户id查询用户数据

POST 新增用户

POST 修改用户信息

GET/POST 删除用户信息

RESTful用法:

GET 根据用户id查询用户数据

POST 新增用户

PUT 修改用户信息

DELETE 删除用户信息

之前的操作是没有问题的,大神认为是有问题的,有什么问题呢?你每次请求的接口或者地址,都在做描述,例如查询的时候用了query,新增的时候用了save,其实完全没有这个必要,我使用了get请求,就是查询.使用post请求,就是新增的请求,我的意图很明显,完全没有必要做描述,这就是为什么有了restful.

如何使用:

SpringMVC实现restful服务:

SpringMVC原生态的支持了REST风格的架构设计

所涉及到的注解:

---@RequestMapping

---@PathVariable

---@ResponseBody

HTTP相应状态码:

什么是RESTful

先看REST是什么意思,英文Representational state transfer 表述性状态转移 其实就是对 资源 的表述性状态转移。

简单的说:RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。

资源的地址 在web中就是URL (统一资源标识符)

资源是REST系统的核心概念。 所有的设计都是以资源为中心

结合项目怎么识别资源

1.商品加入购物车 购物车

2.提交订单 订单

3.创建用户 用户

围绕资源进行 添加,获取,修改,删除,以及对符合特定条件的资源进行列表操作 。针对资源设计接口

RESTful 架构的核心规范与约束:统一接口

分为四个子约束:

1.每个资源都拥有一个资源标识,每个资源的资源标识可以用来唯一地标明该资源

2.消息的自描述性

3.资源的自描述性。

4.HATEOAS Hypermedia As The Engine Of Application State(超媒体作为应用状态引擎)

即客户只可以通过服务端所返回各结果中所包含的信息来得到下一步操作所需要的信息,如到底是向哪个URL发送请求等。也就是说,一个典型的REST服务不需要额外的文档标示通过哪些URL访问特定类型的资源,而是通过服务端返回的响应来标示到底能在该资源上执行什么样的操作

目的:实现客户端无需借助任何文档即能调用到所有的服务器资源

三、资源的URL设计

1.通过URL来表示资源

资源分为主资源与子资源

因为主资源是一类独立的资源 所以主资源应直接放在相对路径下:例如

若要表示主资源的实例:如果实例的ID=1,则这样表示: /goods/1

子资源:

一个实例的子资源可能是一个集合也可能是一个单一的子资源

子资源为图片集合:/goods/1/pictures

子资源为商品折扣的单子子资源:/goods/1/discount

2.单数 vs. 复数

获取用户1的信息,哪种方式更符合RESTful?

/api/users/1

/api/user/1

3.相对路径 vs. 请求参数

极光的RESTful API:

获取用户信息 GET /v1/users/{username} 参数放在路径中

VS

获取用户信息 GET /v1/users?username=xxxxx 拼接的方式

获取应用管理员列表 GET /v1/admins?start={start}count={count} ?后拼接参数的方式:这种方式一般作为过滤资源

4.使用合适的动词 get delete put post

选择请求接口的方式: get delete

PUT 在服务器更新资源(客户端提供改变后的完整资源)。

POST 在服务器新建一个资源

5.使用标准的状态码

GET

hello world!!!

什么是REST以及 RESTful?

image image

本文由 黑壳博客 转载

本文来源 什么是REST以及 RESTful??

imagepng imagepng

自从Roy Fielding博士在2000年他的博士论文中提出 REST (Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。

什么是Web API呢?

如果我们想要获取某个电商网站的某个商品,输入 ,就可以看到id为123的商品页面,但这个结果是HTML页面,它同时混合包含了Product的数据和Product的展示两个部分。对于用户来说,阅读起来没有问题,但是,如果机器读取,就很难从HTML中解析出Product的数据。

如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。比如,读取 ,如果能直接返回Product的数据,那么机器就可以直接读取。

REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,以JSON格式编写的REST风格的API具有简单、易读、易用的特点。

编写API有什么好处呢?由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。

此外,如果我们把前端页面看作是一种用于展示的客户端,那么API就是为客户端提供数据、操作数据的接口。这种设计可以获得极高的扩展性。例如,当用户需要在手机上购买商品时,只需要开发针对iOS和Android的两个客户端,通过客户端访问API,就可以完成通过浏览器页面提供的功能,而后端代码基本无需改动。

当一个Web应用以API的形式对外提供功能时,整个应用的结构就扩展为:

REST-arch REST-arch

网页视为一种客户端,是REST架构可扩展的一个关键。

** 网络上的所有事物都被抽象为资源**

** 每个资源都有一个唯一的资源标识符**

** 同一个资源具有多种表现形式(xml,json等)**

** 对资源的各种操作不会改变资源标识符**

** 所有的操作都是无状态的**

** 符合REST原则的架构方式即可称为RESTful**

REST主要对以下两方面进行了规范

-定位资源的URL风格,例如

-如何对资源操作

采用HTTP协议规定的GET、POST、PUT、DELETE动作处理资源的增删该查操作

image image

对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务;rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构).

符合REST约束风格和原则的应用程序或设计就是RESTful.

- Spring MVC 对 RESTful应用提供了以下支持

- 利用@RequestMapping 指定要处理请求的URI模板和HTTP请求的动作类型

- 利用@PathVariable讲URI请求模板中的变量映射到处理方法参数上

- 利用Ajax,在客户端发出PUT、DELETE动作的请求

** 可以采用Ajax方式发送PUT和DELETE请求**

采用RESTful架构后,需要将web.xml中控制器拦截的请求设置为/,这样会将css,js等静态资源进行拦截,发送404错误。

解决方法:

本篇文章参考了一部分 ,

程序员是个辛苦的职业

请善待你们身边的每一位程序员~

欢迎在评论写下你的程序员趣事,程序员不是一个死板的职业~~

欢迎扫描二维码加入我们的小组织 ,大家都叫我壳叔,很期待你的到来。

黑壳网交流群 Q 群: 200408242

11a84075a304ac57f6d37323512fd24cde9836350b9d80148b282eeaa188b196c2358d4ffd7006cbpng 11a84075a304ac57f6d37323512fd24cde9836350b9d80148b282eeaa188b196c2358d4ffd7006cbpng

(责任编辑:IT教学网)

更多

相关程序员考试文章

推荐程序员考试文章