REST = HTTP动词(GET POST PUT DELETE)操作 + 服务器暴露资源URI,最后返回状态码(充分利用HTTP自身的特征,而不仅仅是把HTTP当作传输协议。Rest协议是面向资源的,SOAP是面向服务的),表现形式可以是JSON XML BIN,举例很清楚
好处是,操作系统或者浏览器,可以重复利用它们内置的缓存机制等等。
增删改查都是一个地址,具体靠http头部信息判断。
利用HTTP协议语义构建的语义化、可缓存的接口。
URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。
-----------------------------------------------------------------------------------------------
首先,之所以晦涩是因为前面主语被去掉了,全称是 Resource Representational State Transfer:通俗来讲就是:资源在网络中以某种表现形式进行状态转移。分解开来:
Resource:资源,即数据(前面说过网络的核心)。比如 newsfeed,friends等;
Representational:某种表现形式,比如用JSON,XML,JPEG等;
State Transfer:状态变化。通过HTTP动词实现。
作者:覃超
链接:https://www.zhihu.com/question/27785028/answer/48096396
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-----------------------------------------------------------------------------------------------
链接:https://www.zhihu.com/question/28557115/answer/47846156
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1、REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露。
URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过 HTTP动词来体现,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。
比如:左边是错误的设计,而右边是正确的
GET /rest/api/getDogs --> GET /rest/api/dogs 获取所有小狗狗
GET /rest/api/addDogs --> POST /rest/api/dogs 添加一个小狗狗
GET /rest/api/editDogs/:dog_id --> PUT /rest/api/dogs/:dog_id 修改一个小狗狗
GET /rest/api/deleteDogs/:dog_id --> DELETE /rest/api/dogs/:dog_id 删除一个小狗狗
左边的这种设计,很明显不符合REST风格,上面已经说了,URI 只负责准确无误的暴露资源,而 getDogs/addDogs...已经包含了对资源的操作,这是不对的。相反右边却满足了,它的操作是使用标准的HTTP动词来体现。
2、REST很好地利用了HTTP本身就有的一些特征,如HTTP动词、HTTP状态码、HTTP报头等等
REST API 是基于 HTTP的,所以你的API应该去使用 HTTP的一些标准。这样所有的HTTP客户端(如浏览器)才能够直接理解你的API(当然还有其他好处,如利于缓存等等)。REST 实际上也非常强调应该利用好 HTTP本来就有的特征,而不是只把 HTTP当成一个传输层这么简单了。
HTTP动词
GET 获取一个资源
POST 添加一个资源
PUT 修改一个资源
DELETE 删除一个资源
实际上,这四个动词实际上就对应着增删改查四个操作,这就利用了HTTP动词来表示对资源的操作。
HTTP状态码
200 OK
400 Bad Request
500 Internal Server Error
在 APP 与 API 的交互当中,其结果无非就三种状态:
- 所有事情都按预期正确执行完毕 - 成功
- APP 发生了一些错误 – 客户端错误
- API 发生了一些错误 – 服务器端错误
这三种状态与上面的状态码是一一对应的。
HTTP报头
Authorization 认证报头
Cache-Control 缓存报头
Cnotent-Type 消息体类型报头
......
报头还有很多,不一一列举。HTTP报头是描述HTTP请求或响应的元数据,它的作用是客户端 与 服务器端进行相互通信时,告诉对方应该如何处理本次请求。
-----------------------------------------------------------------------------------------------
rest协议是面向资源的
假如要管理一些用户,那么将用户看作是一种资源:
get /users/{userId} 获取userId对应的user信息
post /users 创建一个新的user
put /users/{userId} 更改userId对应的user信息
delete /users/{userId} 删除userId对应的user。
soap是面向服务的
还是管理用户,将对用户的操作看成服务:
post /users/getUser
post /users/creatUser
post /users/updateUser
post /users/deleteUser
作者:yuankai deng
链接:https://www.zhihu.com/question/28557115/answer/41267646
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
-----------------------------------------------------------------------------------------------
链接:https://www.zhihu.com/question/27785028/answer/118036452
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
参看一个例子吧:GitHub - hot13399/spring-mvc-REST
- GET
http://localhost:8080/spring-mvc-REST/students
可以获得所有的学生信息。
- GET
http://localhost:8080/spring-mvc-REST/students/1
可以获得id为“1”的学生信息。
- POST 以下JSON内容
{"id":0,"firstName":"Wang","lastName":"Di","gender":"M","birthday":538300800000,"uscId":"1234509876","gpa":3.62,"mentorId":null,"department":"Computer Science"}
到
http://localhost:8080/spring-mvc-REST/student
,可以添加一个学生信息。
- PATCH以下内容
{"gpa":3.62}
到
http://localhost:8080/spring-mvc-REST/students/1
可以修改学生ID为1的学生的GPA.
- PUT以下内容(Full Content)
{"firstName":"Wang","lastName":"Di","gender":"M","birthday":538300800000,"uscId":"1234509876","gpa":3.62,"mentorId":null,"department":"Computer Science"}
到
http://localhost:8080/spring-mvc-REST/students/1
可以替换掉这个对象
- DELETE
http://localhost:8080/spring-mvc-REST/students/1
,可以删除学生ID为1的信息。
REST = HTTP动词(GET POST PUT DELETE)操作 + 服务器暴露资源URI,最后返回状态码(充分利用HTTP自身的特征,而不仅仅是把HTTP当作传输协议。Rest协议是面向资源的,SOAP是面向服务的),表现形式可以是JSON XML BIN,举例很清楚的更多相关文章
- restful : 面向资源架构
restful 规范 1. API与用户的通信协议,https协议 2. 域名 https://api.example.com 尽量将API部署在专用域名 https://example.org/ap ...
- REST面向资源架构 RESTful架构
REST基础概念: 在REST中的一切都被认为是一种资源. 每个资源由URI标识. 使用统一的接口.处理资源使用POST,GET,PUT,DELETE操作类似创建,读取,更新和删除(CRUD)操作. ...
- 面向 AWS 专家的 Azure 云服务介绍
本文是面向 AWS 专家的 Azure 云服务介绍,参考本文可以帮助大家“按图索骥”在 Azure 的平台上找到能满足自己需求的服务. 公有云市场经过多年发展,已经涌现出几家大规模的提供商,如 Azu ...
- 领域建模-模型验证与面向资源的API设计
使用 UMLet 建模 1. 使用类图,分别对 Asg_RH 文档中 Make Reservation 用例以及 Payment 用例开展领域建模.然后,根据上述模型,给出建议的数据表以及主要字段,特 ...
- 老李推荐:第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程
老李推荐:第14章1节<MonkeyRunner源码剖析> HierarchyViewer实现原理-面向控件编程VS面向坐标编程 poptest是国内唯一一家培养测试开发工程师的培训机 ...
- 【转】 Pro Android学习笔记(七十):HTTP服务(4):SOAP/JSON/XML、异常
目录(?)[-] SOAP JSON和XMLPullParser Exception处理 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件,转载须注明出处:http://blog. ...
- 如何从普通程序员晋升为架构师 面向过程编程OP和面向编程OO
引言 计算机科学是一门应用科学,它的知识体系是典型的倒三角结构,所用的基础知识并不多,只是随着应用领域和方向的不同,产生了很多的分支,所以说编程并不是一件很困难的事情,一个高中生经过特定的训练就可以做 ...
- 关于JavaScript中的delete操作
关于JavaScript中的delete操作 看到一道题,是这样的: (function(x){ delete x; return x; })(1); 1 null undefined Error 我 ...
- 表上的DELETE操作
在今天的文章里,我想给你快速展示下当我们从表里删除记录时,在SQL Server里发生了什么.首先我们来创建一个简单的表,在8KB的页上刚好能插入4条记录. -- Create a simple ta ...
随机推荐
- 用CSS实现阴阳八卦图等图形
CSS还是比较强大的,可以实现中国古典的"阴阳八卦图"等形状. 正方形 #rectangle { width: 200px; height: 100px; backgrount-c ...
- 【t052】冰岛
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 假设你在一个n*n的冰面上,并且你想到达这个冰面的某处,可是由于冰面太滑了,所以当你向某个方向出发后, ...
- icvPrecalculate
/* *icvPrecalculate *作用:计算特征值,并排序 *详细来说也就是依据训练样本信息和haar特征信息,在函数内部引用icvGetTrainingDataCallback来 *分批计算 ...
- Spring boot(一) 入门
本系列基于Eclipse 4.7 .JDK 8 一.下载STS (1)STS 注意自己的eclipse版本. 在 Update Site Archives 里面选择对应eclipse的版本下载. (2 ...
- 百度UEditor图片上传、SpringMVC、Freemarker、Tomcat、Nginx、静态资源
个人官网.公司项目都需要 可视化编辑器,百度UEditor做得很不错,就用的这个.项目后台用到了SpringMVC.Freemarker,开发过程中部署在Jetty,线上部署用Tomcat,最后可能配 ...
- [Grid Layout] Place grid items on a grid using grid-column and grid-row
It’s possible to position a grid item anywhere on a grid track. To do this, let’s specify some grid- ...
- 不使用left-join等多表关联查询,只用单表查询和Java程序,简便实现“多表查询”效果
上次我们提到,不使用left-loin关联查询,可能是为了提高效率或者配置缓存,也可以简化一下sql语句的编写.只写单表查询,sql真得太简单了.问题是,查询多个表的数据还是非常需要的. 因此,存在这 ...
- Dubbo服务框架解析(二)
本节介绍dubbo-common,dubbo-common是公共逻辑模块,包含Util类.通用模型,是其他模块的基础. 扩展机制 SPI SPI是扩展点的注解.标注在类型上.全部的扩展点须要通过SPI ...
- 微信小程序从零开始开发步骤(一)
从零到有写一个小程序系列专题,很早以前就想写来分享,但由于项目一直在进展,没有过多的时间研究技术,现在可以继续分享了.1:注册用没有注册过微信公众平台的邮箱注册一个微信公众号, 申请帐号 ,点击 ht ...
- 【t008】钱币变换问题
Time Limit: 2 second Memory Limit: 32 MB [问题描述] 给定 2*n 个方格,将其排成一行.选择两个相邻的方格,设置为空方格,初始时不放钱币.而其余的方格共放入 ...