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. 提示 make: 没有什么可以做的为 `all'

    提示 make: 没有什么可以做的为 `all'. make clean 一次,编译过程又有了.

  2. python使用httplib2访问REST服务的例子

    首先你需要安装httplib2,这个可以在github上找到: 然后你需要获得一个http连接的对象: con = httplib2.Http()   然后你需要发起连接: (6)resp, (5)c ...

  3. python网络爬虫抓取网站图片

    本文介绍两种爬取方式: 1.正则表达式 2.bs4解析Html 以下为正则表达式爬虫,面向对象封装后的代码如下: import urllib.request # 用于下载图片 import os im ...

  4. ADO.NET系列之事务和调用存储过程

    ADO.NET系列之Connection对象 ADO.NET系列之Command对象 ADO.NET系列之DataAdapter对象 ADO.NET系列之事务和调用存储过程 前几篇我们介绍了Conne ...

  5. 【转】C# 之泛型详解

    原文地址:https://www.cnblogs.com/yueyue184/p/5032156.html 什么是泛型 我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一 ...

  6. Python 一篇学会多线程

    多线程和多进程是什么自行google补脑,廖雪峰官网也有,但是不够简洁,有点晕,所以就整个简单的范例. 对于python 多线程的理解,我花了很长时间,搜索的大部份文章都不够通俗易懂.所以,这里力图用 ...

  7. Spring 扫描标签<context:component-scan/>

    一. <context:annotation-config/> 此标签支持一些注入属性的注解, 列如:@Autowired, @Resource注解 二. <context:comp ...

  8. underscore.js源码研究(7)

    概述 很早就想研究underscore源码了,虽然underscore.js这个库有些过时了,但是我还是想学习一下库的架构,函数式编程以及常用方法的编写这些方面的内容,又恰好没什么其它要研究的了,所以 ...

  9. 11-01 Java 开发工具 eclipse从下载、安装到实际使用的详细教程

     Eclipse和MyEclipse简介 Eclipse是一种可扩展的开放源代码的IDE.起始于1999年4月,由OTI和IBM两家公司的IDE产品开发组组建. 2001年11月,IBM公司捐出价值4 ...

  10. Java 多线程学习笔记:wait、notify、notifyAll的阻塞和恢复

    前言:昨天尝试用Java自行实现生产者消费者问题(Producer-Consumer Problem),在coding时,使用到了Condition的await和signalAll方法,然后顺便想起了 ...