精华内容
下载资源
问答
  • restful风格

    万次阅读 多人点赞 2018-08-24 11:55:19
    一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 URL定义 资源:...

    概念

             一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

     

    URL定义

    资源:互联网所有的事物都可以被抽象为资源 
    资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。 
    分别对应 添加、 删除、修改、查询。 


    传统方式操作资源 

    http://127.0.0.1/item/queryUser.action?id=1   查询,GET 
    http://127.0.0.1/item/saveUser.action             新增,POST 
    http://127.0.0.1/item/updateUser.action          更新,POST 
    http://127.0.0.1/item/deleteUser.action?id=1  删除,GET或POST

     

    请求方式

    可以通过 GET、 POST、 PUT、 PATCH、 DELETE 等方式对服务端的资源进行操作。其中,GET 用于查询资源,POST 用于创建资源,PUT 用于更新服务端的资源的全部信息,PATCH 用于更新服务端的资源的部分信息,DELETE 用于删除服务端的资源。

    这里使用“用户”的案例进行回顾通过 GET、 POST、 PUT、 PATCH、 DELETE 等方式对服务端的资源进行操作。

     

    使用RESTful操作资源 

    【GET】 /users # 查询用户信息列表

    【GET】 /users/1001 # 查看某个用户信息

    【POST】 /users # 新建用户信息

    【PUT】 /users/1001 # 更新用户信息(全部字段)

    【PATCH】 /users/1001 # 更新用户信息(部分字段)

    【DELETE】 /users/1001 # 删除用户信息

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

     

    API设计风格基本规则

    1.使用名词而不是动词

    不要使用:

    /getAllUsers
    /createNewUser
    /deleteAllUser

    2.Get方法和查询参数不应该涉及状态改变

    使用PUT, POST 和DELETE 方法 而不是 GET 方法来改变状态,不要使用GET 进行状态改变:

    3.使用复数名词

    不要混淆名词单数和复数,为了保持简单,只对所有资源使用复数。

    /cars 而不是 /car
    /users 而不是 /user
    /products 而不是 /product
    /settings 而部署 /setting

    4. 使用子资源表达关系

    如果一个资源与另外一个资源有关系,使用子资源:

    GET /cars/711/drivers/ 返回 car 711的所有司机
    GET /cars/711/drivers/4 返回 car 711的4号司机

    5.使用Http头声明序列化格式

    在客户端和服务端,双方都要知道通讯的格式,格式在HTTP-Header中指定

    Content-Type 定义请求格式
    Accept 定义系列可接受的响应格式

    6.为集合提供过滤 排序 选择和分页等功能

    Filtering过滤:

    使用唯一的查询参数进行过滤:

    GET /cars?color=red 返回红色的cars
    GET /cars?seats<=2 返回小于两座位的cars集合

    Sorting排序:

    允许针对多个字段排序

    GET /cars?sort=-manufactorer,+model

    这是返回根据生产者降序和模型升序排列的car集合

    Field selection

    移动端能够显示其中一些字段,它们其实不需要一个资源的所有字段,给API消费者一个选择字段的能力,这会降低网络流量,提高API可用性。

    GET /cars?fields=manufacturer,model,id,color

    Paging分页

    使用 limit 和offset.实现分页,缺省limit=20 和offset=0;

    GET /cars?offset=10&limit=5

    为了将总数发给客户端,使用订制的HTTP头: X-Total-Count.

    链接到下一页或上一页可以在HTTP头的link规定,遵循Link规定:

    Link: <https://blog.mwaysolutions.com/sample/api/v1/cars?offset=15&limit=5>; rel="next",
    <https://blog.mwaysolutions.com/sample/api/v1/cars?offset=50&limit=3>; rel="last",
    <https://blog.mwaysolutions.com/sample/api/v1/cars?offset=0&limit=5>; rel="first",
    <https://blog.mwaysolutions.com/sample/api/v1/cars?offset=5&limit=5>; rel="prev",

    7.版本化你的API

    使得API版本变得强制性,不要发布无版本的API,使用简单数字,避免小数点如2.5.

    一般在Url后面使用?v

    /blog/api/v1

    8. 使用Http状态码处理错误

    如果你的API没有错误处理是很难的,只是返回500和出错堆栈不一定有用

    Http状态码提供70个出错,我们只要使用10个左右:

    200 – OK – 一切正常
    201 – OK – 新的资源已经成功创建
    204 – OK – 资源已经成功擅长

    304 – Not Modified – 客户端使用缓存数据

    400 – Bad Request – 请求无效,需要附加细节解释如 "JSON无效"
    401 – Unauthorized – 请求需要用户验证
    403 – Forbidden – 服务器已经理解了请求,但是拒绝服务或这种请求的访问是不允许的。
    404 – Not found – 没有发现该资源
    422 – Unprocessable Entity – 只有服务器不能处理实体时使用,比如图像不能被格式化,或者重要字段丢失。

    500 – Internal Server Error – API开发者应该避免这种错误。

    使用详细的错误包装错误:

    {

      "errors": [

       {

        "userMessage": "Sorry, the requested resource does not exist",

        "internalMessage": "No car found in the database",

        "code": 34,

        "more info": "http://dev.mwaysolutions.com/blog/api/v1/errors/12345"

       }

      ]

    }

    9.允许覆盖http方法

    一些代理只支持POST 和 GET方法, 为了使用这些有限方法支持RESTful API,需要一种办法覆盖http原来的方法。

    使用订制的HTTP头 X-HTTP-Method-Override 来覆盖POST 方法.

     

    Restful风格的springMVC配搭ajax请求的例子

    总而言之restful是一种旧技术新风格

    展开全文
  • RestFul风格

    2020-12-15 16:06:54
    RestFul风格 springMVC支持RestFul风格: 1)支持rest风格的url 2)传统的url依旧有效,可以继续使用 实际开发中,半rest风格,半传统风格 只需要把前端控制器的<url -pattern>*.do<url -pattern>修改...

    RestFul风格

    在这里插入图片描述
    在这里插入图片描述
    springMVC支持RestFul风格:

    		1)支持rest风格的url
    		2)传统的url依旧有效,可以继续使用
    

    实际开发中,半rest风格,半传统风格

    只需要把前端控制器的<url -pattern>*.do<url -pattern>修改为<url -pattern>/<url -pattern>

    	<url-pattern>*.do<url-pattern>前端控制器,会处理所有以.do结尾的url
    	<url-pattern>/<url-pattern>前端控制器,会处理所有url除了jsp页面请求
    	<url-pattern>/*<url-pattern>前端控制器,会处理所有url包括jsp请求页面
    

    注意:当请求静态资源,经过前端控制器,前端控制器请求处理器映射器根据url查询处理器,无法访问到静态资源,需要我们特殊处理

    解决方案:
    方法一:在所有的处理器前添加一个url前缀 ,例如下图的/app/*,前缀名一定不能跟静态资源的文件夹名一样,否者这个文件夹下面的静态资源还是会被拦截
    在这里插入图片描述

    方法二:使用<url - pattern> / <url - pattern>

    第一种解决方案:
    在这里插入图片描述
    在这里插入图片描述
    第二种方案:
    在这里插入图片描述
    1)不使用全局日期转换器类了,就只能使用局部的日期转换:@DateTimeFormat()
    2)使用全局日期转换器类,不是,使用

    展开全文
  • RESTful风格

    千次阅读 2020-11-20 21:10:02
    RESTful风格 1.1 什么是RESTful REST与技术无关,代表的是一种软件架构风格(REST是Representational State Transfer的简称,中文翻译为“表征状态转移”) REST从资源的角度类审视整个网络,它将分布在网络中某个...

    RESTful风格

    1.1 什么是RESTful
    REST与技术无关,代表的是一种软件架构风格(REST是Representational State Transfer的简称,中文翻译为“表征状态转移”)
    REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识
    所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
    对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)
    1.web开发本质

    对数据库中的表进行增删改查操作
    Restful风格就是把所有数据都当做资源,对表的操作就是对资源操作
    在url同通过 资源名称来指定资源
    通过 get/post/put/delete/patch 对资源的操作
    2.RESTful API设计规范

    • 1.API与用户的通信协议,总是使用HTTPs协议。

    • 2.域名

    # 1)子域名方式
      https://api.example.com                # 尽量将API部署在专用域名(会存在跨域问题)
      https://www.example.com                # vue前端域名
    # 2)url方式
      https://example.org                    # vue前端域名
      https://example.org/api/               # 后端API域名(不存在跨域)
    
    • 3.版本
    URL,如:https://api.example.com/v1/
    请求头       跨域时,引发发送多次请求
    
    • 4.面向资源编程: 路径,视网络上任何东西都是资源,均使用名词表示(可复数)
    https://api.example.com/v1/zoos/1/
    https://api.example.com/v1/animals
    https://api.example.com/v1/employees
    
    • 5.method
    GET(查询数据)     # 从服务器取出资源(一项或多项)
    POST(创建数据)    # 在服务器新建一个资源
    PUT(修改数据)     # 在服务器更新资源(客户端提供改变后的完整资源)
    PATCH(修改属性)   # 在服务器更新资源(客户端提供改变的属性)
    DELETE(删除数据)  # 从服务器删除资源
    
    • 6.过滤,分页,排序:通过在url上传参的形式传递搜索条件
    https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
    https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
    https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
    https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
    https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件
    
    • 7.状态码
    '''1. 2XX请求成功'''
    # 1.1 200 请求成功,一般用于GET与POST请求
    # 1.2 201 Created - [POST/PUT/PATCH]:用户新建或修改数据成功。
    # 202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
    # 204 NO CONTENT - [DELETE]:用户删除数据成功。
    '''2. 3XX重定向'''
    # 301 NO CONTENT - 永久重定向
    # 302 NO CONTENT - 临时重定向
    '''3. 4XX客户端错误'''
    # 3.1 400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误。
    # 3.2 401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
    # 3.3 403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。
    # 3.4 404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录。
    # 406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。
    # 410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。
    # 422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。
    '''4. 5XX服务端错误'''
    # 500 INTERNAL SERVER ERROR - [*]:服务器内部错误,无法完成请求
    # 501 Not Implemented     服务器不支持请求的功能,无法完成请求
    
    getattr
    #自省,在类中,查一下这个对象中有没有这个功能。
    getattr(对象,条件,如果不满足时 提供的其他功能)
    
    展开全文
  • Restful风格

    2019-12-22 10:38:12
    文章目录rest定义基本概念表征状态转移什么是资源统一资源接口资源的表述状态转移总结restful风格RESTful API设计规范如何设计Restful风格的API一 面向资源编程二 根据method不同,进行不同的操作三 在URL中体现版本...

    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/
    }
    }

    展开全文
  • RestFul 风格

    2020-07-30 16:31:15
    RestFul 风格 Restful就是一个资源定位及资源操作的风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 互联网所有的事物都可以被抽象为资源操作:使用POST、DELETE、PUT、GET,使用不同...
  • RESTful 风格

    2020-11-02 21:59:16
    什么是RESTful风格? REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,而 HTTP 是一种包含了 REST 架构属性的协议,为了便于理解,我们把它的首字母拆分成不同...
  • restFul风格

    2020-05-19 18:54:27
    restFul风格1: * 语法: * 1.参数必须使用/方式进行分割 * 2.参数必须使用{}包裹, 名称任意 见名知意即可 * 3.在方法中添加同名参数 + 注解 @PathVariable * * 注解说明: * value/name:如果参数命名和方法中的参数...
  • Restful 风格

    2019-08-11 19:48:38
    # # 什么是 Restful风格 我的理解就是一句话:跟去HTTP请求方式区分对资源的CRUD操作。 # #用一个表格来解释什么叫根据HTTP请求方式 也就是说,之前发送一个getEmp代表查询操作,Restful就是用get请求就...
  • RESTFUl风格

    2019-02-11 14:02:20
    RESTFUl风格 在前后端分离的应用模式里,后端API接口如何定义? 例如对于后端数据库中保存了商品的信息,前端可能需要对商品数据进行增删改查,那相应的每个操作后端都需要提供一个API接口: POST /add-goods 增加...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,872
精华内容 4,748
关键字:

restful风格