介绍

自从Roy Fielding博士在2000年他的博士论文中提出Rest(Representational State Transfer)风格的软件架构模式后,REST就基本上迅速取代了复杂而笨重的SOAP,成为Web API的标准了。

什么是Web API呢?

如果我们想要获取某个电商网站的某个商品,输入http://localhost:8080/demo/products/123,就可以看到id为123的商品页面,但这个结果是HTML页面,它同时混合包含了Product的数据和Product的展示两个部分。对于用户来说,阅读起来没有问题,但是,如果机器读取,就很难从HTML中解析出Product的数据。

如果一个URL返回的不是HTML,而是机器能直接解析的数据,这个URL就可以看成是一个Web API。比如,读取http://localhost:8080/api/products/123,如果能直接返回Product的数据,那么机器就可以直接读取。

编写API有什么好处呢?由于API就是把Web App的功能全部封装了,所以,通过API操作数据,可以极大地把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单。

此外,如果我们把前端页面看作是一种用于展示的客户端,那么API就是为客户端提供数据、操作数据的接口。这种设计可以获得极高的扩展性。例如,当用户需要在手机上购买商品时,只需要开发针对iOS和Android的两个客户端,通过客户端访问API,就可以完成通过浏览器页面提供的功能,而后端代码基本无需改动。

什么是REST?

  REST(Representational State Transfer):表现层转移(转移:通过HTTP动词实现),是一种软件架构风格。总结:URL定位资源,HTTP动词操作(GET,POST,PUT,DELETE)描述操作。REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取,所以,以JSON格式编写的REST风格的API具有简单、易读、易用的特点。

什么是RESTful?

  基于Rest构建的API就是Restful风格。

为什么使用RESTful?

  JSP内嵌java代码影响了我们的开发效率。因为我们需要将html转换成html页面,并写一些脚本,这影响了开发效率,也不能让开发人员专注于业务功能的开发,所以越来越多的公司选择前后端分离。

设计RESTful风格的API:

  1、在RESTful风格的架构中,每个网址代表一种资源,所以网址中不能有动词,只能有名词。而且所用的名词往往与数据库的表名对应。

  2、HTTP动词设计:GET(获取资源)   POST(新建资源)  PUT(更新资源,客户端提供改变后的完整资源) DELETE(删除资源) 

请求方式 含义
GET /zoos 列出所有动物园
POST /zoos 新建一个动物园
GET /zoos/ID 获取某个指定动物园的信息
PUT /zoos/ID 更新某个指定动物园的信息(提供该动物园的全部信息)
DELETE /zoos/ID 删除某个动物园
GET /zoos/ID/animals 列出某个指定动物园的所有动物
DELETE /zoos/ID/animals/ID 删除某个指定动物园的指定动物

最新文章

  1. 【uwp】浅谈China Daily 中划词翻译的实现
  2. 局部打印插件 jquery.PrintArea.js
  3. JAVA代理模式与动态代理模式
  4. 关于MYSQL数据库安装方式及相关设置简要说明
  5. C# 在异步中使用HttpWebRequest出现的“正在终止线程”错误的解决方案
  6. 第二章 C#基本数据类型
  7. php常用函数汇总
  8. 5分钟上手写ECharts的第一个图表
  9. C#基础知识点
  10. linux 内核(驱动)常用函数
  11. Kicad使用经验谈
  12. Windows上常见的集中布尔类型的比较
  13. 使用分析函数实现Oracle 10G提供的CONNECT_BY_ISLEAF和CONNECT_BY_ROOT的功能(转载)
  14. JAVA - 深入JAVA 虚拟机 2
  15. docker设置固定ip地址
  16. Docker 容器状态查看 - 五
  17. 线性回归,逻辑回归,神经网络,SVM的总结
  18. Android中AsyncTask的使用
  19. SpringBoot favicon.ico
  20. Android wpa_supplicant 四次握手 流程分析

热门文章

  1. LeetCode 1043. Partition Array for Maximum Sum
  2. learning java Encoder and Decoder
  3. 关于异常System.ArgumentException
  4. zabbix显示 get value from agent failed:cannot connetct to xxxx:10050:[4] interrupted system call
  5. 机器学习---朴素贝叶斯与逻辑回归的区别(Machine Learning Naive Bayes Logistic Regression Difference)
  6. Python入门(一)-打开世界之Hello World
  7. springboot2.0整合redis作为缓存以json格式存储对象
  8. mysql ,with rollup的用法
  9. Java中定义不了可变长数组怎么办---集合 泛型
  10. Spring Boot 配置文件 bootstrap vs application 到底有什么区别?