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

RESTFUL特点包括:

1、每一个URI代表1种资源;

2、客户端使用GET、POST、PUT、DELETE4个表示操作方式的动词对服务端资源进行操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源;

3、通过操作资源的表现形式来操作资源;

4、资源的表现形式是XML或者HTML;

5、客户端与服务端之间的交互在请求之间是无状态的,从客户端到服务端的每个请求都必须包含理解请求所必需的信息。

在当前流行的前后端分离架构,人们发现原来这套用于超文本传输的协议是如此适合用于设计基于互联网的api接口,基于http动词以及标准的http status返回信息,能够非常好地描述api的特性,并且可读性非常好。更重要的是,由于http是事实上的互联网通讯标准协议,基于rest设计的api接口,就好像你出国用英语和别人交流,完全不存在沟通障碍。
REST架构,从个人角度理解,核心做了两件事情

  • 资源定位

  • 资源操作

其实从REST的定义中就能看出来,表述层对应的就是描述资源的位置(资源定位),状态转移就是对资源的状态进行变更操作(增删改查)
下面举个实际的例子:
假设我们数据库里有一张User表,我们根据表建好了领域对象模型User,按照restful规范设计的接口应该是这样的:

  • 新增用户

[POST] /users
  • 修改用户

[PUT] /users/{id}
  • 删除用户

[DELETE] /users/{id}
  • 查找全部用户

[GET] /users

从这里也能看出接口命名为对应表名的复数形式,并且[method] 是对应到如下

HTTP Method

rest的定义,第一条叫做资源定位,如果还不理解,那让我们再想想URL的定义,叫做统一资源定位符,也就是说url是用来表示资源在互联网上的位置的,所以说在url中不应该包含动词,只能包含名词。对资源的操作应该体现在http method上面,如果这样理解还比较抽象的话,这里不妨再打一个比方,比如在jane的网站有一张小汽车的图片,地址是http://jane.com/img/car.jpg,现在jane想设计一个api接口,实现对这张图片的删除操作,这个api应该怎么设计?根据rest的设计规范,很容易得出是

[DELETE] http://jane.com/img/car

严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。它的具体表现形式,应该在HTTP请求的头信息中用Accept和Content-Type字段指定,这两个字段才是对"表现层"的描述。

除了HTTP METHOD,rest另外一套重要的规范就是HTTP STATUS,这套状态码规范定义了常规的api操作所可能产生的各种可能结果的描述,遵循这套规范,会使得你的api变得更加可读,同时也便于各种网络、基础设施进行交易状态监控。经常会用到的status code整理如下:

200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)204 NO CONTENT - [DELETE]:用户删除数据成功。400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

最后推荐大家github的api文档:

完毕!!!

来源:

https://www.toutiao.com/i6895160206846755339/

“IT大咖说”欢迎广大技术人员投稿,投稿邮箱:aliang@itdks.com

来都来了,走啥走,留个言呗~

 IT大咖说  |  关于版权 

由“IT大咖说(ID:itdakashuo)”原创的文章,转载时请注明作者、出处及微信公众号。投稿、约稿、转载请加微信:ITDKS10(备注:投稿),茉莉小姐姐会及时与您联系!

感谢您对IT大咖说的热心支持!

相关推荐

推荐文章

  • 一文看懂企业数字化转型的五大趋势

  • MapStruct(entity优雅的转dto)

  • Java微服务可以和Go一样快吗?

  • 面试官:String长度有限制吗?是多少?还好我看过

  • 终于有人把云计算、大数据和人工智能讲明白了

  • 前端性能优化 24 条建议(2020)

restful api接口规范_Restful API设计规范相关推荐

  1. java restful开发规范_restful api 开发规范

    1.协议 http && https 2.域名 https://api.example.com && https://example.org/api/ 3.版本  ht ...

  2. RESTful API接口规范

    RESTful规范 Restful API是目前比较成熟的一套互联网应用程序的API设计理念,Rest是一组架构约束条件和原则,如何Rest约束条件和原则的架构,我们就称为Restful架构,Rest ...

  3. RESTful API接口规范及使用

    RESTful API接口规范及使用 REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful. 非Rest设计,以往我们都会这么写:以不同的URL进行不通的 ...

  4. 基于RESTful标准的Web Api

    微软的web api是在vs2012上的mvc4项目绑定发行的,它提出的web api是完全基于RESTful标准的,完全不同于之前的(同是SOAP协议的)wcf和webService,它是简单,代码 ...

  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.1 API资源命名

    为了与RESTful API进行交互,API消费者需要使用到三个概念: 资源的标识.也就是可以找到资源的URI. HTTP方法.例如GET,POST等等,这些方法是HTTP协议的一部分. 有效载荷(可 ...

  6. 如何区别API、REST API、RESTful API和Web Service之间的异同

    当你看到API接口你会想起什么?是接口.第三方调用.还是API文档?初看你可能会觉得这太熟悉了,这不是系统开发日常系列吗?但你仔细想一想,你会发现API的概念在你脑海里是如此的模糊.如何你通过搜索引擎 ...

  7. 智能家居开源生态—正确的HTTP API 接口规范以及设备类插件实现

    一.HTTP API 接口规范 接口鉴权 使用smartassistant接口,需将用户凭证smart-assistant-token,放在http请求的header中.格式如下: "sma ...

  8. java api 设计_Java API设计实践

    使你的API在模块化和非模块化Java环境中都可用 在优锐课的java学习分享中,对微服务有了更深层次的新概念.关于API设计实践一点就通了. 介绍 了解设计Java API时应应用的一些API设计实 ...

  9. 谈谈微服务中的 API 网关(API Gateway)

    前言 又是很久没写博客了,最近一段时间换了新工作,比较忙,所以没有抽出来太多的时间写给关注我的粉丝写一些干货了,就有人问我怎么最近没有更新博客了,在这里给大家抱歉. 那么,在本篇文章中,我们就一起来探 ...

最新文章

  1. 【 MATLAB 】MATLAB 实现模拟信号采样后的重建(一)
  2. 聊一聊:MyBatis和Spring Data JPA的选择问题
  3. 汇编中的REPZ CMPSB
  4. Vue指令之v-for——迭代数组、迭代对象中的属性、迭代数字||v-for循环中key属性的使用
  5. Index of sql server
  6. 【进阶技术】一篇文章搞掂:Spring高级编程
  7. 如何使用 dotTrace 来诊断 netcore 应用的性能问题
  8. SharePoint 2013 搭建负载均衡(NLB)详解
  9. node学习笔记,第一个Node程序
  10. IOS学习笔记 ---- 15/09/02
  11. 《Android游戏开发详解》一3.7 里程碑
  12. mac安装jad反编译工具
  13. linux vi命令的查询,linux vi命令模式详解
  14. SSM汽车维修中心管理系统
  15. Qt之QTableView的简单使用(含源码+注释)
  16. 税务会计实务【15】
  17. 如何批量将 PPT 转换为 jpeg、png、bmp 图片
  18. 全球股市暴跌,币圈应声跳水,为什么?
  19. 2021年茶艺师(初级)考试技巧及茶艺师(初级)试题及解析
  20. 日常pytho3练习脚本之--两个逗比聊天机器人

热门文章

  1. Python GUI 截图小工具 实例Demo
  2. DPDK 跟踪库tracepoint源码实例分析
  3. The LLVM Compiler Infrastructure | LLVM编译器基础设施
  4. ncurses屏幕操作:getyx(),getparyx(),getmaxyx(),scr_dump(),scr_restore(),getwin(),putwin()
  5. Django:ORM基本操作-CRUD,管理器对象objects,----->查询2(filter,exclude,get,查询谓词)
  6. python接口测试面试_面试秘籍 | 一文搞定面试中接口测试问题
  7. Centos、Ubuntu的区别
  8. es6 string includes_蔚来初体验,蔚来ES6用车日记!开着挺轻松的
  9. 深度限流装置是什么_集团公司首例零损耗深度限流装置顺利投运
  10. mysql查询报错2014_mysql Hibernate 查询时用别名报错