REST API 概念的简单介绍

最近发现很多人不了解REST是什么,我综合了下网上的文章,摘录了一下。

首先要明确一点:REST(Representational State Transfer,表述性状态传递)实际上只是一种设计风格,它并不是标准。(所以你可以看到网上一大堆的各种最佳实践,设计指南,但是没有人说设计标准)。

重要的概念:

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 的交互当中,其结果无非就三种状态:

  1. 所有事情都按预期正确执行完毕 - 成功
  2. APP 发生了一些错误 – 客户端错误
  3. API 发生了一些错误 – 服务器端错误

这三种状态与上面的状态码是一一对应的。

HTTP报头

Authorization 认证报头
Cache-Control 缓存报头
Cnotent-Type  消息体类型报头
......

报头还有很多,不一一列举。HTTP报头是描述HTTP请求或响应的元数据,它的作用是客户端 与 服务器端进行相互通信时,告诉对方应该如何处理本次请求。

3、超媒体

老实说,这个词汇我到目前还有没搞得全懂。那也说说自己的理解吧,不一定准确哦,有错误希望指出。

”超媒体“ 你没听说过没关系,”超链接“ 你一定不会陌生。简单来说,”超链接“ 是实现超媒体中的一种方式。”超媒体“希望达到一种就是说在 REST API 中把所有资源给链接起来。它就犹如你打开一个网站的首页,你难道看到的只有首页吗?NO !, 不是的,你可以通过首页查看商品、查看文章、查看论坛。”超媒体“ 就是做这个事情,它利用 API 把所有资源的关系给链接起来了,你看到不会只是一个独立的资源,而是关系网中的一个资源。

”超媒体“ 有点高大上了,老实说,就算你够牛X,写出了一个非常棒的符合”超媒体“的REST API,你的用户即开发者,也不一定能够接受你这种高大上的设计。当然,我相信未来也许可以普及了。

原作者:半兽人 转载来源:http://orchome.com/144

REST API 概念的简单介绍相关推荐

  1. 项目中Swagger2、lombok(小辣椒)、以及短信API的调用 简单介绍

    一.使用Swagger2实时生成接口文档(分布式系统使用) Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web 服务.总体目标是使客户端和文件系统作为 ...

  2. FatFs 的用户层API接口应用简单介绍(基于STM32F1)

    ℹ️ 本篇文章没有说明实现方法,仅是简单介绍了 FatFs 的部分函数和结构体定义. FatFs API 应用程序接口 ▶️ 根据 FatFS 的教程手册来看,将程序接口分为了四个部分. 文件访问 目 ...

  3. 区块链概念及简单介绍

    友情提醒:比特币采用区块链技术,但是区块链并不等同于比特币:全篇基于比特币底层区块链技术讲述,所以,部分模型可能不适用于以太坊等.另外,由于文章采用了一定的抽象.类举的叙事方式,中间或多或少有些地方会 ...

  4. 财务模块多组织,GL, SLA, SOB, COA, BSV, CCID, LE 概念的简单介绍

     GL=  General Ledger 指的是Oracle 的总帐系统. application_id = 101. 在uk似乎居然还有不同的解释(In the UK, it was refer ...

  5. 云主机概念的简单介绍

    什么是云主机?它能用来做什么?很多运维小白都不是很清楚,我们就给大家简单解释一下云主机的概念. 云主机是云计算在基础设施应用中的重要组成部分,位于云计算产业链的金字塔底层,其产品源于云计算平台.该平台 ...

  6. Spring Data JPA 从入门到精通~Criteria概念的简单介绍

    (1)Root<T> root 代表了可以查询和操作的实体对象的根,如果将实体对象比喻成表名,那 root 里面就是这张表里面的字段,这不过是 JPQL 的实体字段而已.通过里面的 Pat ...

  7. 蓝牙Sig Mesh 概念入门①——简单介绍

    文章目录 一.前言 二.Mesh组网怎么选 2.1 WiFi Mesh (插电的用WiFi) 2.2 蓝牙 Sig Mesh (需要与手机互动的) 3.3 ZigBee Mesh (其他) 三.蓝牙模 ...

  8. URI概念的简单介绍

    既然有了java.io来操作资源流:但是对于网络的资源,该怎么打开,怎么定位呢?答URI-URL URI全称是Uniform Resource Identifier 统一资源标识符 通俗说,就是一个类 ...

  9. 查全率和查准率两者概念的简单介绍

    http://blog.csdn.net/haiyan0106/article/details/1758929

最新文章

  1. csharp DataTable and DataGridView delete a Row
  2. Linux监控   Nagios
  3. python list遍历
  4. 理解单片机系统—汇编语言
  5. POJ - 2230 Watchcow(欧拉图)
  6. 【渝粤教育】广东开放大学 文化田野调查 形成性考核 (22)
  7. 小程序点击地图气泡获取气泡_气泡上的气泡
  8. 轻松访问 Android 系统源码与下载
  9. NodeMailer
  10. 联想拯救者电竞手机新特性确认:有望搭载双X轴线性马达
  11. visual studio Code配置C++环境:
  12. B站智能防挡弹幕的一种python实现
  13. Android 系统汉字转拼音 HanziToPinyin
  14. “衣带渐宽终不悔,为伊消得人憔悴” 读《唐宋词十七讲》有感二 —— 2021.12.23 晚八时
  15. 计算机博士复试英语自我介绍,博士复试面试英语自我介绍
  16. IV油管套件和配件的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  17. arcgis注记详解
  18. 计算机机械硬盘系统安装,电脑硬盘安装图解,机械硬盘安装-
  19. python异步查询数据库_Python的Tornado框架实现异步非阻塞访问数据库的示例
  20. 利用canvas实现田字格里写字,并适配移动端

热门文章

  1. 重磅资料!Github上的PHP资源汇总大全
  2. Magento 显示下拉货币 How to add Currency selector to Magento’s header
  3. Kubernetes-Pod/ReplicaSet/Deployment/Service关系(二十一)
  4. Ubuntu 安装开源微信(源码安装+release快速安装)
  5. 【GPU编程】开始Cg之旅,编译自己的第一个Cg程序
  6. 【数字图像处理】C++读取、旋转和保存bmp图像文件编程实现
  7. 0407 背景相关的作业
  8. 单例模式 c# 1214
  9. requests-获取cookie-0223
  10. 练习-前程无忧数据爬取