0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

REST的6大指导原则

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-10-09 14:27 次阅读

1. 前言

REST 全称为 :Resource Representational State Transfer. 是一种分布式超媒体系统( distributed hypermedia systems )架构风格。由Roy Fielding 提出。

REST API 也称RESTful API, 其遵循REST架构规范的应用编程接口, 支持与RESTful WEB服务进行交互。简单来讲就是:符合REST架构风格的 WEB API 或WEB 服务就是 REST API。

2. REST 的6大指导原则

REST 定义了6个原则,这些原则使得一个WEB API 成为真正的RESTful API。

  • 统一接口(Uniform interface)
    开发者一旦熟悉了你的其中一个API,那么他就可以遵循类似的结构去使用其他API.
  • 客户端服务器(Client-server)
    只要不改变他们之间的接口,服务端和客户端可以相互替换或独立开发。
  • 无状态(Stateless)
    客户端上下文状态不应该存储在服务端,而应该有客户端去管理程序的状态
  • 可缓存(Cacheable)
    优秀的缓存可以部分或者完全消除客户端和服务端的交互,最终提高应用的伸缩性和性能。
  • 分层系统(Layered System)
    REST可以允许你使用分层架构,让你在服务器A上部署API, 服务器B上存储数据,服务器C上进行权限验证,客户端不知道它实际连接的是哪个服务器。
  • 按需编码(Code on demand (optional))
    这些规则可以帮组你构建真正的RESTful API ,所以尽量遵循着些规则。如果因为某些原因违反这些规则,事实上你还是在构建RESTful API ,只是不算真正的RESTful。

3. 最佳实践

3.1 API名称

API的名称应该出现在URL中,API的标题也应该和名称一致,所以起名子也是比较重要的一点,这决定了你的API是否容易让人读懂!

3.2 API的版本

API的版本应该遵循, MAJOR.MINOR.PATCH的结构,即主要.次要.补丁 。

如果有重大的改动,导致前后的版本不兼容应该升级主要版本, 比如从1.0 升级到2.0。

如果只是增加了一些特性,前后的版本都是兼容话,可以升级次要版本, 比如从1.0 升级到1.1.

如果有一些小的bug修改的话,可以在补丁版本的上升级,比如从 1.0 升级到1.0.1

例如:

https://mysite.com/v1/...
https://mysite.com/v2/...

3.3提供准确的API文档

开发完成一个API之后,你需要让API的使用者可以正确的使用它,那么就需要一份漂亮的API文档了。

API文档需要提供准确的请求路径, 请求示例, 以及各种error时的状态码等。 可以使用Swagger等工具。

3.4资源路径命名

  • 资源名称使用名词,而不要使用动词。
    比如 POST : /cars 表示创建cars , GET: /cars 表示查询cars 而不应该写成/createCars , /getCars 等等。
  • 获取集合资源与获取特定资源,统一使用复数来表示资源。
    #获取资源集合时使用复数名词 
    例如 /schools
    
    
    #获取特定资源
    例如 /schools/{school-id}  /schools/5
    
    
    #获取特定资源的子资源 
    例如 /schools/{school-id}/grades  /schools/5/grades
    

3.5资源操作

RESTful API 使用HTTP 方法来对资源进行操作,相对应的一些常用操作如下:

HTTP method资源操作类型
GET查询集合,查询单个资源
POSTCreate 创建某个资源
PUTupdate 更新资源
PATCH局部更新资源
DELETE删除资源
  • 创建资源 POST
    使用POST方法 创建资源,此处可以创建单个资源或者资源集合。创建成功应该立马返回HTTP 201, 二接受到resource并未立即添加资源则返回 HTTP 202 。

    例如: 使用POST: /schools 添加多个school资源,
             /schools/{school-id}/grades 添加某个school资源的grade,
    
  • 查询集合资源 及单个资源

    例如: 使用 GET: /schools?type=PRIMARY  查询所有的小学
          使用 GET :/schools/{school-id}/grades 查询某个学校的所有年级
              GET :/schools/{school-id}/grades/{grade-id}  查询某个学校某个年级
    
  • 更新及修改资源 PUT/PATCH
    更新个修改资源包含多种情况:
    一种是完全更新,使用新的资源完全替换旧的资源。

    例如:PUT: /schools/{school-id}/address  更新某个客户学校的地址信息
    

    一种是修改局部更新,根据需求去更新修改原有的资源。

    例如:PATCH: /schools/{school-id}/teachers  调整某个学校的老师
    

    举个例子

    原有的资源如下:

    {
        "a":"A",
        "b":{
            "c":"C",
            "d":"D"
        }
    }
    

    当PATAH请求 如下:

    PATCH  HTTP/1.1
    Content-Type: application/merge-patch+json
    {
        "a":"Z",
        "b":{
            "d":null
        }
    }
    

    修改后的resource如下

    {
        "a":"Z",
        "b":{
            "c":"C"
        }
    }
    
  • 删除资源
    删除资源使用DELETE方法,删除的方法有直接删除,或者使资源不可见。

3.6请求参数

  • 其余不是资源的参数应该出现在请求参数中。而且查询参数应该出现在GET请求中,不应该出现在PUT,POST请求中。
  • 请求参数应该使用驼峰命名法。
    例如:GET /orders?startDate=2022-01-03&endDate=2022-02-03
        DELETE /orders?status=EXPIRED
    
  • 使用唯一查询参数进行过滤
    GET /orders?orderType=PAID
    GET /orders?amount >100.00
    
  • 分页查询
    API 使用offset={resultOffset}&limit={resultsPerPage} 进行分页查询,
    并且以第0条数据为起始。
    
    另外也可以使用 page={pageNumber}&limit={resultPerPage} 此时起始页为第1页
    
    使用index={pageIndex}&limit={resultPerPage}, 每一页可以返回上一页或者下一页的link
    
    可以看如下例子:
        GET /orders?page=1&limit=15 第一页的15条数据
        GET /orders?offset=0&limit=15 第一页的15条数据
        GET /orders?page=5&limit=10 第五页的10条数据 第51-60GET /orders?offset=50&limit=105160条数据
        GET /orders?index=xxxxxxx&limit=10  同样也可以表示第51-60条数据,
      只不过对客户端来说可能不知道第几页,response中应该包含有上一页和下一页的index
    
  • 排序
    API的排序功能是API非常重要的一个功能,可以使用sort,sort-by 即使没有指出要排序,那么而应该给一个默认的排序。
    例如:
        GET /orders?sort=asc(date)  /orders?sort=desc(date) 
        GET /orders?sort=+date      /orders?sort=-date
        GET /orders?sort=date.asc      /orders?sort=date.desc
        GET /orders?sort=date&order-by=asc    /orders?sort=-date&order-by=desc 
    
     多字段排序示例:
        GET /orders?sort=desc(date),asc(amount)
        GET /orders?sort=-date,+amount
    

3.7使用HTTP状态码处理错误

Http状态码有很多,这里列举一些常见的。

http status描述
2XXSUCCESS
200OK
201Create
202Accepted
204No Content
4XXClient Error
400Bad Request
401Unauthorized
403Forbidden
404Not Found
429Too Many Request
5xxServer Errors
500Internal Server Error

总结

本篇介绍了一些REST API的一些食用方式,我们工作中可以根据一些各自的条件,作为参考。欢迎留言讲讲自己的一些实践经验!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 存储
    +关注

    关注

    12

    文章

    3859

    浏览量

    84667
  • 服务器
    +关注

    关注

    12

    文章

    8120

    浏览量

    82522
  • API
    API
    +关注

    关注

    2

    文章

    1383

    浏览量

    60992
  • 编程接口
    +关注

    关注

    1

    文章

    33

    浏览量

    7951
  • REST
    +关注

    关注

    0

    文章

    32

    浏览量

    9358
收藏 人收藏

    评论

    相关推荐

    新人报道,求各位大大指导

    新人报道,求各位大大指导{:soso_e100:}
    发表于 04-25 16:11

    有没有一个网站是专门介绍各种芯片参数,原理图的,小白在此跪求各位大大指导

    有没有一个网站是专门介绍各种芯片参数,原理图的,小白在此跪求各位大大指导
    发表于 05-07 21:49

    集成隔离电源器件布局有哪些指导原则

    集成隔离电源器件布局一般指导原则
    发表于 03-18 06:40

    FPGA设计的指导原则有哪些?需要注意什么?

    FPGA设计的指导原则有哪些FPGA设计需注意的方方面面
    发表于 04-08 07:01

    War3Rest.exe下载

    War3Rest.exe
    发表于 10-04 07:46 0次下载
    War3<b class='flag-5'>Rest</b>.exe下载

    FPGA设计的指导原则

    FPGA设计的指导原则:这里“面积”指一个设计消耗FPGA/CPLD 的逻辑资源的数量,对于FPGA 可以用所消耗的触发器(FF)和查找表(LUT)来衡量,更一般的衡量方式可以用设计所占用的等
    发表于 01-11 09:01 107次下载

    REST学习

    学习REST必备
    发表于 07-05 15:22 15次下载

    设计复用的RTL指导原则

    设计可复用的基本要求是RTL 代码可移植。通常的软件工程指导原则在RTL 编码时也适用。类似软件开发,基本的编码指导原则要求RTL 代码简单、结构化和规则化。这样的代码也易于综合
    发表于 12-24 00:46 32次下载

    FPGA设计的指导原则

    FPGA的基本设计原则,基本设计思想,基本操作技巧,常用模块。如果大家有意识的用这些原则方法指导日后的的工作,那么会达到事半功倍
    发表于 02-18 11:53 1次下载

    良好接地指导原则

    良好接地指导原则
    发表于 12-15 22:19 0次下载

    Jeep大指挥官试驾,性能全面解析

    4月17日,广汽菲克Jeep全新7座中型SUV——大指挥官正式上市,新车将推出两种动力共计8款车型,官方指导价为27.98-40.98万。
    发表于 05-28 00:27 3092次阅读

    FPGA的指导原则详细资料说明

    这一部分主要介绍 FPGA/CPLD设计的指导原则,如FPGA设计的基本原则、基本设计思想、基本操作技巧、常用模块等。 FPGA/CPLD设计的基木原则、思想、技巧和常用模块是一个非
    发表于 01-20 15:17 26次下载
    FPGA的<b class='flag-5'>指导</b>性<b class='flag-5'>原则</b>详细资料说明

    REST端口支持构建动态REST请求来使用RESTful API网络

    REST端口支持构建动态REST请求来使用RESTful API网络服务。 概览 REST端口暴露了一个简单的接口来为REST请求构建头、授权、主体和HTTP方法。请求体可以在端口配置
    的头像 发表于 01-17 09:11 4393次阅读

    REST API是什么,如何使用REST端口

    API是Application Programming Interface(应用程序接口)的缩写,它是拿来描述一个类库的特征或是如何去运用它。按照目前比较主流的分法,可以分为REST API
    的头像 发表于 02-17 18:00 7884次阅读
    <b class='flag-5'>REST</b> API是什么,如何使用<b class='flag-5'>REST</b>端口

    到底什么样的REST才是最佳REST

    说起 REST API,小伙伴们多多少少都有听说过,但是如果让你详细介绍一下什么是 REST,估计会有很多人讲不出来,或者只讲出来其中一部分。
    的头像 发表于 01-17 10:14 454次阅读