Restful风格

rest定义

1、REST与技术无关,代表的是一种软件架构风格,REST是Representaion State Transfer的简称,中文翻译为‘表征状态转移’(这里所说的表征性,其实指的就是资源。通常我们称为资源状态转移。)
2、REST从资源的角度审视整个网络,他将分布在网络中的某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
3、所有的数据,无论是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别于其他架构风格的最基本属性
4、对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

基本概念

表征状态转移

我们在看页面的时候,从当前资源的表述(也可以说状态或者表现层)会跳转到其他的资源状态。服务端通过超媒体告诉客户端当前状态有哪些后续状态可以进入。这些类似"下一页"之类的链接起的就是这种推进状态的作用——指引你如何从当前状态进入下一个可能的状态

什么是资源

任何事物,只要有被引用到的必要,它就是一个资源。

我们在浏览器中看到的文本,视频,图片等等都是资源。这些都是实实在在存在的实体。

资源可以是一个实体,也可以是抽象概念。

比如说吧:

– Alex的个人信息

– 沛齐的手机号

– Alex跟沛齐的潜在关系

这些都是资源,可以是实体比如个人信息,手机号。也可以是抽象的概念,比如两个人的关系…

那么在我们的网络中,我们要引用资源,资源一定要有一个标识,在web中的唯一标识就是URI,

URI我们不常听说,我们经常用URL,那么两者区别是什么呢~

统一资源接口

现在我们可以通过URL去访问到资源,那么我们对资源会有很多不同的操作,增删改查,

以前我们可能会为了这个增加新设计一个URL,然后这个URL就是对数据进行增加的,

还会为了更新和删除分别设计一个URL,现在我们不用了,我们只有一个URL,

然后根据HTTP请求方式的不同,对资源进行不同的操作,这个就是是统一资源接口。

我们一定要遵循HTTP请求方法的语义,也就是说POST请求就在新增数据等…

资源的表述

资源的表述其实就是资源的展现形式,我们客户端和服务端传输的都是资源的表述,而不是资源本身。

例如文本资源可以采用html、xml、json等格式,图片可以使用PNG或JPG展现出来。

那么客户端如何知道服务端提供哪种表述形式呢?

可以通过HTTP内容协商,客户端可以通过Accept头请求一种特定格式的表述,服务端则通过Content-Type告诉客户端资源的表述形式。

这些资源的表述呈现在页面上,就是我们说的资源状态。

状态转移

我们在看页面的时候,从当前资源的表述(也可以说状态或者表现层)会跳转到其他的资源状态。

服务端通过超媒体告诉客户端当前状态有哪些后续状态可以进入。

这些类似"下一页"之类的链接起的就是这种推进状态的作用——指引你如何从当前状态进入下一个可能的状态。

总结

可以得知REST风格的特点如下:

(1)在web中,只要有被引用的必要都叫资源。

(2)每个URI代表一个资源,独一无二的。

(3)客户端通过HTTP的方法,对服务器端资源进行操作;

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

(5)通过超链接的指引,实现"表现层状态转移"。

restful风格

基于REST构建的API就是Restful风格。

RESTful API设计规范

  1. API与用户的通信协议,总是使用HTTPs协议
  2. 域名路径总带api
  3. 路径,视网络上任何东西都是资源,均使用名词表示(可复数)
  4. 通过请求方式区分执行的操作(method有:get,post,put,patch,delete)
  5. 带有版本号
  6. 过滤,通过在url上传参的形式传递搜索条件
  7. 返回状态码
  8. 返回错误信息
  9. 返回结果
  10. Hypermedia API,返回结果中提供链接,连向其他API方法,使用户不查文档,也知道下一步应该做什么

状态码大全

如何设计Restful风格的API

一 面向资源编程

每个URL代表一种资源,URL中尽量不要用动词,要用名词。
  —>在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表名对应,一般来说,数据库中的表都是同种记录的”集合”(collection),所以API中的名词也应该使用复数。
—>举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

https://api.example.com/v1/zoos
https://api.example.com/v1/animals
https://api.example.com/v1/employees

资源集合 vs单个资源

URI表示资源的两种方式:资源集合、单个资源。

资源集合:

   /zoos //所有动物园

   /zoos/1/animals //id为1的动物园中的所有动物

单个资源:

   /zoos/1//id为1的动物园

   /zoos/1;2;3//id为1,2,3的动物园

避免层级过深的URI

在url中表达层级,用于 按实体关联关系进行对象导航 ,一般根据id导航。

过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4 ,尽量使用查询参数代替路径中的实体导航,如 GET/animals?zoo=1&area=3 ;

二 根据method不同,进行不同的操作

GET/POST/PUT/DELETE/PATCH

三 在URL中体现版本

https://www.bootcss.com/v1/mycss

https://v1.bootcss.com/mycss

四 在URL中体现是否是API

https://www.bootcss.com/api/mycss

https://api.bootcss.com/mycss

五 在URL中的过滤条件

https://www.bootcss.com/v1/mycss?page=3

六 尽量使用HTTPS

https://www.bootcss.com/v1/mycss

七 响应时设置状态码

1** 信息,服务器收到请求,需要请求者继续执行操作

2** 成功,操作被成功接收并处理

3** 重定向,需要进一步的操作以完成请求

4** 客户端错误,请求包含语法错误或无法完成请求

5** 服务器错误,服务器在处理请求的过程中发生了错误

八 返回值

GET请求 返回查到所有或单条数据

POST请求 返回新增的数据

PUT请求 返回更新数据

PATCH请求 局部更新 返回更新整条数据

DELETE请求 返回值为空

九 返回错误信息

返回值携带错误信息

十 Hypermedia API

如果遇到需要跳转的情况 携带调转接口的URL
  ret = {
code: 1000,
data:{
id:1,
name:‘小强’,
depart_id:http://www.luffycity.com/api/v1/depart/8/
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值