您现在的位置是:首页 > 正文

RESTful 规范

2024-04-01 00:57:17阅读 1

1. 基本概念

    REST全称是Representational State Transfer,中文意思是表征性状态转移。指的是一组架构约束条件和原则。如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。如果后台开发遵守了REST风格便可称为RESTful

REST本身并没有创造新的技术,是一种软件架构风格,以更好地使用现有Web标准中的一些准则和约束。结构清晰、符合标准、易于理解、扩展方便。

    RESTful架构是对MVC架构改进后所形成的一种架构,通过使用事先定义好的接口与不同的服务联系起来。在RESTful架构中,浏览器使用POSTDELETEPUTGET四种请求方式分别对指定的URL资源进行增删改查操作。因此,RESTful是通过URI实现对资源的管理及访问,具有扩展性强、结构清晰的特点。

RESTful架构的特点:

  • 每一个URI代表一种资源;
  • 客户端使用GET(查询)、POST(增加)、PUT(更新)、DELETE(删除)四个表示操作方式的动词对服务端资源进行操作;
  • 通过操作资源的表现形式来操作资源;

2. 规范要求

2.1 URI不能包含动词,只能有名词

名词往往与数据库的表名对应。比如:

GET /products :将返回所有产品清单
POST /products :将产品新建到集合
GET /products/4 :将获取产品 4
PUT /products/4 :将更新产品 4

下面写法是错误的写法,比如:/posts/show/1。这里的show是动词,这里就设计错了。正确写法为/posts/1,然后用GET方法表示show

2.2 版本号

应该将API的版本号放入URL
比如:

1.0: http://www.example.com/app/1.0/foo
1.1: http://www.example.com/app/1.1/foo
2.0: http://www.example.com/app/2.0/foo

另一种做法就是将版本号放置在HTTP请求头部的Accept或者Content-Type字段中进行区分,比如:

1.0: vnd.example-com.foo+json; version=1.0
1.1: vnd.example-com.foo+json; version=1.1
2.0: vnd.example-com.foo+json; version=2.0

也可以使用时间戳来替代,比如:

June 2008: http://www.example.com/app/2008/06/foo
October 2009: http://www.example.com/app/2009/10/foo
February 2010: http://www.example.com/app/2010/02/foo

2.3 返回数据格式

返回资源默认为JSON,当然也可以是XML格式的文件,所以需要指定:

XML: http://www.example.com/app/1.0/foo?format=xml
JSON: http://www.example.com/app/1.0/foo?format=json

应该尽量使用JSON,避免使用XML

2.4 状态码必须精确

客户端每一次请求,服务端都必须给出回应,回应包括HTTP状态码和数据两部分。

3. 前后差别对别

Restful API接口规范一文中提到,使用前和使用后的案例:

REST设计:

http://localhost:8080/admin/getUser (查询用户)
http://localhost:8080/admin/addUser (新增用户)
http://localhost:8080/admin/updateUser (更新用户)
http://localhost:8080/admin/deleteUser (删除用户)

不同的URL(主要为使用动词)进行不同的操作。

REST架构:

GET http://localhost:8080/admin/user (查询用户)
POST http://localhost:8080/admin/user (新增用户)
PUT http://localhost:8080/admin/user (更新用户)
DELETE http://localhost:8080/admin/user (删除用户)

URL只指定资源,以HTTP方法动词进行不同的操作。

给人的感觉更加清爽。以后开发需要注意,慢慢向RESTful 规范靠拢。


Thanks

网站文章

  • Python中运算符优先级的顺序

    Python中运算符优先级的顺序

    目录(一)引言(二)运算符分类(三)关于三种运算符的优先级列表 在任何语言中运算符都有优先级一说,那在Python中我们常见的运算符优先级又是如何呢,本文我将展开聊聊这个话题 此处我将列出常见运算符,大致分为算数符(比如加减乘除),关系符(比如大于小于等于)以及逻辑符(与非或)......

    2024-04-01 00:57:08
  • 零宽度字符隐写(CTF) 热门推荐

    零宽度字符隐写(CTF) 热门推荐

    文章目录零宽度字符简介用法其他用法例题:[UTCTF2020] zero 零宽度字符简介 零宽度字符是一些不可见的,不可打印的字符。它们存在于页面中主要用于调整字符的显示格式。 常见的零宽度字符及它们...

    2024-04-01 00:57:02
  • 延迟绑定与ret2dlresolve

    延迟绑定与ret2dlresolve

    2024-04-01 00:56:38
  • Java Junit 由浅入深

    Java Junit 由浅入深

    JUnit4的常用方法:fail()方法:是指测试失败assertEquals()方法:测试2个参数(一个是预期值,一个是实际值)是否相等1. @Test : 测试方法,测试程序会运行的方法,后边可以跟参数代表不同的测试,如(expected=XXException.class) 异常测试,(timeout=xxx)超时测试2. @Ignore : 被忽略的测试方法3. @Befo...

    2024-04-01 00:56:31
  • stm32延时函数的三种写法 热门推荐

    我常用的延时函数有3种,一种是空循环,一种是使用systick中断,还有一种是正点原子的延时。 第一种就不做举例,因为平时不常用。但是一些模块给的参考代码的延时函数都会采用这样的方法,直接用就好了,不...

    2024-04-01 00:56:25
  • 在cmd中查询mysql数据库中文显示为“ ?”的解决办法

    在cmd中查询mysql数据库中文显示为“ ?”的解决办法

    解决命令提示符中查询mysql中文显示为问号的方法 今天在使用Navicat给mysql建表的时候输入了一些包含中文的数据,然后想在cmd中操作一下,查询的时候发现中文字段都变成了问号??? 之后我看了一下Navicat中编码方式为UTF-8,而cmd默认编码格式是GBK, 所以只需要在cmd中加上set names gbk; 就能解决了。 ...

    2024-04-01 00:56:00
  • springcloud——客户端Eureka Client实现负载均衡 Ribbon

    springcloud——客户端Eureka Client实现负载均衡 Ribbon

    一、简介 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均...

    2024-04-01 00:55:54
  • 引用和指针那些事

    对一个数据建立一个“引用”,其作用是为一个已经定义的变量起一个别名【1】引用的格式 类型& 引用的变量名(别名)=定义过的变量名 比如有一个变量a,想给他起一个别名:int a=10; //定义一个变量aint& b=a; //声明b是a的引用cout<<a<<endl; //10cout<<b&...

    2024-04-01 00:55:48
  • 万事开头难? 喵小DI玩“羊了个羊”可不难

    万事开头难? 喵小DI玩“羊了个羊”可不难

    DI-sheep 版 羊了个羊

    2024-04-01 00:55:42
  • UML的学习专题

    根据大神的博客,进行学习UML-统一建模语言

    2024-04-01 00:55:18