RESTful是一种设计风格,并不是一种标准。

简短的去概括的话,就是:
1、URL 定位资源

资源,就是数据。比如newsfeed,friends,order等

2、用 HTTP 动词描述操作。

GET、PUT、POST、DELETE

我为什么要用TA

1、以前的开发方式都是前后端混在一起开发,比如php里面写html啊之类的。那么移动开发再加上web,我们岂不是要维护三个地方。
2、随着版本迭代,项目越来越大,如果api杂乱无章,那么维护起来更是无法控制。
3、所以,我们就要有所约束,而RESTful就是利用HTTP本身的一些特征来制定的风格。


如何设计RESTful?

  • REST ful 是面向资源的,而资源是通过 URI 进行暴露。

    (一)、URI 的设计只要负责把资源通过合理方式暴露出来就可以了
    (二)、对资源的操作与它无关,操作是通过 HTTP 动词来体现。
    (三)、所以 REST ful 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。
    (四)、推荐用复数。

不太理解吗?来看个栗子:

比如:左边是错误的设计,而右边是正确的

GET /rest/api/getDogs | GET /rest/api/dogs 获取所有狗
POST /rest/api/addDogs | POST /rest/api/dogs 添加一个狗
PUT /rest/api/editDogs/:dog_id | PUT /rest/api/dogs/:dog_id 修改一只狗
DELETE /rest/api/deleteDogs/:dog_id | DELETE /rest/api/dogs/:dog_id 删除一只狗
左边的这种设计,很明显不符合REST风格。

上面已经说了,URI 只负责准确无误的暴露资源,而 getDogs/addDogs... 已经包含了对资源的操作,这是不对的。
相反右边却满足了,它的操作是使用标准的HTTP动词来体现。

  • REST ful 很好地利用了HTTP本身就有的一些特征,如HTTP动词、HTTP状态码、HTTP报头等等

    (一)、REST ful 是基于 HTTP 的,所以你的API应该去使用 HTTP的一些标准。这样所有的HTTP客户端(如浏览器)才能够直接理解你的API。
    (二)、REST ful 强调利用好 HTTP 本来就有的特征。

不太理解吗?一个一个解释:
一、HTTP 动词
GET      获取一个资源
POST 添加一个资源
PUT 修改一个资源
DELETE 删除一个资源

实际上,这四个动词实际上就对应着增删改查四个操作,这就利用了HTTP 动词来表示对资源的操作。

二、HTTP状态码

在与 API 的交互当中,无非就三种状态:

200   OK                       成功
400 Bad Request 客户端错误
500 Internal Server Error 服务器端错误
三、HTTP报头
Authorization   认证报头
Cache-Control 缓存报头
Content-Type 消息体类型报头
...

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


一些实例如醍醐灌顶

GET http://localhost:8080/api/students 可以获得所有的学生信息。

GET http://localhost:8080/api/students/1 可以获得id为“1”的学生信息。

POST 以下JSON内容
{"id":0,"firstName":"Edison","lastName":"Di","gender":"M",
"birthday":538300800000,"uscId":"1234509876","gpa":3.62,
"mentorId":null,"department":"Computer Science"}
到 http://localhost:8080/api/student 可以添加一个学生信息。 PUT 以下内容
{"gpa":3.62}
到 http://localhost:8080/api/students/1 可以修改学生ID为1的学生的GPA. DELETE http://localhost:8080/api/students/1 可以删除学生ID为1的信息。

 

RESTful API入门的更多相关文章

  1. 使用 SpringBoot 构建一个RESTful API

    目录 背景 创建 SpringBoot 项目/模块 SpringBoot pom.xml api pom.xml 创建 RESTful API 应用 @SpringBootApplication @C ...

  2. Yii2框架RESTful API教程(一) - 快速入门

    前不久做一个项目,是用Yii2框架写一套RESTful风格的API,就去查了下<Yii 2.0 权威指南 >,发现上面写得比较简略.所以就在这里写一篇教程贴,希望帮助刚接触Yii2框架RE ...

  3. RESTful API & Swagger入门

    什么是RESTful API? 原文地址:https://blog.csdn.net/hjc1984117/article/details/77334616 Swagger入门教程 https://w ...

  4. MongoDB最简单的入门教程之五-通过Restful API访问MongoDB

    通过前面四篇的学习,我们已经在本地安装了一个MongoDB数据库,并且通过一个简单的Spring boot应用的单元测试,插入了几条记录到MongoDB中,并通过MongoDB Compass查看到了 ...

  5. Spring Boot入门系列(二十)快速打造Restful API 接口

    spring boot入门系列文章已经写到第二十篇,前面我们讲了spring boot的基础入门的内容,也介绍了spring boot 整合mybatis,整合redis.整合Thymeleaf 模板 ...

  6. 带你入门带你飞Ⅱ 使用Mocha + Chai + SuperTest测试Restful API in node.js

    目录 1. 简介 2. 准备开始 3. Restful API测试实战 Example 1 - GET Example 2 - Post Example 3 - Put Example 4 - Del ...

  7. Spring Boot入门系列(二十一)如何优雅的设计 Restful API 接口版本号,实现 API 版本控制!

    前面介绍了Spring Boot 如何快速实现Restful api 接口,并以人员信息为例,设计了一套操作人员信息的接口.不清楚的可以看之前的文章:https://www.cnblogs.com/z ...

  8. Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档

    前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...

  9. Yii2框架RESTful API教程(二) - 格式化响应,授权认证和速率限制

    之前写过一篇Yii2框架RESTful API教程(一) - 快速入门,今天接着来探究一下Yii2 RESTful的格式化响应,授权认证和速率限制三个部分 一.目录结构 先列出需要改动的文件.目录如下 ...

随机推荐

  1. ServiceStack NetCoreAppSettings 配置文件读取和设置

    假设Node和npm已经安装 npm install -g @servicestack/cli 执行命令dotnet-new selfhost SSHost 这样就创建了ServiceStack的控制 ...

  2. C# WPF 中WebBrowser拖动来移动窗口,改变窗口位置

    前言 wpf中的WebBrowser相比之前的winform阉割了不少东西,也增加了不少东西,但是msdn对wpf也没有较好的文档 WebBrowser可以说是一个.NET控件,相对于WPF中的控件, ...

  3. python做数据分析pandas库介绍之DataFrame基本操作

    怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...

  4. Synchronzied(内置锁)

    原文地址:深入JVM锁机制1-synchronized 1. 线程的状态与转换 当多个线程同时请求某个对象监视器时,对象监视器会设置几种状态用来区分请求的线程: Contention List:所有请 ...

  5. js 正则语法

    原文:一次性搞懂javascript正则表达式之语法 看完原文,对正则中以前一知半解的捕获组与非捕获组.零宽断言有了更深的理解.很感谢原文作者~~ 普通字符 当我们写a的时候,我们指的就是a:当我们写 ...

  6. Tools - Others

    01 - 一些网络工具 文档查阅 https://devdocs.io/ API文档 http://overapi.com/ 开源代码及文档搜索 https://searchcode.com/ 电子书 ...

  7. linux的RPM软件包管理工具

    RPM(Redhat Package Manage)原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐受到其他发行版的采 ...

  8. 采用太平洋AI集装箱箱号识别接口实现集装箱箱号识别

    识别 示例图片 1 太平洋AI集装箱箱号识别接口(文档下方有详细操作指南) 1.1 接口一:提交base64格式的图片 地址:http://218.1.125.60:88/container_num_ ...

  9. 精通CSS 第1章

    一 标记简史 1 使用有意义的元素 2 ID和类名:ID是唯一的,而一个类名可以应用于多个元素.在写ID和类名时需要注意区分大小写,并使用统一的命名约定,比如完全小写+连字符分割,例andy-budd ...

  10. 详解使用flask_paginate进行分页

    分页技术好处: 1.分页技术是把数据全部查询出来,然后再进行分页 2.分页技术可以,降低带宽使用,提高访问速度 使用flask_paginate进行分页 1.要使用flask_paginate,首先安 ...