Restful API 的接口规范
发展背景及简介
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备…)。因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行,RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。
rest是Representational State Transfer三个单词的缩写,由Roy Fielding于2000年论文中提出的一种web软件结构风格,注意它仅仅只是代表着一种风格,并不代表着约束、标准。基于REST构建的API就是Restful风格。 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。
以webServer来解释:
非Rest设计,以往我们都会这么写:
http://xxx.com:8080/posts/getAtricle (查询文章)
http://xxx.com:8080/posts/addAtricle (新增文章)
http://xxx.com:8080/posts/updateAtricle (更新文章)
http://xxx.com:8080/posts/deleteAtricle (删除文章)
总结:以不同的URL(主要为使用动词)进行不同的操作
Rest架构:
GET http://xxx.com:8080/posts/atricle(查询文章)
POST http://xxx.com:8080/posts/atricle(新增文章)
PUT http://xxx.com:8080/posts/atricle(新增文章)
DELETE http://xxx.com:8080/posts/atricle(删除文章)
总结:URL只指定资源,以HTTP方法动词进行不同的操作,用HTTP STATUS/CODE定义操作结果。
Restful:遵守了rest风格的web服务便可称为Restful结构.
REST架构风格的设计原则
客户端-服务器(Client-Server)
- 客户端-服务器结构限制的目的是将客户端和服务器端的关注点分离。将用户界面数据存储所关注的逻辑分离开来有助于提高用户界面的跨平台的可移植性,通过简化服务器模块也有助于服务器模块的可扩展性
无状态(Stateless)
- 服务器不能保存客户端的信息每一次从客户端发送的请求中, 要包含所有的状态信息, 会话信息由客户端保存, 服务器端根据这些状态信息来处理请求。服务器可以将会话状态信息传递给其他服务, 比如数据库服务, 这样可以保持一段时间的状态信息, 从而实现认证功能。当客户端可以切换到一个新状态的时候发送请求信息。当一个或者多个请求被发送之后, 客户端就处于一个状态变迁过程中。 每一个应用的状态描述可以被客户端用来初始化下一次的状态变迁
缓存(Cacheability)
- 如同万维网一样, 客户端和中间的通讯传递者可以将回复缓存起来。回复必须明确的或者间接的表明本身是否可以进行缓存, 这可以预防客户端在将来进行请求的时候得到陈旧的或不恰当的数据。管理良好的缓存机制可以减少客户端-服务器之间的交互, 甚至完全避免客户端-服务器交互, 这进一步提了高性能和可扩展性
统一接口(Uniform Interface)
- 这是 RESTful 系统设计的基本出发点。它简化了系统架构, 减少了耦合性, 可以让所有模块各自独立的进行改进各自独立的进行改进
Restful API架构风格中请求规范规范
一、http状态码:
使用http状态码定义api执行结果,http 定义了一系列可以用在接口返回的有含义的状态码。下面是常用状态码解释:
二、路径规范:
01 分隔符
- /"分隔符一般用来对资源层级的划分,例如 http://api.domain.com/school/classes
- 对于REST API来说,"/"只是一个分隔符,并无其他含义。为了避免混淆,"/"不应该出现在URL的末尾。例如以下两个地址实际表示的都是同一个资源:
- http://api.domain.com/school/classes/
- http://api.domain.com/school/classes
- REST API对URI资源的定义具有唯一性,一个资源对应一个唯一的地址。为了使接口保持清晰干净,如果访问到末尾包含 "/" 的地址,服务端应该301到没有 "/"的地址上。当然这个规则也仅限于REST API接口的访问,对于传统的WEB页面服务来说,并不一定适用这个规则
02 路径中使用连字符 -代替下划线 _
- 连字符"-"一般用来分割URI中出现的字符串(单词),来提高URI的可读性,例如:
- http://api.example.restapi.org/blogs/mark-masse/entries/this-is-my-first-post
- http://api.domain.com/school/class/{class_id}/reading-corner
- 使用下划线"_"来分割字符串(单词)可能会和链接的样式冲突重叠,而影响阅读性。但实际上,"-"和"_"对URL中字符串的分割语意上还是有些差异的:"-"分割的字符串(单词)一般各自都具有独立的含义,可参见上面的例子。而"_"一般用于对一个整体含义的字符串做了层级的分割,方便阅读,例如你想在URL中体现一个ip地址的信息:210_110_25_88
- 对于参数名称,使用下划线进行连接,比如 app_id
03 路径中统一使用小写字母
- 根据RFC3986定义,URI是对大小写敏感的,所以为了避免歧义,我们尽量用小写字符。但主机名(Host)和scheme(协议名称:http/ftp/…)对大小写是不敏感的
三、请求方式
- http method对应不同的请求动作
总 结Restful API的接口架构风格中制定了一些规范,极大的简化了前后端对接的时间,以及增加了开发效率,在实际开发中,比如在获取列表分页的时候,对于查询参数过多的接口,会导致uri的长度过长、请求失败,在这种情况下的接口就不能完全按照Restful API的请求规范来。Restful API也就只是一种接口架构的风格,接口API永远不会强约束于此,因按照实际需求做出相应的接口需改。
参考: 浅谈Restful API 的请求规范 - 知乎
Restful API 的接口规范相关推荐
- RESTful API接口设计规范
目录 一.RESTful的诞生背景 二.什么是RESTful? 三.Restful API接口设计规范 3.1.协议 3.2.路径规则|域名 3.3.版本控制 3.4.请求类型 3.5.传入参数 3. ...
- RESTful API接口规范
RESTful规范 Restful API是目前比较成熟的一套互联网应用程序的API设计理念,Rest是一组架构约束条件和原则,如何Rest约束条件和原则的架构,我们就称为Restful架构,Rest ...
- RESTful API接口规范及使用
RESTful API接口规范及使用 REST 指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计就是 RESTful. 非Rest设计,以往我们都会这么写:以不同的URL进行不通的 ...
- restful api接口规范_如何理解RESTful API设计规范?
作者:涂根华 https://www.cnblogs.com/tugenhua0707/p/12153857.html RESTful是目前最流行的API设计规范,它是用于Web数据接口的设计.从字面 ...
- put url带参数_避免自己写的 url 被diss!建议看看这篇RESTful API简明教程!
RESTful API 是每个程序员都应该了解并掌握的基本知识,我们在开发过程中设计 API 的时候也应该至少要满足 RESTful API 的最基本的要求(比如接口中尽量使用名词,使用 POST 请 ...
- php restful规范,RESTFul API规范 详细指南
RESTFul规范 RESTFul是一种HTTP API接口规范,只要满足的RESTFul规范,即可称为RESTFul API. 既然是接口,我们先来了解一下,他和传统的API接口有何不同吧. 本文以 ...
- 使用CodeIgniter框架搭建RESTful API服务
RESTful不仅仅是一套协议标准更是一种设计思路. 在2011年8月的时候,我写了一篇博客<使用CodeIgniter框架搭建RESTful API服务>,介绍了RESTful的设计概念 ...
- go restful 安全_go web restful api
Web后端语言模拟http请求(带用户名和密码)实例代码大全 RESTful API是目前比较成熟的一套互联网应用程序的API设计理论.而随着RESTful API的成熟和流行,应用开发方面就需要以模 ...
- 什么是RESTful API?
一. 定义 Rest的全称是Representational State Transfer,2000年由Roy Fielding发表在他的博士论文中,首次提出了Restful的概念.Restful 做 ...
最新文章
- 如何使用 Python 操作 Git 代码?GitPython 入门介绍
- Hive作业优化总结
- qemu-kvm部分流程/源代码分析
- HDU 6178 Monkeys
- maven配置aliyun仓库地址
- sql server 2008如何导入mdf,ldf文件
- getch方法_C语言中getch()函数详解(附实例)
- SpringBoot整合shiro框架(张开涛跟我学shiro-综合实例-代码新版)
- SQL注入(持续更新中)
- 【经典策略系列】之 Dual Thrust 交易策略
- openwrt中各种默认配置文件所在目录
- 用JavaScript检测IE浏览器版本
- 树莓派 网络附加存储NAS系统和USB外接硬盘文件服务器
- 发现最新的区块链应用-8月16日
- 记录下如何判断错误:no such file or directory
- STM32H7 USART 时钟初始化
- linux网卡驱动更新方法
- python怎么修改字体_python怎么改字体 | 基础教程
- Google PR劫持(转)
- 89C52RC烧录程序记录
热门文章
- 【DIY】FFmpeg Joiner – 多段视频「无损合并」小工具 [Windows]
- 丽江的柔软时光带着轩宝去流浪
- 【HRNet2019】Deep High-Resolution Representation Learning for Visual Recognition
- 鸿蒙os更换壁纸,鸿蒙OS全新PC桌面模式即将上线?回顾一下手机桌面系统的发展历程...
- B站java秒杀系统xyx小可爱qwq
- 在Ubuntu18.04系统中,安装tldr
- python发微信提醒天气_python-定时给指定微信好友发送天气预报和每日一句
- Linux adduser 命令
- 一次性密码HOTP/TOTP
- 微软MVP是什么|什么叫|是什么意思?