RPC和REST区别
首先要明确一点:REST 实际上只是一种设计风格,它并不是标准。(所以你可以看到网上一大堆的各种最佳实践,设计指南,但是没有人说设计标准)。
说说几个重要的概念:
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请求或响应的元数据,它的作用是客户端 与 服务器端进行相互通信时,告诉对方应该如何处理本次请求。
3、超媒体
老实说,这个词汇我到目前还有没搞得全懂。那也说说自己的理解吧,不一定准确哦,有错误希望指出。
”超媒体“ 你没听说过没关系,”超链接“ 你一定不会陌生。简单来说,”超链接“ 是实现超媒体中的一种方式。”超媒体“希望达到一种就是说在 REST API 中把所有资源给链接起来。它就犹如你打开一个网站的首页,你难道看到的只有首页吗?NO !, 不是的,你可以通过首页查看商品、查看文章、查看论坛。”超媒体“ 就是做这个事情,它利用 API 把所有资源的关系给链接起来了,你看到不会只是一个独立的资源,而是关系网中的一个资源。
”超媒体“ 有点高大上了,老实说,就算你够牛X,写出了一个非常棒的符合”超媒体“的REST API,你的用户即开发者,也不一定能够接受你这种高大上的设计。当然,我相信未来也许可以普及了。
4、最后
上面只是简单说了一些自己最近做REST的一些体验吧。有关于REST的介绍文章实在是太多了,当然很多写得也非常不错,我这里 aisuhua/restful-api-design-references · GitHub 收集了一些,喜欢的话可以看看,有更好的可以推荐给我。对于上面的回答,有任何不对,都希望您能指出,大家共同进步,谢谢大家!
链接:https://www.zhihu.com/question/28557115/answer/47846156
RPC和REST区别相关推荐
- spring cloud和普通rpc框架的区别
spring cloud和普通rpc框架的区别 补了一部分,后续再补 背景 其实本文标题有点不对,Spring Cloud也是一种RPC框架,但是区别是它使用的是http协议的传输,整体技术和普通RP ...
- Http和Rpc框架的区别
虽然现在服务间的调用越来越多地使用了 RPC 和消息队列,但是 HTTP 依然有适合它的场景. RPC 的优势在于高效的网络传输模型(常使用 NIO 来实现),以及针对服务调用场景专门设计协议和高效的 ...
- GPRC 和RPC 有什么区别?GPRC和RPC的区别是什么?
什么是RPC? RPC (Remote Procedure Call)是远程过程调用,比如说现在有两台服务器A, B,一个在A服务器上的应用想要调用B服务器上的应用提供的某个,由于不在两个方法不在一个 ...
- RPC协议与Http协议区别
RPC调用 RPC是远程过程调用(Remote Procedure Call)的缩写形式.SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部 ...
- 远程调用服务(RPC)和消息(Message Queue)对比及其适用/不适用场合
在阿里的平台技术部参与开发了Dubbo(远程调用服务)和Napoli(消息解决方案),又给网站应用支持这2个产品很长一段时间,了解了这2个产品的实现及应用对这两个产品的用法. 大部分情况下," ...
- HTTP VS RPC
先再次重复强调一遍,通信协议不是 rpc 最重要的部分,不要被这类回答带偏.如果要了解 rpc 请更多的去了解服务治理(SOA)的一些基本策略,推荐去看看 dubbo 的相关文档. 一.详解 rpc是 ...
- rpc协议微服务器,RPC协议及实现方式(分布式微服务治理的核心)
分布式微服务治理的核心在于: 微服务和分布式 (微服务框架)微服务的最优技术实现目前是: SpringBoot (RPC 框架)分布式的最优技术实现目前是: Thrift,Motan,Dubbo,Sp ...
- 网络协议 22 - RPC 协议(下)- 二进制类 RPC 协议
网络协议 22 - RPC 协议(下)- 二进制类 RPC 协议 原文:网络协议 22 - RPC 协议(下)- 二进制类 RPC 协议 前面我们认识了两个常用文本类的 RPC 协议,对于陌生 ...
- RPC(Remote Procedure Call)远程过程调用
所谓的RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制, 使得应用之间可以进行通讯,而且也遵从server/client模型. 使用的时候客户端调用serve ...
最新文章
- ORACLE12C_ADG删除pdb
- 局域网***-Dos***CDP
- ecmall开发记录(三)
- SAP SF打印次数统计
- how to handdraw a web UI for applications? Figma
- Lintcode--4(1)--A+B
- PHPJavaScript笔记-后端利用Refresh头带错误信息给前端(野路子操作)
- 转角遇上Volcano,看HPC如何应用在气象行业
- 原创:PHP乱码怎么办?五种方法彻底解决PHP乱码问题
- 一加9系列全网预约量破200万:3月24日见!
- 快来学习一下吧!Web前端开发CSS居中的五大方式
- 【转】Struts2 严重: Dispatcher initialization failed java.lang.RuntimeException
- 常用正则表达式归类贴
- 编程基础(四)——cache之一
- 三维平面叠加图_无人机倾斜摄影技术在三维实景GIS的应用
- 从零开始学android:Activity初步
- erp软件涉及哪些计算机技术?,ERP软件应该学习哪些内容?
- windows域用户切换本地用户
- 为什么从Java开发转测试?
- 卫星导航定位误差之电离层、对流层
热门文章
- 没有bug队——加贝——Python 练习实例 15,16
- ip地址自动切换器_网络IP切换器IPProviders下载_IPProviders官方版下载1.1.22
- mysql 多项式_mysql主从复制原理及实现
- 怎样把电脑恢复出厂设置_数据蛙:苹果恢复出厂设置,彻底释放手机内存
- 74ls90设计十进制计数器电路图_PLC控制系统的设计与调试步骤你知多少?
- 升级锦囊 | 测试开发核心技术46讲
- IntelliJ IDEA 如何导出安卓(Android)apk文件 详细教程
- 怎样使用navicat将mysql的数据表导出保存(转储SQL文件)
- 爬虫前期知识的储备(二)
- 简述openstack