接口的定义
狭义的接口被认为是仅仅为了传送数据而存在的URL地址(是被我认为的,也没百度),目前来看,常用的数据结构定义有两种
- XML
- JSON
通过发送HTTP的Request请求,可以得到数据性质的Response返回报文,这些数据代表着后台的逻辑行为
接口的基础和责任
接口的基础是HTTP协议,其责任是反应后台逻辑,所以说需要一种与后台语言相同的HTTP的实现,而Servlet是最著名的Java EE后台的HTTP实现所以说:
Servlet是由Java代码编写的,而Java EE又可以进行后台逻辑处理,那么基于Servlet的接口就反应了Java代码书写的后台的逻辑
是不是接口全是Servlet
并不是,接口和Servlet没有直接关系,Servlet只是Java代码的HTTP逻辑实现,在其它语言中如 Node.js PHP Swift3.0 都有自己的HTTP逻辑实现,只要能完成HTTP操作,并且可以书写后台逻辑,都可以生成接口。
接口中HTTP常见的知识点误区
在前端工程师的面试过程中,经常会问到的一个问题: Get请求和POST请求有什么区别
不管是百度还是Google 第一个答案都是:
- Get请求参数在URL中,长度有限制
- Post请求参数在Body中,长度没限制,而且更加安全
这个答案是错的
Get和Post有什么区别呢
首先来讲
Get和Post和接口安全不安全没有一毛钱关系
其次才是以下两点
- Get请求并不是必须把参数放在URL里,长度有限制倒是真的
- Post也可以把参数放在URL里
- Get和Post只是HTTP的六个方法中的两个,和请求参数的存放也没有任何关系
HTTP的知识请参照HTTP报文基本概念学习
为什么会产生这个问题(八卦,可以不看)
根据我个人理解,HTTP之父美国人Ted Nelson构思HTTP的时候,当时的超文本只有HTML一种,并没有XML和JSON,当时他已经意识到以后必须出现一种方案来解决 动态的数据 的传送问题,于是就预先设定了8个方法来完成不同功能
HTTP方法 | HTTP作用 |
---|---|
Get | 获取数据,从服务器获取 |
Post | 传送数据,不保存 |
Put | 提交数据,保存在服务器 |
DELETE | 删除数据,从服务器 |
HEAD | 仅仅获得报文头 |
OPTIONS | 可选方法,用于增加扩展性 |
CONNECT | 仅仅建立一次HTTP链接,不传送数据 |
TRACE | 调试链接,追踪数据 |
从实际的应用看来 好多方法明显是为了以后的动态数据处理奠定基础,结果业界发展向了另外一个方向 所以在目前的业务中,其余的方法都被闲置了,而且这些方法都没有规定参数必须放在哪里,参数和方法在HTTP中是完全独立的两个概念。
GoodBye Web
经过了三篇文章的BB,我们来进行Hello Web的总结来梳理如何建立从 网页视图 至 服务器后台 之间的联系
静态网页+Ajax
------静态网页------
- 浏览器针对URL发送HTTP的Get请求
- 服务器响应HTTP请求,把page.html文件内容放入Response报文
- 浏览器接收到Response报文,展示成网页(至此静态网页结束)
------Ajax请求接口------
- 浏览器发送Ajax的HTTP请求,携带请求参数
- 服务器接收到HTTP请求
- 利用某种后台语言的HTTP实现执行某种逻辑(如Servlet执行Java本地代码从数据库读数据)
- 把结构化的数据放入HTTP的Response报文
- 浏览器根据Ajax的返回报文对HTML文本进行更改更新页面
动态网页
- 浏览器发送HTTP的Get请求
- 服务器后台接收到HTTP请求
- 利用某种后台语言的HTTP语言实现生成一段HTML文本(如基于Servlet的JSP)
- 把生成的HTML文本放入HTTP的Response报文
- 浏览器接收到Response报文,展示成网页
建立接口的必备条件
根据以上总结,能够通过接口建立联系的必备条件是以下几点
- 某种语言能完成复杂的逻辑执行建立服务器(如Java)
- 语言能够进行传输协议收发的实现(如基于Java的Servlet完成了HTTP)
- 有一个针对该实现的服务器容器(如Tomcat)
- 语言可以链接和操作数据库(如Java中的JDBC)
凡是满足了以上四点的,都可以当作一个服务器建立起来,并且和前端进行交互,如现在的Node.js和PHP等等,至于后台逻辑怎么运行以及和数据库进行交互,会有其它文章另行总结。